0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS中的空闲任务是什么

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-30 10:55 次阅读

空闲任务是 FreeRTOS 必不可少的一个任务,其他 RTOS 类系统也有空闲任务,比如 uC/OS。看名字就知道,空闲任务是处理器空闲的时候去运行的一个任务,当系统中没有其他就绪任务的时候空闲任务就会开始运行,空闲任务最重要的作用就是让处理器在无事可做的时候找点事做,防止处理器无聊,因此,空闲任务的优先级肯定是最低的。当然了,实际上肯定不会这么浪费宝贵的处理器资源,FreeRTOS 空闲任务中也会执行一些其他的处理。

空闲任务详解

1、空闲任务简介

当 FreeRTOS 的调度器启动以后就会自动的创建一个空闲任务,这样就可以确保至少有一任务可以运行。但是这个空闲任务使用最低优先级,如果应用中有其他高优先级任务处于就绪态的话这个空闲任务就不会跟高优先级的任务抢占 CPU 资源。空闲任务还有另外一个重要的职责,如果某个任务要调用函数 vTaskDelete()删除自身,那么这个任务的任务控制块 TCB 和任务堆栈等这些由 FreeRTOS 系统自动分配的内存需要在空闲任务中释放掉,如果删除的是别的任务那么相应的内存就会被直接释放掉,不需要在空闲任务中释放。因此,一定要给空闲任务执行的机会!除此以外空闲任务就没有什么特别重要的功能了,所以可以根据实际情况减少空闲任务使用 CPU 的时间(比如,当 CPU 运行空闲任务的时候使处理器进入低功耗模式)。

用户可以创建与空闲任务优先级相同的应用任务,当宏 configIDLE_SHOULD_YIELD 为 1的话应用任务就可以使用空闲任务的时间片,也就是说空闲任务会让出时间片给同优先级的应用任务。这种机制要求FreeRTOS 使用抢占式内核。

2、空闲任务的创建

当调用函数 vTaskStartScheduler()启动任务调度器的时候此函数就会自动创建空闲任务。

3、空闲任务函数

空闲任务的任务函数为 prvIdleTask(),但是实际上是找不到这个函数的,因为它是通过宏定义来实现的,在文件 portmacro.h 中有如下宏定义:

#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )

其中 portTASK_FUNCTION()在文件 tasks.c 中有定义,它就是空闲任务的任务函数。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5017

    文章

    18496

    浏览量

    293147
  • RTOS
    +关注

    关注

    20

    文章

    782

    浏览量

    118920
  • FreeRTOS
    +关注

    关注

    12

    文章

    474

    浏览量

    61520
收藏 人收藏

    评论

    相关推荐

    FreeRTOS介绍与基础任务创建

    本篇介绍FreeRTOS与基础任务创建
    的头像 发表于 09-26 09:00 2012次阅读
    <b class='flag-5'>FreeRTOS</b>介绍与基础<b class='flag-5'>任务</b>创建

    FreeRTOS中的任务管理

    任务FreeRTOS 中最基本的调度单元,它是一段可执行的代码,可以独立运行。FreeRTOS 中的任务是基于优先级的抢占式调度,优先级高的任务
    的头像 发表于 11-27 17:03 523次阅读

    转:第10章 FreeRTOS任务管理

    10.8FreeRTOS任务删除10.9FreeRTOS任务挂起10.10FreeRTOS任务
    发表于 08-23 09:54

    FreeRTOS任务堆栈溢出检测机制

    FreeRTOS,每个任务都拥有自己的堆栈,该堆栈的大小由创建任务时xTaskCreate函数的函数参数所决定。但当任务所使用的堆栈空间
    发表于 10-15 13:51

    freertos怎么在任务修改任务的优先级?

    freertos怎么在任务修改任务的优先级
    发表于 10-11 07:56

    Zynq中使用FreeRTOS空闲钩子函数时在SDK中的设置

    本文介绍zynq中使用FreeRTOS空闲钩子函数时在SDK中的设置和一些说明
    发表于 03-09 14:33 2437次阅读
    Zynq中使用<b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>空闲</b>钩子函数时在SDK中的设置

    (一)FreeRTOS学习之FreeRTOS任务基础知识

    FreeRTOS学习之FreeRTOS任务基础知识转行小白一枚,通过博客记录自我学习,望更多博友多多指点,感激不尽!RTOS系统的核心就是任务管理,学习RTOS系统主要是为了使用RTO
    发表于 12-23 19:57 3次下载
    (一)<b class='flag-5'>FreeRTOS</b>学习之<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任务</b>基础知识

    FreeRTOS任务详解

    详细讲解freeRTOS任务
    发表于 12-23 20:01 11次下载
    <b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>任务</b>详解

    FreeRTOS高级篇11---空闲任务分析

    当RTOS调度器开始工作后,为了保证至少有一个任务在运行,空闲任务被自动创建,占用最低优先级(0优先级)。
    发表于 01-26 17:30 0次下载
    <b class='flag-5'>FreeRTOS</b>高级篇11---<b class='flag-5'>空闲</b><b class='flag-5'>任务</b>分析

    FreeRTOS高级篇2---FreeRTOS任务创建分析

    FreeRTOS基础系列《FreeRTOS系列第10篇---FreeRTOS任务创建和删除》中介绍了任务创建API函数xTaskCreat
    发表于 01-26 17:42 23次下载
    <b class='flag-5'>FreeRTOS</b>高级篇2---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任务</b>创建分析

    FreeRTOS系列第11篇---FreeRTOS任务控制

    FreeRTOS任务控制API函数主要实现任务延时、任务挂起、解除任务挂起、任务优先级获取和设置
    发表于 01-26 17:54 12次下载
    <b class='flag-5'>FreeRTOS</b>系列第11篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任务</b>控制

    freeRTOS任务

    freeRTOS系统的任务切换的具体过程最终都是在pendSV中断服务函数里面完成的。
    的头像 发表于 02-10 11:02 1198次阅读
    <b class='flag-5'>freeRTOS</b>的<b class='flag-5'>任务</b>

    freeRTOS空闲任务的作用

    在嵌入式实时操作系统中,都会有空闲任务的存在,这个任务是伴随着操作系统启动之后而存在的。正常情况来说,系统不挂掉,空闲任务都会一直存在。
    的头像 发表于 07-04 15:16 1051次阅读
    <b class='flag-5'>freeRTOS</b>中<b class='flag-5'>空闲</b><b class='flag-5'>任务</b>的作用

    FreeRTOS空闲任务低功耗模式

    一次进入低功耗模式。T2、T3 和 T4 这三个时刻都一样,反复的进入低功耗、退出低功耗,最理想的情况应该是从 T1 时刻就进入低功耗,然后在 T5 时刻退出。 在(2)中空闲任务只工作了两个时钟节拍,但是也执行了低功耗模式的进入和退出,显
    的头像 发表于 07-30 11:03 850次阅读

    FreeRTOS任务通知简介

    任务通知简介 任务通知在 FreeRTOS 中是一个可选的功能,要使用任务通知的话就需要将宏configUSE_TASK_NOTIFICATIONS 定义为 1。
    的头像 发表于 07-30 11:34 565次阅读