外观
专栏简介
约 1693 字大约 6 分钟
2026-11-10
大家好,我是李述铜。这个专栏用来解答嵌入式操作系统学习和开发中最常见的 100 个问题。
专栏简介
嵌入式操作系统(RTOS)是嵌入式开发的核心技能,但很多初学者在学习和使用过程中会遇到各种各样的疑问——
- 任务和函数到底有什么区别?
- 优先级高的任务一定先执行吗?
- 中断里为什么不能随便调阻塞接口?
- 消息队列和邮箱到底怎么选?
- 栈溢出是怎么发生的,怎么排查?
本专栏从实际开发场景出发,用通俗易懂的语言 + 代码示例,逐一解答这些高频问题。每篇文章聚焦一个问题,讲清楚原理和实战要点。
专栏大纲
一、基础概念
- 什么是嵌入式操作系统
- 你的项目真的需要RTOS吗
- RTOS中的实时到底是什么意思
- RTOS和裸机程序最大的区别是什么
- 裸机程序用状态机能代替RTOS吗
- 学习RTOS需要哪些前置知识
- 如何深入理解RTOS
- 为什么要学着手写一个RTOS
- 一个RTOS内核通常由哪些部分组成
二、任务管理
- 什么是任务
- 任务函数和普通C函数有什么区别
- 任务必须是无限循环吗
- 任务从创建到运行会经历哪些状态
- 什么是任务控制块
- 任务优先级究竟控制什么
- 一个任务函数可以被多个任务共用吗
- 什么是任务安全函数
- 任务删除时需要注意什么
- 任务数量是不是越多越好
- 创建任务时内核需要做哪些事情
- 任务参数为什么不能传局部变量地址
- 静态创建和动态创建任务的区别
- 为什么RT-Thread把任务叫做线程
- 任务挂起与阻塞有什么区别
- 为什么每个任务都需要自己的栈
- 任务的栈应当设置成多大
- 可以动态修改任务栈大小吗
- 任务栈溢出后为什么程序会跑飞
- 为什么局部大数组容易导致栈溢出
- 创建任务时栈里放了什么
- 中断栈和任务栈为什么要分离
三、内存管理
四、调度与上下文切换
- 什么情况下RTOS会立即切换任务
- 什么是抢占式调度
- 什么是时间片轮转调度
- 什么是优先级反转
- 优先级继承为什么能缓解优先级反转
- 两个任务互相等待会发生什么
- 任务被唤醒后为什么不一定立即运行
- 什么是优先级位图算法
- 什么是任务饿死,如何避免
- rt_thread_yield函数的工作原理
- 多个任务等同一个信号量谁先被唤醒
- 什么是上下文切换
- 一个任务的上下文包含哪些内容
- Cortex-M如何配合完成任务切换
- 单核CPU为什么能让任务同时运行
- 系统节拍设为1000ms会发生什么
- 任务延时时CPU在干什么
- 为什么RTOS中的延时不一定精确
- 如何实现更精确的延时
五、定时器与时间管理
六、同步与通信
- 什么是信号量
- 什么是二值信号量
- 什么是互斥锁
- 互斥锁和二值信号量的区别
- 什么是消息队列
- 什么是事件标志组
- 事件标志组和信号量的区别
- 多任务访问串口/全局变量如何保护
- 生产数据和处理数据的任务如何通信
- 任务间传递大块消息怎么完成
- 多个任务如何共享同一份数据
- 计数信号量如何管理多个资源
- 如何避免生产者速度超过消费者
- 如何实现任务间的双向通信
- 如何实现一个任务向多个任务广播
- 什么是消息队列的紧急消息
- 邮箱可以传递哪些类型的数据
- 邮箱和消息队列什么时候用哪个
- 如何实现请求响应模式的通信
- 怎样把ISR中的事交给任务完成
七、中断与临界区
八、内核机制与移植
关于本文内容,有任何疑问或独到见解,都非常欢迎在评论区与我交流。
李述铜,嵌入式系统与底层架构领域讲师,专注于操作系统、CPU 架构的教学与研究。出版作品《从0手写x86计算机操作系统》。主讲课程包括:《从0手写嵌入式操作系统》《从0手写TCP/IP协议栈》等。
欢迎扫码关注我的微信公众号,及时获取更多文章!

