FreeRTOS空闲任务是什么

发布时间:2022-04-11 13:56:36 作者:iii
来源:亿速云 阅读:200

本文小编为大家详细介绍“FreeRTOS空闲任务是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“FreeRTOS空闲任务是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

         当RTOS调度器开始工作后,为了保证至少有一个任务在运行,空闲任务被自动创建,占用最低优先级(0优先级)。

   xReturn = xTaskCreate( prvIdleTask,                         "IDLE",configMINIMAL_STACK_SIZE,                         (void * ) NULL,                         (tskIDLE_PRIORITY | portPRIVILEGE_BIT ),                         &xIdleTaskHandle);

         空闲任务是FreeRTOS不可缺少的任务,因为FreeRTOS设计要求必须至少有一个任务处于运行状态。我们来看一下空闲任务要做的工作。

1.释放内存

         从V9.0版本开始,如果一个任务删除另外一个任务,被删除任务的堆栈和TCB立即释放。如果一个任务删除自己,则任务的堆栈和TCB和以前一样,通过空闲任务删除。所以空闲任务开始就会检查是否有任务删除了自己,如果有的话,空闲任务负责删除这个任务的TCB和堆栈空间。

2. 处理空闲优先级任务

         当使用抢占式内核,相同优先级的任务使用时间片方式获得CPU权限。如果有任务与空闲任务共享一个优先级,并且宏configIDLE_SHOULD_YIELD设置为1,那么空闲任务不必等到时间片耗尽再进行任务切换。

         所以空闲任务检查空闲优先级下的就绪列表中是否有多个任务,有的话则执行任务切换,让用户任务获得CPU权限。

         宏configIDLE_SHOULD_YIELD控制任务在空闲优先级中的行为。仅在满足下列条件后,才会起作用。

使用抢占式内核调度用户任务使用空闲优先级。

        通过时间片共享同一个优先级的多个任务,如果共享的优先级大于空闲优先级,并假设没有更高优先级任务,这些任务应该获得相同的处理器时间。

        但如果共享空闲优先级时,情况会稍微有些不同。当configIDLE_SHOULD_YIELD为1时,其它共享空闲优先级的用户任务就绪时,空闲任务立刻让出CPU,用户任务运行,这样确保了能最快响应用户任务。处于这种模式下也会有不良效果(取决于你的程序需要),描述如下:

FreeRTOS空闲任务是什么

      图中描述了四个处于空闲优先级的任务,任务A、B和C是用户任务,任务I是空闲任务。上下文切换周期性的发生在T0、T1…T6时刻。当用户任务运行时,空闲任务立刻让出CPU,但是,空闲任务已经消耗了当前时间片中的一定时间。这样的结果就是空闲任务I和用户任务A共享一个时间片。用户任务B和用户任务C因此获得了比用户任务A更多的处理器时间。

      可以通过下面方法避免:

推荐阅读:
  1. AWS IOT 入门(一) FreeRTOS
  2. Linux如何设置反空闲

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

freertos

上一篇:JUC中的Lock锁与synchronized同步代码块问题怎么解决

下一篇:MSSQL基本语法实例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》