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

目录

前言

[一、裸机开发与 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. 中断轻量化:中断只做标记,数据投递,业务逻辑交给普通任务处理。
相关推荐
Zwawa20 小时前
用两个按键做一个OLED菜单:先把选择和执行分开
c语言·单片机·嵌入式
Dev_XH1 天前
【成品设计】基于CH32H417的CH32H417AIOT家庭微电网
单片机·嵌入式硬件·物联网·ai
国科安芯1 天前
人在回路中的总线:商业空间站环境控制与生命保障系统CANFD网络的可靠性与功能安全
网络·嵌入式硬件·安全·架构·php·抗辐射
国科安芯1 天前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天
t13970181 天前
MPPT 和 PWM 有什么区别?小功率太阳能供电到底该选哪个
嵌入式硬件·物联网
en.en..1 天前
STM32入门最佳学习顺序(寄存器→标准库→HAL库)
单片机·嵌入式硬件
Good白10191 天前
嵌入式:1.嵌入式入门|初识嵌入式、处理器、ARM与STM32
arm开发·stm32·嵌入式硬件
二本咕咕-机械转码1 天前
FreeRTOS深入解析(八)IPC机制之FromISR详解
数据结构·单片机·链表
小李不想当小白1 天前
HAL库之UART(STM32 HAL库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
Dev_XH1 天前
【成品设计】基于物联网的旅游生态农业互动系统
stm32·单片机·嵌入式硬件·物联网·旅游