单片机基础核心知识点汇总(五) 📅 2026/8/17 22:29:00 目录前言一、裸机开发与 RTOS 开发对比二、RTOS 核心概念1. 任务线程2. 时间片轮转3. 任务栈三、任务间同步与通信组件四、RTOS 常见易错理论点五、RTOS 适用场景与不适用场景六、RTOS 开发思路前言前面四篇我们完成单片机裸机开发全部核心内容硬件基础、片上外设、中断进阶、调试排错。裸机适合逻辑简单项目当业务变多同时处理按键、屏幕、传感器、通信等任务裸机while(1)会出现时序卡顿、逻辑混乱这时候就需要 RTOS 实时操作系统。本篇讲解 RTOS 核心基础理论不涉及具体代码搞懂概念再上手移植。一、裸机开发与 RTOS 开发对比裸机开发 程序跑在一个大 while 循环里面顺序轮询执行各个业务。中断用来处理紧急事件。 优点简单、资源占用极小逻辑清晰适合小型项目。 缺点任务多之后耦合严重一个业务延时所有任务都会被拖慢很难保证实时响应。RTOS 实时操作系统 把程序拆分成多个独立任务操作系统内核做任务调度宏观上多个任务 “同时运行”。 优点业务解耦每个任务只负责一件事高优先级任务可以抢占 CPU保障实时性方便维护大型项目。 缺点占用 RAM、Flash 资源需要理解调度、同步机制学习成本更高。注意RTOS 不是 Linux单片机 RTOS 属于小型实时内核没有完整文件系统、图形界面。主流FreeRTOS、RT‑Thread。二、RTOS 核心概念1. 任务线程任务就是独立的执行单元每个任务拥有自己的栈空间。 每个任务拥有状态运行态当前正在占用 CPU 执行就绪态条件满足等待 CPU 调度阻塞态任务等待延时、信号量主动让出 CPU不占用运算资源挂起态任务暂停等待其他任务恢复任务优先级数字大小代表优先级高优先级任务可以抢占低优先级任务 CPU 使用权。高优先级任务就绪内核立刻剥夺低优先级任务 CPU优先执行高优先级。2. 时间片轮转多个相同优先级任务内核分配时间片轮流执行实现宏观并行。3. 任务栈每个任务独立栈保存局部变量、寄存器上下文。栈设置过小会栈溢出系统直接死机跑飞设置过大浪费 RAM 内存。单片机 RAM 有限栈大小是调试高频踩坑点。三、任务间同步与通信组件信号量 二值信号量常用于中断和任务之间传递事件标记中断只释放信号量任务里面等待信号量处理业务避免中断写复杂业务。 计数信号量资源计数统计可用资源数量。互斥锁 用于多个任务访问同一个共享硬件 / 全局变量防止多个任务同时操作资源引发数据错乱。解决资源竞争问题。 注意互斥锁有优先级继承机制缓解优先级反转问题。消息队列 任务和任务、中断和任务之间传递数据缓冲区。可以存放多组数据FIFO 先进先出。适合串口、传感器把数据投递给处理任务。事件组 按位标记多个事件一个任务可以等待多个不同事件触发。四、RTOS 常见易错理论点中断限制 RTOS 的 API 函数不能全部在中断里面随便调用只有带 FromISR 后缀版本才允许中断内调用。普通任务 API 放到中断会直接系统崩溃。优先级反转 低优先级任务拿到互斥锁高优先级任务等待锁此时一个中优先级任务持续运行高优先级任务得不到执行。RTOS 内核提供优先级继承缓解该问题。不要在任务里面使用裸机延时 裸机HAL_Delay()是阻塞 CPU 延时RTOS 要使用内核自带延时函数任务进入阻塞状态让出 CPU 给其他任务CPU 利用率提升。栈溢出 现象系统随机死机没有固定复现条件。排查手段开启栈水位统计查看任务剩余栈空间。五、RTOS 适用场景与不适用场景✅适合使用 RTOS需要同时处理多路业务屏幕刷新、按键检测、传感器采集、多路通信需要严格实时响应部分事件必须快速处理项目功能多希望业务解耦方便后续迭代维护❌不建议使用 RTOS简单点灯、单逻辑小项目资源紧张的极小单片机追求极致代码效率RAM 资源极度受限六、RTOS 开发思路业务拆分把不同功能拆成独立任务一个任务尽量只做一类事情。划分优先级紧急响应任务设置高优先级周期性显示、日志任务设置低优先级。资源隔离共享资源使用队列、互斥锁做保护减少全局变量直接访问。中断轻量化中断只做标记数据投递业务逻辑交给普通任务处理。