嵌软八股大全11 - FreeRTOS 相关问题汇总

1、什么是 FreeRTOS?

FreeRTOS 是轻量级的实时操作系统,广泛应用于嵌入式系统中

2、RTOS 最重要最核心的东西是什么?

  1. 实时性
  2. 确定性

3、任务调度?

根据 configUSE_PREEMPTIONconfigUSE_TIME_SLICING 两个宏定义决定了 FreeRTOS 有 3 种不同的任务调度策略

  1. 协作式调度
  2. 不使用时间片轮询的抢占式调度
  3. 时间片轮询的抢占式调度(最常用的方法)

对于使用时间片轮询的抢占式调度方法,FreeRTOS 的调度器将始终保持系统中就绪态的最高优先级任务得到执行(也即高优先级的任务可以抢占低优先级的任务得到执行),如果多个任务优先级一致,还会通过时间片在优先级一致的多个任务中轮流执行

以上为关于任务调度基本的理论知识,下面我简单介绍下 FreeRTOS 任务调度的底层原理,主要有这样几个问题:

  1. 什么时候切换任务?
  2. 怎么切换任务?

关于第一个问题:对于基于时间片轮询的抢占式调度,当出现以下几种情况时会产生任务的切换

  1. 任务的状态发生变化,比如任务调用阻塞延时函数、延时函数到期、任务结束或退出、任务创建和删除等
  2. 更高优先级任务就绪(抢占优先级)
  3. FreeRTOS 心跳,心跳中一般对阻塞延时计数,对同等优先级的任务时间片轮询

关于第二个问题:对于工作在 Cortex-M4 内核上的 FreeRTOS 来说,任务切换是在可挂起中断服务函数 PendSV 中执行的,这个函数一般在整个NVIC中抢占优先级设置为最低,防止影响到其他高优先级中断的处理,这个函数由汇编编写,主要做了这样几个工作:

  1. 保存当前执行任务的上下文
  2. 跳转到调度函数中寻找下一个要执行的任务
  3. 恢复新任务的上下文
  4. 从中断异常退出

alt

4、内存管理?

对于 FreeRTOS 的内存管理,其提供了 5 种动态内存分配的机制,包括 heap_1 ~ heap_5,每一种都有其自己的特点和使用场景,但具体我不清楚,一般我直接使用 heap_4

5、中断管理?

在 FreeRTOS 支持中断优先级的管理,在部分中断函数中还可以调用中断安全版本的 API 函数,但是不是NVIC 中所有的中断都能够被 FreeRTOS 管理

FreeRTOS 能管理的中断是依靠 中断的最低优先级数值(LOWEST_INTERRUPT_PRIORITY) 和 可管理的最高优先级(MAX_SYSCALL_INTERRUPT_PRIORITY) 两个宏决定的,对于 4 位抢占优先级的 NVIC 来说,最低优先级为 15 ,如果设置可管理的最高优先级为 5 那么优先级号为 15-5 的中断都可以被 FreeRTOS 所管理

同时 FreeRTOS 也提供了临界区函数,可以在临界区中屏蔽掉可管理的中断

6、时间管理?

FreeRTOS 需要为其提供一个固定的心跳,其通过这个心跳来管理时间,实现 软件定时器,时间片轮询 和 阻塞延时函数 等功能

7、什么是优先级反转?

一个低优先级任务持有某个共享资源的锁,此时一个高优先级的任务尝试获取共享资源,但由于共享资源被低优先级任务持有,因此高优先级任务进入阻塞状态

然后一个中等优先级的任务就绪,其抢占了低优先级任务得到执行,等到中等优先级任务执行完毕,低优先级任务继续执行直到释放共享资源的锁,这时候高优先级的任务才能够从阻塞状态恢复得以运行

这样就造成了中等优先级的任务反而比高优先级的任务先执行,我们称其为优先级反转

8、如何避免优先级反转?

  1. 优先级继承,当高优先级的任务尝试获取已经被低优先级任务持有的共享资源而进入阻塞状态时,临时将低优先级任务的优先级提高到与高优先级任务优先级一致,避免了中等优先级的干扰
  2. 优先级天花板协

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,同时还整理了嵌入式软件相关的八股知识。专栏内容涵盖C/C++基础、嵌软常见通信协议、ARM、FreeRTOS、Linux OS相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。

全部评论
接好运
3 回复 分享
发布于 2025-04-26 12:29 广东
很详细了
点赞 回复 分享
发布于 2025-10-13 11:09 北京

相关推荐

2025-12-02 21:34
中南大学 Java
我这边应该算是华为第一批开奖的了,还是要11月底才开,不过今年的流程整体比去年确实要开得早,这一点还是值得表扬的。然后华为也确实很有诚意,给我这样bg的硕鼠开了15a,并且base地还是在杭州,应该是buff拉满了,但凡其他公司开的没这个高,and对象没签上海,可能真选择成为华孝子了。虽然很有诱惑力,但是这个15a的offer里面确实还是有猫腻的:1. 薪资构成是这样的,15a = (基本工资+绩效工资)*12 + 10w年终,虽然绩效工资hr说100%能拿满,年终大部分都能拿满,绩效工资能拿满我可能还选择相信,但10w年终还能拿满,这我就存疑了。反正看了一圈别家的公司报价都是报一般情况下能拿多少年终,比如美团0-6个月,就报3.5个月,但是华似乎是喜欢往最高了报,所以估计10w年终拿满应该也是极少数人。2. 公积金只交5%,并且缴纳基数还只是按基本工资交的,这里看似每个月到手的钱变多了,但是总体算下来,可能一年比别家就少拿1-2w。3. 月末周六要加班,可以选择调休或双倍加班费,并且平常应该也会加班,感觉不大会像hr说的124能8.30下班,35能5.30下班的,云计算bu强度应该还算比较好的,估计一般情况下9-9-5吧,但是不知道并入ict后会如何。4. 还有相关的业务线,听说8,9月份云计算bu内部已经调整了一波,好像还要并入ict下面了,感觉未来的不确定性也比较大。5. 华为的认可度应该比不过传统的互联网大厂,技术的前瞻性应该也比不过(个人看法)。6. 培养和升职,感觉美团可能更有说法,毕竟见到过1年升L6的,甚至还有两年升L7的,对华为的了解相对较少,只知道华为可能相对稳定一些?毕竟4年一签?综上,还是决定放弃华,准备去团吧,自己选的路,希望不会后悔吧。
变形钢筋:这个薪资结构,年终奖是画大饼啊
OC/开奖
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
2025-11-19 14:56
点赞 评论 收藏
分享
评论
3
20
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务