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
分享

创作者周榜

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