大厂面试题汇总之(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+同学学习,3300+订阅,非常适合在找工作面经薄弱的同学,销量即是口碑,提前订阅提前享受,持续更新中。

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

全部评论

相关推荐

昨天 22:47
已编辑
湖北师范大学 Java
前段时间有点忙,入职时间有点急,然后房子的事和学校的事有点多没处理完一直没更新,现在发一下一面:3月19日二面:3月26日通知oc:4月3日offer:4月7日入职:4月8日说实话,个人觉得蛮惊喜的,泡了将近一周的池子最终是被捞上来了,本来就已经做好了挂的打算。oc的很大一部分原因就是运气,像我的简历无大厂实习,其他大厂的官网几乎都是简历挂或者初筛中,3月初到现在大厂只有字节和小红书约面,小红书这个虽然听别人说海面,可能不是那么好或者可能有坑,但是对于我来说已经很可以了。目前是已经入职了,是社区工程的一个后端组这一路走来确实不容易,加上我个人的一些特殊情况,我不能像其他人一样说逃课就逃课的去实习,因为大一大二参加了一些学院组织,跟太多老师打过交道,所以在去年的这样一个情况很难逃课去实习。从去年8月份找到的第一份实习,也是仅仅只实习了不到一个月,就被学院强烈要求返回学校,第一段实习就这样匆匆忙忙的结束。后面我退出身上所有跟学院有关的任职,也算是认清了学院,全身心的搞自己的实习,因为怕像第一次一样被学院发现而不能去实习,所以这次实习我只能选择投湖北本地的公司(方便有事赶紧回来),但是仅限湖北武汉这一块真的很难投到,为了找到实习我当时还从学校一周来回两次去武汉线下参加面试,期间遇到不少恶心的公司,一直从9月份投到快11月份,最终是找到了一个政务外包的实习工作,也就是我简历上的这个公司。当时找到实习确实是开心的,也以为是一段新的开始,但是说实话这段实习除了生活上没啥压力,对我的mt真的是一言难尽,作为一个java后端实习生,没有预先通知我原来所有人写代码都是全栈开发,也知道我没怎么写过前端在写代码上一直纠我前端代码的规范问题和一些毫无影响的小问题,每次问问题也是唉声叹气不耐烦,每天基本就是派活干活基本无交流,因为有时我可能想问一问其他部分写得比较好的业务或者代码,mt就会反问我:你问这干啥,手里的活干完了吗,就导致我不是很想问问题,遇到问题也是自己捣鼓。这段实习真得过的算煎熬的,好在有另一个实习生和其他有个同事聊得来,也前前后后实习了两个月,最后在一次事件中真忍不住了,直接辞职了。当时12月份学校要考试,下周一周有3个考试,分布在不同天,我就想请个一周假回去考试,直接说啥啥啥原因,临近项目上线最多只能批3天假,不然只能结束实习,诺大的一个项目组缺我一个实习生吗,真的给我整红了,一气之下直接辞职了。然后后面就是基本就是一直做项目背八股刷算法准备暑期实习,期间其实也遇到过一个***的学院老师,抓着我给他写项目,还说啥对你以后就业有帮助,算是服了学院这群老登。再往后面其实就是投投投,面面面,挂挂挂。其实像那种1000人以下的公司我面试邀约率和通过率还蛮高的,基本上面试的好像都过了,但是还是想试试大厂,所以前前后后也坚持了一个多月。然后就是oc小红书了,差不多入职两周了,在这里我能够体验到和上段实习不一样的,面对不会的问题,可能我会因为上段实习的阴影有时不敢去问,但是真正问了之后我会发现没那么可怕,无论是mt还是同事也愿意耐心为你解答,在这里我们也没有称哥道姐的说法,问人也都是直呼薯名,无论是否转正,还是得抓住这次机会,多学一学然后多偷偷产出,能转正的话更好,不能的话就在秋招找一个还可以的工作,也不一定非得要大厂,对于我个人来说满意就可以。各位还在找实习的双非鼠鼠们也不要焦虑,我觉得一直学一直投一定会有结果的,无论结果是好是坏,包括其实我经历了三段实习,感触也蛮多的,其实对于我们大部分人来说大厂永远不是终点,它可以是你的目标让你一直持续学习,但是也不是让你一直死磕它,包括什么方向啊,未来啊,我感觉都不需要考虑太多,你只管朝着目标做好现在就很OK了,我觉得能找到一个生活和工作平衡的工作才是真正难得的。哈哈哈,一下子写了这么多,其实本来就只想发一个oc帖子的,没想到有感就写了这么多,也希望能够激励我们各位还在找实习的同学们
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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