当前位置: 首页 > article >正文

嵌入式面试八股文(十)·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博客


http://www.kler.cn/a/418991.html

相关文章:

  • react 响应式变量定义
  • Flutter简单实现滑块验证
  • 基于java+SpringBoot+Vue的教学辅助平台设计与实现
  • arcgis for js点击聚合要素查询其包含的所有要素
  • 30.100ASK_T113-PRO 用QT编写视频播放器(一)
  • OpenGauss数据库介绍
  • 详解 Qt QtPDF之QPdfPageNavigator 页面跳转
  • leetcode3250. 单调数组对的数目 I,仅需1s
  • SQL基础入门—— SQL 数据类型
  • shell语法(1)bash
  • SAP SD学习笔记15 - 投诉处理2 - 返品处理流程之 参照请求传票(发票)来生成返品传票
  • JavaScript 入门教学:从基础语法到实践案例
  • Oracle 11g R2 RAC 到单实例 Data Guard 搭建(RMAN备份方式)
  • 小红书矩阵运营:怎么通过多个账号来提升品牌曝光?
  • 【Ubuntu系统开发工具使用技能】在jupyter notebook界面选择新的conda虚拟开发环境
  • 使用 Certbot 为 Nginx 自动配置 SSL 证书
  • kafka数据在服务端时怎么写入的
  • Hive 安装与架构详解
  • NVR监测软件EasyNVR多个NVR同时管理:录播主机的5条常见问题与解决办法
  • Maven-课堂笔记