嵌入式面试八股文(十)·FreeRTOS相关题目
.
目录
1. 关于FreeRTOS中任务的描述,不正确的是( )
2. 关于函数 vTaskDelayUntil()与函数 vTaskDelay()描述?
3. 在FreeRTOS中,任务通知更新接收任务的通知方法有?
4. FreeRTOS是一种实时可抢占式操作系统,FreeRTOS内核采用的调度算法是?
5. FreeRTOS提供了3个API来创建任务,分别是什么?
6. 在FreeRTOS移植过程中,当我们把configUSE_IDLE_HOOK配置为1时就可以使用时间片钩子函数,关于时间片钩子函数简单描述?
1. 关于FreeRTOS中任务的描述,不正确的是( )
A、当任务处于运行态时,该任务获得CPU使用权
B、当任务在等待一个事件的到来时,会进入“阻塞”状态
C、 当任务处于挂起状态时,任务不在任务管理器(scheduler)列表内,所以当任务处于挂起状态后,将没有任何方式进行再次调度
D、 任务不在运行态,既不在阻塞态,也不在挂起态则称作就绪态。此时他们不能运行,只是"准备好运行"
选项C的描述是错误的,实际上FreeRTOS内部是通过各种不同的链表来维护任务的,当任务处于挂起状态后,与该任务相关的资源并没有释放,此时可以调用vTaskResume来让挂起状态的任务切换到就绪态,从而等到后续的调度
2. 关于函数 vTaskDelayUntil()与函数 vTaskDelay()描述?
在 FreeRTOS 中延时函数也相对模式和绝对模式,在 FreeRTOS 中不同的模式用的函数不同,其中函数 vTaskDelay()是相对模式(相对延时函数),函数 vTaskDelayUntil()是绝对模式(绝对延时函数)。两者都会阻塞任务。
3. 在FreeRTOS中,任务通知更新接收任务的通知方法有?
① xTaskNotifyWait()
:接收任务通知并等待。此方法允许任务在没有立即通知时阻塞,直到接收到通知或超时。
uint32_t ulNotificationValue;
BaseType_t xReceived = xTaskNotifyWait(0x00, // 清除所有待处理的通知
0xFFFFFFFF, // 接受所有通知
&ulNotificationValue, // 存储通知的值
portMAX_DELAY); // 阻塞直到收到通知
② ulTaskNotifyTake()
:此函数也是用来接收通知并等待,通常用于单个通知的接收,返回接收到的通知次数。
uint32_t ulNotificationValue;
ulNotificationValue = ulTaskNotifyTake(pdTRUE, portMAX_DELAY); // 阻塞直到收到通知
③ xTaskNotify()
:在任务中发送通知,可以用来触发等待该通知的任务。
xTaskNotify(xTaskHandle, 1, eSetBits); // 发送通知,设置某些位
不覆盖接收任务的通知值(如果上次发送的通知还没被处理):
通知值不会被覆盖,可以使用 eSetBits 操作符。它会将通知值的某些位设置为 1,而不改变其他位,且不会覆盖接收任务未处理的通知值。
xTaskNotify(xTaskHandle, 0x01, eSetBits); // 设置通知值的某一位
覆盖接收任务的通知值:
可以使用 eOverwriteBits 操作符。此操作符会将接收任务的通知值完全覆盖为新的值。
xTaskNotify(xTaskHandle, 0x01, eOverwriteBits); // 完全覆盖通知值
更新接收任务通知值的一个或多个 bit:
以使用 eSetBits 操作符。这会将特定位设置为 1,而不会影响其他位。
xTaskNotify(xTaskHandle, 0x03, eSetBits); // 设置通知值的低两位为 1
增加接收任务的通知值:
可以使用 eIncrement 操作符。此操作会使通知值的当前值增加一个指定的数量。
xTaskNotify(xTaskHandle, 1, eIncrement); // 增加通知值 1
4. FreeRTOS是一种实时可抢占式操作系统,FreeRTOS内核采用的调度算法是?
FreeRTOS采用的手机基于时间片的优先级抢占式调度算法,这个算法集成了优先级调度算法和时间片调度算法的优点,相同任务优先级采用时间片调度算法,不同优先级才用优先级调度算法。
5. FreeRTOS提供了3个API来创建任务,分别是什么?
xTaskCreate() 使用动态的方法创建一个任务。
xTaskCreateStatic() 使用静态的方法创建一个任务。
xTaskCreateRestricted() 创建一个使用 MPU 进行限制的任务,相关内存使用动态内存分配。
6. 在FreeRTOS移植过程中,当我们把configUSE_IDLE_HOOK配置为1时就可以使用时间片钩子函数,关于时间片钩子函数简单描述?
时间片钩子函数是使用中最常用的钩子函数之一,在使用时我们需要把configUSE_IDLE_HOOK配置成1, 时间片钩子函数需要由用户来实现,FreeRTOS规定了函数的名字和参数:void vApplicationTickHook(void ) 。时间片中断可以周期性的调用 该函数,该函数必须非常短小,不能大量使用堆栈,不能调用以”FromISR" 或 "FROM_ISR”结尾的API函数。
千题千解·嵌入式工程师八股文详解_时光の尘的博客-CSDN博客
FreeRTOS实时操作系统_时光の尘的博客-CSDN博客