ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

单片机基础核心知识点汇总(十四)

单片机基础核心知识点汇总(十四) 目录前言一、裸机与 RTOS 真正的区别面试必答二、RTOS 五大核心对象1. 任务 Task2. 队列 Queue最常用3. 信号量 Semaphore4. 互斥锁 Mutex5. 事件组 EventGroup三、任务优先级设计黄金法则四、任务栈溢出五、多任务数据冲突与互斥原理六、队列深度设计与丢包解决七、信号量与队列使用场景区分八、RTOS 致命死锁问题九、中断与 RTOS 协同重中之重十、RTOS 系统卡顿终极排查思路十一、优先级倒置问题高阶面试考点前言前面十三篇覆盖了基础外设、中断、架构、算法、CAN、物联网、存储、OTA、抗干扰量产。 绝大多数同学学到这里只会简单创建 RTOS 任务但一上真实项目就崩任务卡死、莫名其妙死机全局变量多任务乱串数据中断和任务冲突优先级抢占导致系统卡顿队列丢数据、信号量死锁会跑 RTOS Demo ≠ 会用 RTOS 做产品第十四篇专门攻克FreeRTOS/RT-Thread 高阶实战、任务调度原理、同步通信、资源互斥、死锁避坑是嵌入式面试最高频、项目最容易翻车的终极难点。一、裸机与 RTOS 真正的区别面试必答裸机顺序执行、靠时间戳轮询、无优先级复杂任务一多就卡顿RTOS抢占式调度、优先级驱动、任务独立、实时响应核心精髓高优先级任务可以随时抢占低优先级任务这就是实时性的来源也是 90% BUG 的来源。二、RTOS 五大核心对象1. 任务 Task最小执行单元每个任务独立栈空间独立 while (1) 循环。任务必须阻塞死循环不阻塞 系统卡死2. 队列 Queue最常用任务与任务、中断与任务数据传递专用优点数据拷贝、线程安全、不冲突所有串口、传感器、上报数据必须用队列转发3. 信号量 Semaphore用于事件同步、资源通知比如中断接收完数据 → 释放信号量 → 任务解析数据4. 互斥锁 Mutex解决多任务抢夺同一硬件资源例如屏幕、串口打印、SPI 设备多任务调用5. 事件组 EventGroup多事件标志管理适合多条件触发、多设备就绪联动三、任务优先级设计黄金法则从高到低排序直接背这套架构紧急响应任务最高 按键、报警、故障检测、紧急停机数据通信任务 CAN、串口、MQTT 数据解析传感器采集任务 ADC、温湿度、压力采集界面显示任务 屏幕刷新低优先级后台日志、心跳任务最低原则高频快任务优先级高慢速刷新任务优先级低错误设计屏幕任务最高 → 系统整体卡顿四、任务栈溢出现象随机死机、HardFault、数组乱变、程序跑飞原因任务栈开太小任务内局部变量过多递归调用、函数嵌套太深中断栈消耗过大解决方案所有大数组全局 / 静态禁止放任务栈内开启栈监控高优先级任务适当加大栈深五、多任务数据冲突与互斥原理错误写法 两个任务同时读写同一个全局变量数据错乱、偶尔异常。正确产品级写法简单变量关中断保护硬件资源、复杂数据互斥锁保护互斥锁核心逻辑谁抢到谁执行没抢到阻塞等待绝不冲突六、队列深度设计与丢包解决队列不是越大越好队列太小高速数据丢包队列太大内存占用高、延时堆积实战标准 串口、传感器队列深度 16~64 高频上报队列深度 8~32队列核心原则快进快出及时解析七、信号量与队列使用场景区分队列传数据数据流转信号量传状态事件通知新手误区全部用队列浪费内存、代码臃肿。八、RTOS 致命死锁问题死锁产生四条件资源独占持有等待不可剥夺循环等待最常见场景任务 A 拿锁 1 等锁 2任务 B 拿锁 2 等锁 1 → 系统彻底卡死解决方法统一锁获取顺序加超时释放机制禁止多层嵌套加锁九、中断与 RTOS 协同重中之重中断中只能调用 FromISR 接口中断代码必须极短只做标记、入队、释放信号量禁止中断里延时、打印、复杂运算禁止中断里抢占 RTOS 调度逻辑十、RTOS 系统卡顿终极排查思路检查是否有任务裸跑不阻塞检查栈溢出检查优先级倒置检查死锁、锁不释放检查队列堆积不处理检查中断耗时过长十一、优先级倒置问题高阶面试考点低优先级任务拿锁高优先级任务卡死等待 导致系统实时性失效解决优先级继承机制互斥锁专属
返回列表