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

目录

前言

[一、裸机开发与 RTOS 开发对比](#一、裸机开发与 RTOS 开发对比)

[二、RTOS 核心概念](#二、RTOS 核心概念)

[1. 任务(线程)](#1. 任务(线程))

[2. 时间片轮转](#2. 时间片轮转)

[3. 任务栈](#3. 任务栈)

三、任务间同步与通信组件

[四、RTOS 常见易错理论点](#四、RTOS 常见易错理论点)

[五、RTOS 适用场景与不适用场景](#五、RTOS 适用场景与不适用场景)

[六、RTOS 开发思路](#六、RTOS 开发思路)


前言

前面四篇我们完成单片机裸机开发全部核心内容:硬件基础、片上外设、中断进阶、调试排错。裸机适合逻辑简单项目,当业务变多,同时处理按键、屏幕、传感器、通信等任务,裸机while(1)会出现时序卡顿、逻辑混乱,这时候就需要 RTOS 实时操作系统。

本篇讲解 RTOS 核心基础理论,不涉及具体代码,搞懂概念再上手移植。

一、裸机开发与 RTOS 开发对比

  1. 裸机开发 程序跑在一个大 while 循环里面,顺序轮询执行各个业务。中断用来处理紧急事件。 优点:简单、资源占用极小,逻辑清晰,适合小型项目。 缺点:任务多之后耦合严重;一个业务延时,所有任务都会被拖慢;很难保证实时响应。

  2. RTOS 实时操作系统 把程序拆分成多个独立任务,操作系统内核做任务调度,宏观上多个任务 "同时运行"。 优点:业务解耦,每个任务只负责一件事;高优先级任务可以抢占 CPU,保障实时性;方便维护大型项目。 缺点:占用 RAM、Flash 资源;需要理解调度、同步机制,学习成本更高。

注意:RTOS 不是 Linux,单片机 RTOS 属于小型实时内核,没有完整文件系统、图形界面。主流:FreeRTOS、RT‑Thread。

二、RTOS 核心概念

1. 任务(线程)

任务就是独立的执行单元,每个任务拥有自己的栈空间。 每个任务拥有状态:

  • 运行态:当前正在占用 CPU 执行
  • 就绪态:条件满足,等待 CPU 调度
  • 阻塞态:任务等待延时、信号量,主动让出 CPU,不占用运算资源
  • 挂起态:任务暂停,等待其他任务恢复

任务优先级:数字大小代表优先级,高优先级任务可以抢占低优先级任务 CPU 使用权。高优先级任务就绪,内核立刻剥夺低优先级任务 CPU,优先执行高优先级。

2. 时间片轮转

多个相同优先级任务,内核分配时间片,轮流执行,实现宏观并行。

3. 任务栈

每个任务独立栈,保存局部变量、寄存器上下文。栈设置过小会栈溢出,系统直接死机跑飞;设置过大浪费 RAM 内存。单片机 RAM 有限,栈大小是调试高频踩坑点。

三、任务间同步与通信组件

  1. 信号量 二值信号量:常用于中断和任务之间传递事件标记,中断只释放信号量,任务里面等待信号量处理业务,避免中断写复杂业务。 计数信号量:资源计数,统计可用资源数量。

  2. 互斥锁 用于多个任务访问同一个共享硬件 / 全局变量,防止多个任务同时操作资源引发数据错乱。解决资源竞争问题。 注意:互斥锁有优先级继承机制,缓解优先级反转问题。

  3. 消息队列 任务和任务、中断和任务之间传递数据缓冲区。可以存放多组数据,FIFO 先进先出。适合串口、传感器把数据投递给处理任务。

  4. 事件组 按位标记多个事件,一个任务可以等待多个不同事件触发。

四、RTOS 常见易错理论点

  1. 中断限制 RTOS 的 API 函数不能全部在中断里面随便调用,只有带 FromISR 后缀版本才允许中断内调用。普通任务 API 放到中断会直接系统崩溃。

  2. 优先级反转 低优先级任务拿到互斥锁,高优先级任务等待锁;此时一个中优先级任务持续运行,高优先级任务得不到执行。RTOS 内核提供优先级继承缓解该问题。

  3. 不要在任务里面使用裸机延时 裸机HAL_Delay()是阻塞 CPU 延时,RTOS 要使用内核自带延时函数,任务进入阻塞状态,让出 CPU 给其他任务,CPU 利用率提升。

  4. 栈溢出 现象:系统随机死机,没有固定复现条件。排查手段:开启栈水位统计,查看任务剩余栈空间。

五、RTOS 适用场景与不适用场景

✅适合使用 RTOS:

  • 需要同时处理多路业务:屏幕刷新、按键检测、传感器采集、多路通信
  • 需要严格实时响应,部分事件必须快速处理
  • 项目功能多,希望业务解耦,方便后续迭代维护

❌不建议使用 RTOS:

  • 简单点灯、单逻辑小项目,资源紧张的极小单片机
  • 追求极致代码效率,RAM 资源极度受限

六、RTOS 开发思路

  1. 业务拆分:把不同功能拆成独立任务,一个任务尽量只做一类事情。
  2. 划分优先级:紧急响应任务设置高优先级;周期性显示、日志任务设置低优先级。
  3. 资源隔离:共享资源使用队列、互斥锁做保护,减少全局变量直接访问。
  4. 中断轻量化:中断只做标记,数据投递,业务逻辑交给普通任务处理。
相关推荐
恒锐丰-罗生6 小时前
SS8103 芯片解析:45V 同步整流降压半桥恒流驱动控制器 大功率光源国产优选 告别低灰闪烁!
驱动开发·嵌入式硬件·硬件工程
FakeOccupational7 小时前
【电路笔记 STM32】stm32f103 实现HAL_UART_Transmit_DMA + 普通模式/连续模式的 UART DMA 收发
笔记·stm32·嵌入式硬件
wuyk5557 小时前
第 6 章 FOC 完整系统整合:从算法到真机跑起来
c语言·开发语言·stm32·单片机·嵌入式硬件
恒锐丰科技韩生8 小时前
率能 SS6810H|10‑32V 双通道 H 桥步进电机驱动 ETSSOP20 打印机安防舞台灯光专用
嵌入式硬件·硬件工程
156082072198 小时前
直流耦合采集卡前端电路调试
嵌入式硬件·fpga开发
恒锐丰科技林技术员9 小时前
SS6841T 双通道 H 桥驱动芯片:大电流集成电机驱动优选方案
单片机·嵌入式硬件
打工陈9 小时前
器件知识——(1)磁珠与电感
嵌入式硬件·智能硬件·设计规范
LCG元9 小时前
STM32 HAL 库串口 DMA + 空闲中断接收不定长数据:从原理到排查“上电误进 IDLE“
stm32·单片机·嵌入式硬件
乘凉~11 小时前
【Keil5】Keil5 安装和免费使用过程记录
stm32·单片机·嵌入式硬件