复盘Freertos 常见面试题

1.概述与移植

简述freertos系统

freertos是一个实时操作系统,它内核比较小,可移植性高,适用于多种硬件平台,具有任务调度,中断管理等功能;

裸机开发和rtos开发的区别?

裸机开发直接对硬件进行操作,没有任务调度机制,需要手动管理内存,没有同步机制;

rtos不依赖于硬件平台,可移植性高,有任务调度机制,内存管理机制,和同步机制;

2.为什么会在项目中使用RTOS?

对于简单的单一任务,我们会考虑裸机开发;但对于业务比较复杂的,我们会使用rtos,可以更好的实现复杂的业务逻辑同时更具有实时性;

3.freertos启动流程?

1.硬件初始化;2.系统初始化;3.创建任务;4.开启调度器;

4.freertos如何移植?有没有对代码裁剪的经验?讲讲移植了哪些文件,他们有什么作用。

移植:

1.在源程序中创建freertos文件夹

2.在文件夹中创建src存放source的核心文件,就是.c文件

3.在文件夹中创建port存放MenMang内存管理文件和RVDS处理器架构相关代码

4.最后再将include头文件和FreeRTOSConfig.h配置文件移植进来即可

裁剪:

task.c和list.c是必须的,其他的核心文件按需选择即可;

RVDS中只留下我们使用到的芯片的即可,其他可以删除;

内存管理有5个文件,我们一般留heap_4.c,其他可以删除

5.Freertos和linux的区别?

freertos的内核比linux微小,是轻量级的系统,此外实时性比linux高;

6.为什么Freertos的实时性比linux更高?

① freertos是抢占式的,高优先级的任务可以立马运行;

② freertos有高效的中断处理机制,确保对中断事件的快速响应;

linux也可以配置成实时系统,但是linux的调度算法更加注重的是系统的稳定性和公平性而不是实时性,它的进程调度和中断响应更加复杂,可能会有一定的延迟,影响了实时性;(上下文切换,核态切换等)

7.Freertos的heap文件?5种内存管理机制

Freertos定义了一个很大的全局数组ucHeap[configTOTAL_HEAP_SIZE],从这个数组里分配内存;下图是创建三个任务的过程;

有五种内存管理机制;

heap_1.c:只分配不删除,只有pvPortMalloc,没有实现vPortFree;

heap_2.c:最佳匹配算法,但不会合并相邻的空闲内存,碎片化严重;

假设heap有3块空闲内存:5字节、25字节、100字节,pvPortMalloc想申请20字节,找出最小的、能满足pvPortMalloc的内存:25字节,把它划分为20字节、5字节;

heap_3.c:使用标准C库里的malloc、free函数,configTOTAL_HEAP_SIZE不再起作用;

注:C库里的malloc、free函数并非线程安全的,Heap_3中先暂停FreeRTOS的调度器,再去调用这些函数,使用这种方法实现了线程安全。

heap_4.c:首次适应算法,会把相邻空闲内存合并为一个大的空闲内存,可以较少内存的碎片化;

假设堆中有3块空闲内存:5字节、200字节、100字节,pvPortMalloc想申请20字节,找出第1个能满足pvPortMalloc的内存:200字节,把它划分为20字节、180字节

heap_4.c:Heap_5分配内存、释放内存的算法跟Heap_4是一样的,不局限于管理一个大数组:它可以管理多块、分隔开的内存。

7.在FreeRTOS中,如何创建和删除任务?

创建任务是分为动态创建和静态创建,静态创建需要事先分配好TCB和栈;

删除任务可以分为自杀和被其他任务杀,其他任务删除任务可以直接进行清理,自杀的需要空闲任务来清理;

8.TCB结构体是什么?

用于表示任务的结构体,有栈指针,栈顶指针,优先级,名字,状态等;

9.FreeRTOS任务函数怎么写?

xTaskCreate:任务函数,任务名称,栈深度,参数,优先级,handle指针;

函数创建步骤:①创建TCB;②创建栈;③在栈里写入函数地址、参数;

细节:

创建任务创建一个待恢复的现场(伪造现场),开始运行之前要先将现场恢复进去;pc和R0分别写入函数地址和函数参数;其他存在TCB中,TCB包括:栈顶指针,栈底指针,函数,优先级,两个链表;

10.FreeRTOS的任务堆栈大小怎么考虑的?

栈的大小由临时变量和函数的调用深度来决定,需要工程师按经验去分配;

11.任务的状态有哪几种?阻塞和暂停有啥区别?

Running、Ready、blocked、suspend;阻塞是等待时间事件或同步事件发生;暂停是自己暂停或者其他任务要求其暂停;

12.freertos的多任务同步机制列举?

队列、信号量、互斥量、事件组、任务通知;

13.freertos使任务切换的方式有哪些?

1.高优先级任务创建之后抢占

2.任务主动放弃CPU

3.systick时间片轮转

4.系统调用 such as:任务切换函数taskYIELD()进行任务切换

其他问题可关注专栏

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

面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,2800+订阅,非常适合在找工作面经薄弱的同学,3200+订阅还会涨价,提前订阅提前享受,持续更新中。

原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM

全部评论

相关推荐

2本硕,在这一个下午真的绷不住了,浪费了太多时间,现在的技术栈还停在C语言和stm32上,找嵌入式的实习面试被拷打,找杭州的一个也找不到,真的心里难受,linux没学过,研二了开始慌了。
一条淡水魚:嵌入式这行的面试我认为实际项目比较重要,技术栈简单的提一嘴就行,面试官在乎的关键点在于你用了这些技术做了哪些工作解决了什么问题,而不是停留在离散的那些个技术栈上,那除了教课没有意义,好比你提到的c语言和32,你用32做过哪些具体的项目?接触过什么外设?使用过哪些公司的SDK?有没有实际产品落地?以及各种只有进入真正的生产环节当中才会积累到的经验......主动去和面试官讨论这些实际的问题,甚至还能就某个具体参数的合理性与他去简单探讨一下,只要技术栈对口,基本上就稳啦~(另外linux和RTOS是嵌入式的标配哦,选一个方向走下去吧)
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下 HR 会来跟你谈。” 我当时脑子直接宕机,一句话都没憋出来。后面 HR 找我谈话,直属领导也在旁边。HR 说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
2025-12-15 11:27
门头沟学院 Java
哇哇的菜鸡oc:所有人不要理会,就好了,后面他就知道怎么回事了,只能说有的时候市场都是被宰的人搞坏的
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

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