FreeRTOS 八股 100 问:覆盖 90% 嵌入式大厂高频考点

【秋招】嵌入式八股文- FreeRTOS篇

FreeRTOS 面试到底考什么?这一篇给你讲明白。

从任务调度、内存管理,到中断通信、同步机制、定时器与系统移植,嵌入式面试中最常问的核心问题,这里全部帮你整理好了。

内容从基础到进阶,适合快速复习 + 查漏补缺。

推荐题集来自《C/C++ 嵌入式面经专栏》,已更新多篇高质量内容,覆盖嵌入式开发核心知识,帮你系统提升,稳过面试。

一、FreeRTOS 核心机制(理解本质)

1.1 FreeRTOS 内核最核心的几个组件分别负责什么?

1.2 一个任务从创建到运行,会经历哪些状态?每个状态的本质是什么?

1.3 任务是如何从 Ready → Running → Blocked 之间切换的?

1.4 什么叫“上下文切换”?切换时到底保存了哪些东西?

1.5 在什么情况下会触发任务切换?(列举多个场景)

1.6 FreeRTOS 默认调度器是怎样工作的?有没有“抢占”和“非抢占”的区别?

1.7 什么情况下会发生时间片轮转?为什么需要它?

1.8 系统的 tick 是怎么来的?如果没有 tick 会发生什么?

1.9 configTICK_RATE_HZ 改大/改小分别会带来什么影响?

1.10 为什么延时函数会让任务进入阻塞态?底层是怎么实现的?

1.11 任务进入阻塞态后,CPU 还会被它占用吗?

1.12 Tick 中断通常由哪个硬件定时器产生?怎么配置?

二、任务系统(重点考察实战)

2.1 创建任务时,栈空间为什么这么重要?分配小了会发生什么?

2.2 xTaskCreate 和 xTaskCreateStatic 的本质区别是什么?

2.3 删除任务后,系统资源是如何回收的?是否一定安全?

2.4 FreeRTOS 的优先级设计有什么坑?优先级是不是越多越好?

2.5 如何在运行过程中动态调整任务优先级?这样做有什么风险?

2.6 什么是“任务饿死”?在实际项目中怎么避免?

2.7 Idle 任务为什么一定存在?它不只是“空转”这么简单

2.8 Idle Hook 一般用来做什么?有没有坑?

2.9 Daemon(Timer Service)任务和普通任务有什么区别?

2.10 系统里任务切换到底是“谁”触发的?(中断?函数?内核?)

三、任务间通信(工程高频)

3.1 FreeRTOS 提供了哪些通信方式?各自适合什么场景?

3.2 队列本质上是怎么实现的?为什么是线程安全的?

3.3 队列为什么既能传数据又能同步?

3.4 如何在“中断 → 任务”之间安全传数据?

3.5 xQueueSend 和 xQueueSendFromISR 的底层差异是什么?

3.6 信号量本质是不是“队列”?为什么这么设计?

3.7 二值信号量 vs 互斥锁,本质区别是什么?

3.8 什么情况下必须用 Mutex 而不是 Binary Semaphore?

3.9 递归互斥锁解决了什么问题?

3.10 计数信号量适合用在哪些场景?

3.11 消息队列和信号量到底有什么本质区别?

3.12 Event Group 适合解决什么问题?为什么队列不适合?

四、同步与并发问题(面试最爱)

4.1 什么是临界区?为什么必须保护?

4.2 关闭中断 vs 使用锁,分别适用于什么场景?

4.3 taskENTER_CRITICAL 和 portENTER_CRITICAL 有什么区别?

4.4 信号量除了“通信”,还能干什么?(举例)

4.5 互斥锁解决了哪类并发问题?

4.6 什么是优先级反转?现实中怎么发生的?

4.7 FreeRTOS 是如何解决优先级反转的?

4.8 优先级继承机制是怎么工作的?

4.9 为什么 Mutex 不能在中断中使用?

4.10 同步 和 通信 本质区别是什么?

4.11 什么是死锁?在 RTOS 中如何避免?

4.12 Event Group 为什么适合“多条件等待”?

五、时间系统与定时器(非常常考)

5.1 vTaskDelay 和 vTaskDelayUntil 本质区别是什么?

5.2 为什么周期任务推荐用 vTaskDelayUntil?

5.3 软件定时器是如何实现的?(不是硬件定时器!)

5.4 Timer Service 任务的作用是什么?

5.5 定时器回调函数运行在哪个上下文?为什么重要?

5.6 定时器回调里为什么不能做复杂操作?

5.7 创建/启动/停止定时器的流程是怎样的?

5.8 定时器支持一次性和周期性吗?如何实现?

5.9 Tickless Idle 是怎么工作的?

5.10 Tickless 为什么能省电?代价是什么?

六、中断机制(必须吃透)

6.1 FreeRTOS 对中断优先级有什么特殊要求?

6.2 configMAX_SYSCALL_INTERRUPT_PRIORITY 是干嘛的?

6.3 为什么有些中断可以用 FreeRTOS API,有些不行?

6.4 中断里能不能创建任务?为什么?

6.5 什么是“中断嵌套”?FreeRTOS 怎么处理?

6.6 哪些 API 是专门给 ISR 用的?

6.7 portYIELD_FROM_ISR 的作用是什么?

6.8 xHigherPriorityTaskWoken 是干嘛的?

6.9 如何在中断中安全触发一次任务切换?

6.10 中断和任务之间传数据,有哪些推荐方式?

七、内存管理(非常容易挂)

7.1 FreeRTOS 为什么要自己实现 malloc?

7.2 heap_1 ~ heap_5 各自适合什么场景?

7.3 heap_4 为什么最常用?

7.4 heap_5 解决了什么问题?

7.5 动态创建 vs 静态创建任务,有什么差别?

7.6 如何避免内存碎片?

7.7 pvPortMalloc 和标准 malloc 有什么区别?

7.8 栈溢出是怎么发生的?如何检测?

7.9 configCHECK_FOR_STACK_OVERFLOW 有几种模式?

7.10 如何查看任务栈使用情况?

7.11 configTOTAL_HEAP_SIZE 设置太小会发生什么?

7.12 内存分配失败时系统会怎样?

八、调试与性能分析(进阶)

8.1 如何查看系统中所有任务状态?

8.2 vTaskGetInfo 能获取哪些信息?

8.3 如何统计每个任务的 CPU 占用?

8.4 Run Time Stats 是怎么实现的?

8.5 如何判断系统是否“调度异常”?

8.6 如何统计任务切换次数?

8.7 什么是“栈高水位线”?有什么用?

8.8 如何发现某个任务跑飞(死循环)?

8.9 Trace 工具一般能分析哪些东西?

8.10 如何判断系统瓶颈在 CPU 还是 IO?

九、移植与配置(高手向)

9.1 FreeRTOS 的移植层主要做了什么?

9.2 port.c 和 portmacro.h 各负责什么?

9.3 configUSE_PREEMPTION 关闭后会发生什么?

9.4 configUSE_IDLE_HOOK / TICK_HOOK 分别干嘛?

9.5 Cortex-M 上 FreeRTOS 的调度依赖哪些异常?

9.6 PendSV / SysTick / SVC 各自作用是什么?

9.7 如何修改调度策略(比如改成时间片优先)?

9.8 FreeRTOSConfig.h 里最关键的几个参数有哪些?

9.9 Tick 和系统时钟之间如何换算?

9.10 移植 FreeRTOS 最容易踩的坑有哪些?

嵌入式软件工程师面试完全指南

整个秋招攒下来的面经,我都塞进这个专栏里了——目前 32 篇 / 12w+ 字,仍在持续更新。

内容基本覆盖了嵌入式岗会被问到的所有方向:C 语言陷阱 / 计网高频 / 操作系统 / RTOS / Linux 驱动 / 通信协议 / 硬件基础——你面试会被问到的,这里都有对应的题和思路。

目前 4.7w+ 同学在看,3300+ 订阅。数据摆这儿,口碑自己说话。

适合面经基础薄弱、想一次性系统梳理的同学。越早订越划算,内容只会越来越全,价格也只会越涨越高。

🔗 专栏直达:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM

全部评论

相关推荐

凌小云:实习生,第一个星期。就是把项目架构搞清楚就行。任务别急。千万不要拿自己的时间去干活。一定要让工作和生活有边界感。不要认为自己拿个人时间干活,他们知道就会觉得你很可以。你作为一个实习生,最应该的就是让他们明白你的能力边界,你拿个人时间干活,只会让他们觉得可以安排更多的任务,自己每天累死累活的,还怕任务完成不了。本身工作都不是很熟悉,千万别展示自己。一定要让自己有余力,去复盘工作,而不是每天都忙着工作里。
实习第一天,你在干什么
点赞 评论 收藏
分享
鼠鼠的暑期实习求职生涯结束了。回想上个月的今天,在4.8号开始投递,于5.8号终止。一共投递405家,测评11家,笔试10家,面试6家,收获一个外包offer(鼠鼠一看要求实习12个月才给offer,而且分基础薪资和岗位薪资就跑了),除此之外最高达到美团二面,此外都是一面挂。回顾这一个月,鼠鼠无疑是失败的。目光往前看看,鼠鼠大一认为一线企业会把绩点作为筛选标准之一,于是跻身课内。大二收获了一段项目经历,堪堪抓住了后端开发的尾巴,但没有跟上AI的脚步。考虑保研,但被参与的深度强化学习项目当头一棒,狠狠畏惧了。考虑考公,但竞争说不准哪个更大。直到大三才意识寻找工作对实习、经验和技术的重要性,可是由于拖延和心理原因没能及时准备。时间拨到4月,鼠鼠认为自己情况好不少,而且也不能再拖了。于是开始疯狂的补救:算法吃一些大一大二的老本,然后快速过hot100;项目就追紧现在热门的RAG、Agent这些。最终在4月8日投出了第一份简历,回想当初,不知道那时的我看到此时的境遇会作何感想。因为泡在温水中太久了,意识不到就业市场的严峻和自身技术的边界。因为985的头衔博得了不少面试机会,但是偏偏都不得不被淘汰——学历是把双刃剑,面试官对你承载了更多的期待。鼠鼠带着薄弱的基础闯到暑期实习,才发现到处神仙打架。起初一边过hot100,一边更新项目,一边背八股。因为笔试能力不行,丢掉了滴滴、华为、拼多多、得物等公司的机会,后面又不得不赶着去应付面试需要的知识。第二场面试后变成了坚实的八股党,问什么就答什么,但是在基础知识和项目的理解上差强人意,于是丢掉了一些公司的机会。通过舍友的帮助,鼠鼠明白了自己在表达、回答薄弱之处,不断改变,但是为时又已晚,美团二面击中了鼠鼠的项目架构理解,第一轮回答没跟上之后就已经宣告失败,后面的面试大同小异:八股的拷打和项目的拷打占比很少,场景题显著增加,又穿插一些笔试题——思路是有的,实现是抓马的。鼠鼠直接举手投降了。其实明白场景题实际上就是考对八股和实际场景的理解,但是更明白这需要更多的时间来学习,于是时间流逝到5月8日,最后一面结束,鼠鼠还是失败了。(写到这里的时候想起了23年的6月8日,那时我似乎在高考。想到这里时,一种难以言喻的情绪击中了鼠鼠)鼠鼠接下来准备all in日常实习了(如果各位佬有推荐的话恳请提示下鼠鼠),因为秋招对于实习经历还是比较看重的。也会考虑保研、考公等的路径,不想家里蹲来着。鼠鼠希望大家都能找到自己想要的offer,也希望自己有一份不错的工作。总结经验,希望能帮助到尚且来得及的各位:1. 简历上面写的关于自己项目的亮点一定要知根知底,被面试官问起时能够立刻想起此功能整条链路和关联功能,以及方法的缺点、方法的选型原因、具体方法内容等,这个非常重要!2. 八股要背全,认为自己悟透后多找找其他人出的八股,彼此应对,也能促进再记忆。3. hot100只是基础,想要通过笔试,还需要更强的做题能力以及一些运气。4. 简历要找自己认可的佬评审,可以找AI评价,注意格式和表达,突出重点,展示亮点。不要太冗长,也不要过分无趣。项目描述中出现过的就不要在亮点中再出现了。5. 多关注AI方面,读读新的热点话题,看看一些github的仓库,学习其他佬的设计。这样和面试官也能有话题可聊。6. 面试时要给自己留出一些思考的时间,不能脑子一热就脱口而出,你不知道这个回答是否给自己留了坑。7. 面试记得留一下备份,鼠鼠我一般通过手机的腾讯会议的录音功能,录完还能提取文字,很方便,正确的识别率也很高。8. 面试前最好留出半天时间浏览牛客中各路大佬给出的面经,同样的岗位面试问题的重复率不低。9. 擅于使用AI,可以通过AI来了解面试的岗位的信息,让AI拷打自己的项目,问场景等。一定要狠狠使用!10. 面试的每个环节都很重要,个人介绍、拷打、算法题和反问环节。个人介绍和反问环节建议拿着相关的公司和岗位名去问AI,狠狠出一些反问的题和合理的表达。
yakuso:能保研就保研吧,,同鼠鼠现在还不敢开始面,八股记不住一点
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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