- 博客(139)
- 收藏
- 关注
原创 hi3519dv500开发环境搭建及SDK编译和烧录:
本文详细介绍了Hi3519DV500开发环境的搭建及SDK编译烧录过程。首先在Ubuntu22.04虚拟机上配置基础开发环境,包括更换软件源、安装必要工具链和Python虚拟环境。然后安装交叉编译工具并编译SDK,针对原厂SDK编译中出现的glibc、shell工具和blkid头文件等问题提供了具体解决方案。最后通过网线和串口连接开发板,使用烧录工具完成固件烧录。整个流程涵盖了从环境配置到最终烧录的全过程,为开发者提供了完整的Hi3519DV500开发指南。
2025-07-14 17:33:52
234
原创 9.DJI-payload SDK 基于DJI-psdk的空中气象站项目/激光甲烷检测仪项目展示:
以第0章节末尾的百度网盘中Payload-SDK-3.8.zip项目代码解压后运行为例:控件效果展示:动作栏按钮显示效果:PSDK 负载设置界面中的显示效果:动作栏按钮显示效果:PSDK 负载设置界面中的显示效果:点击控件开始运动和结束运动:点击控件开始运动和结束运动:垂直朝下进行画圈运动:DJI Assistant 2软件通过USB线连接无人机:查看当前固件版本:无人机:经纬M350 RTK版本:云台:DJI xport:甲烷检测仪版本:
2025-04-27 17:53:34
206
原创 8.DJI-PSDK:一站式项目功能开发总结(空中气象站项目/激光甲烷检测项目)
本文将以一篇文章的幅度快速完成:项目一:空中气象站项目;项目二:激光甲烷项目;项目所使用的PSDK来源于第0章节末尾的百度网盘;解压:Payload-SDK-3.8.zip代码所在目录:双击打开:修改打印串口和相关波特率,我们修改如下:进行相关编译选项配置如下::
2025-04-27 17:50:22
87
原创 7.DJI-PSDK:psdk负载应用固件升级(基于RTOS)
在单片机应用程序开发阶段,我们可以借助keil5和J-LINK来直接下载应用程序进行开发和调试,但在产品交付之后,我们对应用程序做了改动和升级,是断然不可能采用这种方式的,我们应该将新版本的程序固件打包发给客户,能够方便用户通过DJI Assistant2选择更新负载设备的固件,导入本地固件程序包,更新负载设备。使用STM32F4 开发的负载设备从Flash 中直接读取固件文件并运行负载设备程序,因此开发者需先烧录Bootloader 再烧录应用固件,烧录Bootloader 的步骤不再赘述。
2025-04-25 17:04:08
188
原创 6.DJI-PSDK:psdk订阅无人机高度/速度/GPS/RTK/时间/经纬度等消息及问题解决
消息订阅可以获取绝大多数无人机的动态信息,包括无人机的姿态、速度、加速度、角速度、高度、GPS 位置、云台的角度和状态、飞行模式和飞行状态、电机和电池等各类关键信息。这些信息并不会“一股脑儿地”全部提供了 PSDK 应用,而是需要开发者有针对性地订阅。被订阅的信息将会按照一定的频率传递至 PSDK 数据池中,可以有效节约链路资源和内存资源。
2025-04-15 17:36:28
548
原创 5.DJI-PSDK:Psdk开发负载与Msdk的应用app进行交互:
说明: PSDK 的数据传输模块以透传的方式在负载设备、机载计算机和无人机间传输数据,支持用户根据实际的使用需求设计数据传输协议,使基于PSDK 开发的负载设备能够与移动端App 或机载计算机间实现复杂通信。使用数据传输功能,不仅可以设置不同类型的数据占用高速数据传输通道带宽的比例,还能够查看不同数据传输通道的状态。PSDK 的数据传输模块通过使用流量阈值和缓冲区,限制负载设备向移动端App 或机载计算机发送的数据量,实现流量控制功能,如 图2.流量控制 所示。
2025-04-11 11:23:30
742
原创 4.DJI-PSDK云台x-port控制:
使用PSDK 的“云台控制”功能,开发者需要先设计负载设备的云台并开发出控制云台的程序,将云台的控制函数注册到PSDK 指定的接口后,用户通过使用DJI Pilot、基于MSDK 开发的移动端App 及遥控器即可控制基于PSDK 开发的具有云台功能的负载设备,同时获得负载设备的相关信息,如姿态等。云台的姿态如 图2.云台姿态 所示,根据用户的控制指令,云台能够调整姿态;云台的关节如 图1.云台关节 所示,云台关节是云台上带动负载设备转动的结构件:云台电机,云台关节角即云台电机转动的角度。
2025-04-10 14:57:34
288
原创 3.DJI-payload SDK自定义控件的设计:
自定义控件(Widget)是指负载运行时,在用户界面中显示的自定义 UI 控件,以帮助用户快速查看负载独特的设备状态,或者对负载设进行设置。这些 UI 控件可以显示在以下用户界面中。Pilot 2 应用程序;大疆智图;基于 MSDK 开发的应用程序。这种自定义控件并不是通过 MSDK 实现的,而是通过 PSDK 的配置实现的。。
2025-04-09 17:03:43
258
原创 2.DJI-payload SDK负载串口通信流程及如何新增串口
DJI - payload SDK 负载串口通信全解析在无人机应用领域,DJI 的 payload SDK 为开发者提供了强大的拓展能力,其中串口通信是实现无人机与各类外部设备高效交互的关键技术之一。本文将深入探讨 DJI - payload SDK 负载串口通信流程,包括串口 1 打印流程、串口3交互流程、串口与甲烷 / 温湿度传感器交互流程,同时详细讲解如何新增串口 4 与无人机通信。串口 1 在整个系统中通常承担着基础信息输出的重要职责。当我们初始化 DJI - payload SDK 时,首先需要
2025-04-08 15:25:36
184
原创 rk3588-ubuntu22.04系统网关实现路由器功能:
如果网关 和 设备所处的环境可以通过网线联网或者路由器联网,那么不需要将网关配置成路由器的模式,可以直接通过插入网线,实现互联互通。
2024-12-10 16:21:29
1441
原创 通过openVPN实现远程plc设备(方案二)(ubuntu22.04系统网关作为客户端):
openvpn还可以根据配置信息完成更复杂的配置,比如将某个客户端所在网络的其它网络加入到整个 VPN 大网络中。整体对配置总结如下:1.服务端路由的作用是配置当前 VPN 服务器的路由信息,在配置文件中声明的路由将加入到 VPN 服务端的路由表中,以达到当 VPN 服务器接收到目标地址的数据转发时,将数据交给 VPN 服务来处理。2.路由下发中配置的路由将下发给客户端,客户端在接收到下发的路由后,更新本地路由表,符合路由表的数据将转发给VPN 服务端3.ccd下的文件必须与客户端名称相同。
2024-12-09 17:15:50
1333
原创 RK3568/RK3588之修改8250驱动实现RS485收发的自动切换
在串口发送前,若为485,则将控制引脚拉为发送状态,在发送后,循环查看是否发送完成,若发送完成则将引脚置回读状态,如此一来,就能实现在内核测控制方向切换,而不会因为延时造成数据丢失,经过测试此办法可行。全部修改完成后,重新编译生成内核文件和设备树文件,烧写到板子上即可。
2024-11-22 15:30:11
1929
1
原创 rk3588-ubuntu22.04系统网关利用openVPN和frp实现VPN远程访问PLC设备的程序上传下载
第一阶段:在ubuntu22.04的网关上部署openVPN服务端;第二阶段:利用frp将openVPN监听的服务端端口映射到腾讯云服务器上;第三阶段:在远程windows的PC机上安装openVPN的客户端,形成同一局域网;第四阶段:在ubuntu22.04上调整路由转发,使得远程PLC上位机成功访问PLC设备;
2024-11-22 11:24:52
1354
原创 Linux驱动开发2:字符设备驱动之我的第一个字符设备Linux驱动开发模板
Linux驱动开发2:字符设备驱动之我的第一个字符设备Linux驱动开发模板在本章节,我们从Linux驱动开发中最基础的字符设备驱动开发开始,重点学习Linux下字符设备开发框架,本章会以一个虚拟的设备为例,讲解如何进行Linux字符设备驱动开发,以及如何编写测试APP来测试驱动开发是否正常,为以后的学习打下坚定的基础;1.应用程序和驱动的交互原理:驱动就是获取外设,或者传感器的数据,以及控制外设,数据会提交给应用程序;在编写Linux驱动的时候,既要编写驱动,也要编写一个简单的应用程序app;单片
2021-08-04 03:55:40
626
1
原创 Linux驱动开发1:驱动开发与裸机开发的区别
Linux驱动开发1:驱动开发与裸机开发的区别1.裸机驱动开发回顾:裸机驱动开发是非常底层的,跟寄存器打交道,有些MCU为了方便我们开发,提供了一些库,让我们通过调用API函数来间接的实现利用寄存器来控制我们的裸机外设;2.Linux驱动开发思维:首先,Linux驱动来直接操作寄存器是不现实的;我们Linux驱动开发需要做的是:根据Linux的驱动框架来进行开发,也就是需要掌握各种Linux驱动框架;Linux驱动最终表现为:/dev/***文件:能够打开,关闭,读写等操作;现在的内核支持设备
2021-08-02 23:17:36
1785
原创 C++的基础使用:C++语言的新特性及面向对象
C++的基础使用:C++语言的新特性及面向对象在第二章 C++基础里,这里主要介绍概念为主,主要介绍 C++与 C 语言中常用的不同点,和一些新的变化。其中不会去说指针、数据类型、变量类型、判断和循环等这些知识,这些和C 语言基本是一样使用的。我们主要学习 C++的面向对象编程,对学习 Qt 有很大的帮助;Qt 里就能体现到 C++编程带来的优势和便处。就算没学过 C++,学习 Qt 也不会很难。写 C++基础这章,编者已经把重要概念写出来,但是实际上 C++的内容不止这么多,第二章是快餐式 C++入门
2021-08-02 03:17:55
547
原创 系统移植篇1:系统移植简介
系统移植篇1:系统移植简介对于一个开发板,在我们手中,我们要将其发挥的淋漓尽致,我们不能停留在裸机开发的层次,为了世界的和平,我们需要从驱动层去充分利用我们的开发板,在我们掌握了基本外设的底层原理之后,进行Linux开发的时候就只需要将精力...
2021-06-15 15:15:47
732
原创 嵌入式Linux C代码规范和风格
嵌入式Linux C代码规范和风格本文档为作者在嵌入式和嵌入式 linux C 语言的学习和工作中所总结的代码规范,是作者从 STM32 单片机开发向 Linux C 开发的时候为了摆脱遗留的编码规范陋习而编写的。因此,本文档主要面向 Linux C,会根据实际情况兼容单片机的开发。文档主要以 Linux 源码下的 CodingStyle 文档为蓝本而编写,本文档主要是为了解决作者的实际需求,并不能照顾到所有的开发人员,因此编码规范可能不适合某些程序员朋友。参考:1 、Linux 源码下的《 《C
2021-06-11 14:26:35
1022
3
原创 Linux常用命令8:Linux文件内容操作---cat命令详解
Linux常用命令8:Linux文件内容操作—cat命令详解说明:cat,是单词 concatenate 的缩写, 把文件的内容输出到stdout.当与重定向操作符 (> 或着>>结合使用时, 一般都是用来将多个文件连接起来.用法:$cat file1 file2 file3不仅可以从文件中读取内容并且拼接,还能从标准输入流中读取例如:$echo ‘some content’ | cat - file.txt解释:这里的 - 就代表了 ‘some content’ 的
2021-06-02 16:11:11
526
转载 Linux常用命令7:Linux shell if [ -n ] 正确使用方法
Linux常用命令7:Linux shell if [ -n ] 正确使用方法if [ str1 = str2 ] 当两个串有相同内容、长度时为真 if [ str1 != str2 ] 当串str1和str2不等时为真 if [ -n str1 ] 当串的长度大于0时为真(串非空) if [ -z str1 ] 当串的长度为0时为真(空串) if [ str1 ] 当串str1为非空时为真shell 中利用 -n 来判定字符串非
2021-06-02 15:42:51
2156
转载 Linux常用命令6:Linux文件测试操作
Linux常用命令6:Linux文件测试操作1.文件测试操作:返回 true 如果...-e 文件存在-a 文件存在这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用-f file 是一个 regular 文件(不是目录或者设备文件)-s 文件长度不为 0-d 文件是个目录-r 文件具有读权限(对于用户运行这个 test)-w 文件具有写权限(对于用户运行这个 test)-x 文件具有执行权限(对于用户运行这个 test)2.整数比较:-eq 等于,如:if
2021-06-02 15:37:16
748
原创 工具之外,如何高效的阅读代码?
工具之外,如何高效的阅读代码?阅读软件源代码是每个开发者的必由之路,尤其是内核开发者。因为内核开发在很大程度上并不是重新发明轮子,而是深入理解并尽量复用现有的内核设计框架,然后参照相似的功能模块去添加或改写某项需要的功能。在对内核整体框架以及某些子系统融会贯通以后,才有可能站在巨人的肩膀上去改进框架本身,实现自主创新。就我的个人经验来说,阅读代码与编写代码的时间大概是6 : 4。自由软件的开发与商业软件相比,有一个很大的不同就是文档相对比较缺乏。但同时有一种说法叫做“代码就是最好的文档”——只要你愿意,
2021-06-01 16:10:36
320
原创 树莓派开始,玩转Linux30:树莓派网络诊断
树莓派开始,玩转Linux30:树莓派网络诊断通过对网络协议的介绍,我们已经了解了互联网通信的基本原理。互联网让树莓派变得更加强大。但这也意味着,网络问题会让人非常恼火。下面介绍树莓派常用的网络诊断命令,它们能帮助我们发现网络问题。1.基础工具:网络诊断的第一步是了解自己的设备,比如有哪些接口,IP地址都是什么。使用下面的命令来显示网络接口(Interface)信息,如接口名称、接口类型、接口的IP地址、硬件的MAC地址等。ARP协议用在局域网内部。借用ARP协议设备可以知道同一局域网内的IP-M
2021-05-26 14:24:14
673
1
原创 树莓派开始,玩转Linux29:遍阅网络协议
树莓派开始,玩转Linux29:遍阅网络协议前面的章节专注于计算机的内部,从这一章起转向计算机的外部,即网络功能。互联网的诞生晚于计算机,但它的发展极为迅速。通信协议模块,已经成为计算机操作系统密不可分的一部分。本章介绍网络协议的基础知识。1.通信与互联网协议:通信是一件奇妙的事情,它让信息在不同的个体间传递。动物散发着特殊的气味,传递着求偶信息。人则说着甜言蜜语,向情人表达爱意。猎人吹着口哨,悄悄地围拢猎物。服务生则大声向后厨吆喝,要加两份炸鸡和啤酒。红绿灯指挥着交通,电视上播放着广告,法老的金字塔
2021-05-26 14:04:57
420
4
原创 树莓派开始,玩转Linux28:分级存储
树莓派开始,玩转Linux28:分级存储树莓派上的三种电子元件都有存储数据的功能:CPU缓存、内存和SD卡储存,如表所示。三种元件的速度和容量各不相同。存储元件的容量和速度是个矛盾。为了兼顾性能和成本,计算机大多采取分级存储的形式,从而让不同速度的存储元件协同工作。分级存储的设计,兼顾了读取速度、存储容量和计算机的稳定性。树莓派3B型的各项储存器指标:1.CPU缓存:计算机把最快的存储元件用在最繁忙的地方。CPU是树莓派执行程序的核心,我们编写的程序和需要处理的各种数据都要加载到CPU中才能执行。
2021-05-26 13:41:47
607
原创 树莓派开始,玩转Linux27:鸟瞰文件树
树莓派开始,玩转Linux27:鸟瞰文件树在本章自下而上地介绍了外部存储器的底层细节。本章将自上而下,鸟瞰完整的Linux文件树。直接从属于根目录/的文件和目录都是系统必备的关键内容。我们来看它们的功能。1./boot和树莓派启动:/boot下挂载了FAT32格式的启动分区,里面的文件用于树莓派的开机启动。计算机启动是一个神秘而有趣的过程,先来看计算机常见的启动方式。当我们打开一台普通计算机的电源时,计算机一般会自动从主板的BIOS上读取其中所存储的程序。BIOS知道直接连接在主板上的硬件。它从默认
2021-05-26 13:10:55
308
原创 系统移植篇01:U-boot使用实验的准备
系统移植篇01:U-boot使用实验的准备在移植U-Boot之前,我们肯定要先使用一下U-Boot,得先体验一下U-Boot是个什么东西。I.MX6U-ALPHA 开发板资料里面已经提供了一个已经移植好的 U-Boot,本章我们就直接编译这个移植好的 U-Boot,然后烧写到 SD 卡里面启动,启动 U-Boot 以后就可以学习使用 U-Boot 的命令。1.U-boot简介:Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader程序。
2021-05-24 17:18:30
455
2
原创 系统移植篇00:系统移植简介
系统移植篇00:系统移植简介在上一篇中我们学习了如何进行 I.MX6U 的裸机开发,通过 21 个裸机例程我们掌握了I.MX6U 的常用外设。通过裸机的学习我们掌握了外设的底层原理,这样在以后进行 Linux 驱动开发的时候就只需要将精力放到 Linux 驱动框架上,在进行 Linux 驱动开发之前肯定需要先将Linux 系统移植到开发板上去。如果学习过 UCOS/FreeRTOS 应该知道,UCOS/FreeRTOS 移植就是在官方的 SDK 包里面找一个和自己所使用的芯片一样的工程编译一下,然后
2021-05-24 17:03:07
390
原创 树莓派开始,玩转Linux26:仓库大管家
树莓派开始,玩转Linux26:仓库大管家在前面的章节中,我们已经用到了Linux的文件系统。通过文件系统,可以找到文件、新建文件、删除文件、读写文件。这些高层抽象的用户操作,完全可以满足日常需求。但对于Linux程序员和资深用户来说,只有知道了外部存储器的组织方式,才能深入Linux系统编程。1.外部存储设备:文件系统的终极目标是把大量数据有组织地放入外部存储设备中,比如树莓派的SD卡上。以SD卡作为外部存储器的计算机并不常见。在非树莓派的PC上,更常见的外部存储器是磁盘。外部存储设备的容量一般也比
2021-05-24 16:30:20
341
3
转载 计算机网络从0-1(总结篇)
计算机网络从0-1(总结篇)在这篇文章中,我就是一台电脑,我的名字叫:哒宰在盘古开天辟地之前,我不与其他任何电脑相连,孤苦伶仃。哒宰
2021-05-23 23:44:02
661
1
原创 树莓派开始,玩转Linux25:内存的一页故事
树莓派开始,玩转Linux25:内存的一页故事在讨论进程时,不免要提到内存。内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。本章从内存的物理特性出发,深入内存管理的细节,着重介绍了虚拟内存和内存分页的概念。1.内存:简单地说,内存就是一个数据货架。内存有一个最小的存储单位,大多数都是一个字节。内存用内存地址(Memory Address)来为每个字节的数据顺序编号。因此,内存地址说明了数据在内存中的位置。内存地址从0开始,每次增加1。这种线性增加的存储器地址称为线性地址(Lin
2021-05-20 11:53:00
300
原创 树莓派开始,玩转Linux24:进程调度
树莓派开始,玩转Linux24:进程调度进程是一个虚拟出来的概念,用来组织计算机中的任务。但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失。不过,进程的生命都得到了操作系统内核的关照。就好像疲于照顾几个孩子的母亲,内核必须做出决定,如何在进程间分配有限的计算资源,最终让用户获得最佳的使用体验。内核中安排进程执行的模块称为调度器(Scheduler)。本章将介绍调度器的工作方式。1.进程状态:调度器可以切换进程状态(Process State)。一个Li
2021-05-13 16:36:05
515
2
原创 树莓派开始,玩转Linux23:多任务与同步
树莓派开始,玩转Linux23:多任务与同步上一章提到了IPC,实际上它涉及一个关键问题:计算机的并发性。Linux系统是一个支持并发(Concunrrency)的操作系统。并发系统可以同时执行多个任务。多个进程通过IPC的数据沟通,可以合作完成一个复杂任务。然而,并发系统并不简单,必须解决同步的问题。1.并发与分时:在过去很长时间里,计算机使用的都是单核CPU。每个时刻,单核的CPU只能执行一条指令。从指令的角度看,单核CPU计算机不能并发。但单核CPU计算机可以同时运行多个任务。这种并发是通过
2021-05-13 15:53:47
1177
原创 树莓派开始,玩转Linux22:进程间的悄悄话
树莓派开始,玩转Linux22:进程间的悄悄话有了进程空间的概念,我们可以看到进程的独立性。每个进程的数据停留在自己的进程空间里,互不干涉。这样的独立性,让每个进程可以专注于自己的任务,大大减少了进程间相互干扰而出错的可能性。然而,有的时候,我们又需要打破这种独立性,让进程之间分享数据,从而协调工作。这个时候,就需要进行进程间通信(IPC,Inter-processCommunication)。1.管道:从广义上说,任何能在进程间传送信息的方式都属于IPC。我们先来回顾一些已经接触过的IPC的方式。一
2021-05-13 15:00:50
306
原创 树莓派开始,玩转Linux21:进程的生与死
树莓派开始,玩转Linux21:进程的生与死操作系统把计算机活动划分成进程。程序员编写的程序,也必须运行成进程,才能出现实际效果。既然进程在计算机活动中拥有如此关键的地位,那么我们理应更深入地了解进程。本章将介绍进程的创建和终结,以及与之相关的进程权限。1.从init到进程树:计算机开机时,Linux内核只创建了一个名为init的进程。在Linux运行期间,会有很多其他新进程,如Shell进程、音乐播放程序进程、邮件程序进程等。Linux内核不直接创建其他新进程,除了init进程之外的所有进程,都是通
2021-05-13 12:01:14
407
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人