freeRTOS面试会问到的问题。

1.FreeRTOS的移植与置以及使用。

  1. 1移植到哪些平台,讲讲移植过程,占用哪些硬件资源

可以移植到多种平台,包括单片机、嵌入式处理器、微处理器等等。

    1.2移植过程:

  • 选择对应目标处理器架构的FreeRTOS版本。
  • 安装相应的工具链。
  • 对FreeRTOS进行配置。
  • 实现FreeRTOS底层函数。
  • 搭建FreeRTOS应用程序,实现任务调度。

       1.3.占用硬件资源:

移植FreeRTOS对硬件资源的占用,与具体的应用场景有关。需要根据具体应用调整FreeRTOS的配置,需要根本具体应用调整FreeRTOS的配置,如调整任务堆栈大小、内存管理配置、中断控制器等等。

2.FreeRTOS都需要配置哪些,中断是怎么配置的,需要注意什么?

内存管理:需要为FreeRTOS分配一定的内存空间。

任务管理:需要配置任务的堆栈大小、优先级等。

时钟和定时器:需要配置FreeRTOS使用哪个时钟源和定时器。

信号量和队列:需要配置信号量和队列的大小和类型。

调度器配置:需要选择FreeRTOS的调度器类型和优化设置。

在配置中断时,需要首先了解目标处理器的中断控制器的工作原理和寄存器的使用。一般,可以按照以下步骤进行中断配置。

1.开启中断:需要将处理器中断控制器相应的中断开关打开。

2.设置中断优先级:需要设置中断请求的优先级,以保证高优先级中断的及时响应。

3.写入中断向量表:需要在处理器的中断向量表中写入中断处理程序的地址。

配置中断时需要注意以下几点:

1.中断控制器的操作必须是原子的,需要使用响应的临界区代码区。

2.不同处理器的中断控制器操作方式可能不同,需要根据具体的处理器来中断控制器的驱动程序。

3.中断处理程序应该简短,有效率,最好不要在中断中调用太多的函数,以免影响处理器系统的响应性能。

总之,在配置FreeRTOS的同时配置中断需要根据具体处理器的特性进行,具体的中断处理程序程序设计也需要进行相应的考虑。

3.FreeRTOS中的IPC通信都用过哪些

1.信号量:信号量是一种计数机制,用于控制同步,它可以被视为一个资源,需要使用者获取它获取它执行相应的操作,之后再释放信号量,使得其他任务也能够获取这个资源。通过配置信号量,任务就能能够控制共享资源。

2.队列:队列可能于任务之间传递数据。它提供了发送一个消息的任务和接收一个消息的任务之间的缓冲区。队列中的消息都是一定格式的,FreeRTOS常用的队列有有限队列(设定最大可存放的数据个数)和无限队列(不设定队列大小)。

3.事件:事件用于任务之间交换消息,但是在事件中在处理消息可以根据消息的种类进行不同的处理。事件可以包含一个或多个消息,并且可以事件标志位。

这些 IPC 机制可以很好地支持任务间的通信和协调,使得任务之间不再需要通过共享全局数据来完成协作。

4.FreeRTOS中的上下文切换是怎么实现的?(内核调度)

一般面试官会问你,freeRTOS的中断服务函数有那些?(系统定时器sysTick,PendSV)

会让你解释你对这两种中断的认识:

系统定时器,它以最低中断优先级运行,然后寻找到一个上下文切换,将就绪任务添加到就绪表(就是阻塞完毕的任务)或者将一些挂起的任务(从挂起到恢复)放入就绪表,在就绪表当中,会给到下一个任务(或者异常中断处理函数)中进行判断,来触发任务的切换。

所以系统定时器的作用就是用来管理就绪表的

异常处理中断处理函数xPortPendSVHandler():主要是调用vTaskSwitchContext从就绪表当中寻找到优先级最高的且就绪任务。

但是对于PendSV的作用,就是用于上下文切换的,用于触发任务调度的,怎么触发任务调度的呢?它的主要核心就是会在port.c文件中的__asm void xPortPendSVHandler( void )进行调用bl vTaskSwitchContext(核心),这个函数的功能就是找到就绪表当中最高优先级的任务,进行一个任务切换。

SysTick优先级高于外部中断,OS抢占IRQ进行任务调度触发Fault,示意图如下。

SysTick结合PendSV就能完美的解决上述问题。

(1)任务A呼叫SVC 来请求任务切换(例如,等待某些工作完成)

(2) OS接收到请求,做好上下文切换的准备,并且挂起一个PendSV异常。

(3)当CPU 退出SVC后,它立即进入PendSV,从而执行上下文切换。

(4)当PendSV执行完毕后,将返回到任务B,同时进入线程模式。

(5)发生了一个中断,并且中断服务程序开始执行

(6)在ISR执行过程中,发生 SysTick 异常,并且抢占了该ISR。

(7)OS 执行必要的操作,然后 pend 起 PendSV异常以作好上下文切换的准备。

(8)当 SysTick退出后,回到先前被抢占的ISR中,ISR继续执行

(9) ISR 执行完毕并退出后,PendSV服务例程开始执行,并且在里面执行上下文切换。

(10)当PendSV执行完毕后,回到任务A,同时系统再次进入线程模式。

FreeRTOS系统的任务切换最终都是在PendSV中断服务函数中完成的,UCOS也是在 PendSV中断中完成任务切换的。

5.简述FreeRTOS中的任务调度

FreeRTOS 操作系统支持三种调度方式:抢占式调度,时间片调度和合作式调度。实际应用主要是抢占式调度和时间片调度,合作式调度用到的很少。

合作式调度

亦称为FreeRTOS的协程,实际上是线程并发出来的,每个线程并发出来的协程共用一个栈空间。合作式调度主要用在资源有限的设备上面,现在已经很少使用了。出于这个原因,后面的 FreeRTOS 版本中不会将合作式调度删除掉,但也不会再进行升级了。

抢占式调度

每个任务都有不同的优先级,任务会一直运行直到被高优先级任务抢占或者遇到阻塞式的 API 函数,比如 vTaskDelay。

时间片调度

每个任务都有相同的优先级,任务会运行固定的时间片个数或者遇到阻塞式的 API 函数,比如vTaskDelay,才会执行同优先级任务之间的任务切换。如果用户在 FreeRTOS.h 中禁止使用时间片调度,那么每个任务必须配置不同的优先级。

路径:FreeRTOS.h
#ifndef
configUSE_TIME_SLICING	
#define
configUSE_TIME_SLICING 1
​​​​​​​#endif

  • 15
    点赞
  • 201
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新小电阻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值