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

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

3天内不再提示

空闲任务钩子函数详解

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

空闲任务钩子函数详解

1、钩子函数

FreeRTOS中有多个钩子函数,钩子函数类似回调函数,当某个功能(函数)执行的时候就会调用钩子函数,至于钩子函数的具体内容那就由用户来编写。如果不需要使用钩子函数的话就什么也不用管,钩子函数是一个可选功能,可以通过宏定义来选择使用哪个钩子函数,可选的钩子函数如表所示:

图片

钩子函数的使用方法基本相同,用户使能相应的钩子函数,然后自行根据实际需求编写钩子函数的内容,下一节我们会以空闲任务钩子函数为例讲解如何使用钩子函数。

2、空闲任务钩子函数

在每个空闲任务运行周期都会调用空闲任务钩子函数,如果想在空闲任务优先级下处理某个任务有两种选择:

● 在空闲任务钩子函数中处理任务。

不管什么时候都要保证系统中至少有一个任务可以运行,因此绝对不能在空闲任务钩子函数中调用任何可以阻塞空闲任务的 API 函数,比如vTaskDelay(),或者其他带有阻塞时间的信号量或队列操作函数。

● 创建一个与空闲任务优先级相同的任务。

创建一个任务是最好的解决方法,但是这种方法会消耗更多的 RAM

要使用空闲任务钩子函数首先要在 FreeRTOSConfig.h 中将宏 configUSE_IDLE_HOOK 改为1,然后编写空闲任务钩子函数vApplicationIdleHook()。通常在空闲任务钩子函数中将处理器设置为低功耗模式来节省电能,为了与 FreeRTOS 自带的 Tickless模式做区分,这里我暂且将这种低功耗的实现方法称之为通用低功耗模式(因为几乎所有的 RTOS 系统都可以使用这种方法实现低功耗)。这种通用低功耗模式和
FreeRTOS 自带的 Tickless 模式的区别我们通过下图来对比分析一下。

图片

图中有三个任务,它们分别为一个空闲任务(Idle),两个用户任务(Task1 和Task2),其中空闲任务一共有运行了三次,分别为(1)、(2)、(3),其中 T1 到 T12 是 12 个时刻

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

    关注

    5082

    文章

    19104

    浏览量

    304807
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62569
  • FreeRTOS
    +关注

    关注

    12

    文章

    484

    浏览量

    62139
收藏 人收藏

    评论

    相关推荐

    ucosii空闲任务钩子函数App_TaskIdleHook睡眠之后是不是只有唤醒才能执行?

    static u16 cnt = 0;voidApp_TaskIdleHook (void){cnt++; __WFI;}在空闲任务钩子函数增加睡眠指令,发现cnt++计数反而要比系统时间
    发表于 12-31 14:36

    菜鸟求助 u/Cos III 空闲任务钩子函数 数据不会溢出的问题

    1、使用的精英版的官方历程,稍微做了修改,把每次空闲任务钩子函数里num++ 后的值用串口打印了出来,结果发现static int num定义的变量竟然可以超过65535.无法理解。2、还有个
    发表于 01-27 19:34

    Flask中的钩子函数使用

    Flask钩子函数(十一)
    发表于 08-01 07:04

    u/Cos III空闲任务钩子函数static int num定义的变量竟然可以超过65535.

    使用的精英版的官方历程,稍微做了修改,把每次空闲任务钩子函数里num++ 后的值用串口打印了出来,结果发现static int num定义的变量竟然可以超过65535.无法理解。求大神指教
    发表于 03-11 04:37

    FreeRTOS检测堆栈溢出,钩子函数是回调到哪里?

    FreeRTOS中有个宏configCHECK_FOR_STACK_OVERFLOW用来检测堆栈溢出,在检测堆栈溢出后调用钩子函数钩子函数是回调到哪里,,是让他回到检测的地方么。
    发表于 07-28 07:28

    关于钩子函数,在CCS的编译器里有哪几个规则?

    如何对钩子函数的使用进行控制?关于钩子函数,在CCS的编译器里有哪几个规则?
    发表于 04-19 06:09

    为什么在钩子函数中不能使用串口打印函数

    UCOSIII,STM32F107官方移植工程中,钩子函数中不能使用串口打印函数APP_TRACE_INFO(); 未找到原因。
    发表于 08-23 07:14

    【每日一练】第六节:空闲线程及两个常用的钩子函数

    本视频为【每日一练】的第6节学习视频,注:刚开始学习的童鞋请从第一节视频开始打卡哦(本节视频在下面打卡即可)学习任务:1、线程退出后,资源在哪里被回收?(简答)2、可以在调度其钩子函数中查看线程切换(判断)打卡规则详见:第二期【每日一练】来啦,16天入门RT-Thread
    发表于 08-28 19:15

    钩子函数是什么?RT-Thread系统引入钩子函数有何用处

    钩子函数,在线程切换和空闲线程循环中调用。内存钩子函数,在分配或释放内存块时调用。定时器钩子函数,在定时器超时时调用。函数说明rt_err_
    发表于 08-29 15:30

    NANO3.15无法进入空闲线程钩子函数该怎么办

    使用NANO 3.15 keil5 ARMV6编译 芯片STM32F767使用CUBE生成硬件初始化。HAL库使用线程和软件定时器正常。目前想要加入空闲线程钩子函数来运行看门狗喂狗函数。测试发现不进
    发表于 09-07 10:50

    UCOS扩展例程-UCOSIII空闲任务钩子函数的使用

    UCOS扩展例程-UCOSIII空闲任务钩子函数的使用
    发表于 12-14 17:24 31次下载

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

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

    FreeRTOS_005_FreeRTOSConfig.h配置文件(二) HOOK钩子函数

    FreeRTOS_005_FreeRTOSConfig.h配置文件(二)_HOOK钩子函数
    的头像 发表于 03-14 14:04 3394次阅读
    FreeRTOS_005_FreeRTOSConfig.h配置文件(二) HOOK<b class='flag-5'>钩子函数</b>

    实操RT-Thread系统CPU利用率功能添加

    除了在空闲任务可以设置钩子函数,还有可能在任务切换、系统启动、任务创建等等关键的地方设置,当然了,这里的每一个
    的头像 发表于 06-03 11:29 6333次阅读
    实操RT-Thread系统CPU利用率功能添加

    RTOS中钩子函数的用途及用法

    在很多操作系统中,都存在这样一类API函数接口:HOOK函数(也叫钩子函数)。
    的头像 发表于 10-23 16:25 233次阅读
    RTOS中<b class='flag-5'>钩子函数</b>的用途及用法