登录社区云,与社区用户共同成长
邀请您加入社区
判断参数expr是否为真,为真执行语句(void)0,为假就执行后面的函数assert_failed((uint8_t *)__FILE__,__LINE__),函数的作用在库函数中有解释,用来指示出错的行数和文件。2、#define为预处理指令,在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”,因此可以指出出错的行数与文件。在程序的运行上牺牲了
RT-Thread与ROS通信实践:基于rosserial的串口通信实现 本文分享了使用RT-Thread的rosserial软件包实现STM32与ROS通信的完整过程。在ROS端需安装rosserial相关组件,RT-Thread端建议使用4.1.1版本,并详细说明了软件包配置要点。通过创建cpp文件实现了ROS话题的发布与订阅功能,包括发布"chatter"话题和接收&qu
iw 命令:有个印象就好
PX4 | 无人机关闭磁力计罗盘飞行
Motorola S-record文件是一种存储二进制数据的ASCII文件格式,也称作srec,s19,mot文件格式。由2个字符代表1个字节。
摘要:本文系统介绍了单片机的基本原理、组成结构及开发流程,重点对比了单片机与嵌入式Linux的差异。单片机作为集成CPU、存储器和外设的微型计算机系统,具有低成本、低功耗特点,广泛应用于家电控制、工业仪表等领域。文章详细解析了CPU、存储器、I/O接口等核心模块功能,列举了51系列、AVR、STM32等常见单片机类型。同时,阐述了嵌入式Linux系统在复杂应用场景的优势,并提供了从单片机开发过渡到
本文总结了Linux平台总线驱动与设备树开发的关键知识点。主要内容包括:1)平台总线(platform bus)的作用是将硬件数据与通用操作分离,实现驱动复用;2)核心结构体如platform_driver、platform_device的组成与注册方法;3)三种驱动开发方式(传统、平台总线、设备树)的对比;4)常见开发陷阱如时钟未开启、compatible不匹配等。通过设备树描述硬件资源,结合平
互斥锁管 “资源安全”,条件变量管 “线程同步”,二者职责不同,缺一不可;条件变量不能单独使用,必须与互斥锁配合,否则会出现信号丢失、条件竞争等问题;避免用互斥锁 + 忙等代替条件变量,否则会浪费 CPU 资源,降低程序效率。其实条件变量和互斥锁的搭配,本质是 “分工合作”—— 互斥锁保证 “操作安全”,条件变量保证 “执行高效”,二者结合,才能写出既安全又高效的多线程代码。
根因开启校验必须设 9 位数据位(8 位数据 + 1 位校验位)解决方案:配置函数中自动将数据位 + 1,强制切换 9 位模式架构:RK3568 + GD32F303 单 USB 实现双路虚拟串口,方案稳定通用GD32F303 硬件:开启奇偶校验 → 数据位必须设为 9 位核心 BUG 修复:USB 重配置串口参数后,必须重启接收中断Linux 适配:双 CDC 自动生成双 ttyACM 节点,两
管道是 Linux 最经典的进程间通信 IPC无名管道(匿名管道 pipe)有名管道(命名管道 FIFO)很多初学者分不清:什么时候用无名管道?什么时候用有名管道?区别在哪、怎么用、适用场景是什么?这篇一次性讲透,带原理 + 特点 + 代码实战。无名管道是Linux 内核开辟的一块内存缓冲区,没有实体文件、没有文件名,只存在于内存中。有名管道也叫FIFO,是存在于磁盘上的特殊文件,类型标识为p。有
摘要:volatile关键字在嵌入式开发中至关重要,用于确保编译器不优化对硬件寄存器和共享变量的访问。硬件寄存器的值可能被外部事件随时改变,若无volatile,编译器可能缓存读取结果,导致程序无法感知实时状态。典型应用场景包括内存映射寄存器、中断共享变量及多核并行访问。但需注意,volatile不保证原子性或操作顺序,需结合关中断或内存屏障。开发时应避免滥用,仅用于必要场景,同时区分其与锁/原子