钩子函数
空闲任务可以选择性地调用应用程序定义的钩子(或回调)函数 — 空闲钩子。 空闲任务以最低优先级运行,
因此只有在没有能够运行的更高优先级的任务时,这种空闲钩子函数才会被执行。 这使的空闲钩子函数成为使处理器进入低功率状态的理想场所 --
每当没有要执行的处理时提供自动节能。
只有 configUSE_IDLE_HOOK 在 FreeRTOSConfig.h 中设置为 1 时,才会调用空闲钩子。 设置后,应用程序必须为钩子函数提供以下原型
:
void vApplicationIdleHook( void );
只要空闲任务正在运行,就会重复调用空闲钩子。 最重要的是,空闲钩子函数不调用任何可能导致其阻塞的
API 函数。 此外,如果应用程序使用 vTaskDelete() API 函数,则必须允许空闲任务钩子定期返回
(这是因为空闲任务负责清理 RTOS 内核分配给已删除任务的资源)。
tick 中断可以选择性地调用应用程序定义的钩子(或回调)函数 — tick 钩子。 tick 钩子提供了一个方便的地方来实现定时器功能
。
只有 configUSE_TICK_HOOK 在 FreeRTOSConfig.h 中设置为 1 时,才会调用 tick 钩子。 设置后,应用程序必须为钩子函数提供以下原型
:
void vApplicationTickHook( void );
vApplicationTickHook() 从 ISR 内执行,因此必须非常短,不使用很多堆栈,并且不调用任何不以
"FromISR" 或 "FROM_ISR" 结尾的 API 函数。
请参阅演示应用程序文件 crhook.c,获取 tick 钩子使用方法。
由 heap_1.c、heap_2.c、heap_3.c、heap_4.c 和 heap_5.c 实现的内存分配方案可以选择性地包含 malloc() 失败钩子(或回调)函数,该函数可以配置为在
pvPortMalloc() 返回 NULL 时被调用。
定义 malloc() 失败钩子将有助于识别由堆内存不足引起的问题,特别是当在 API 函数中调用 pvPortMalloc() 失败时
。
只有 configUSE_MALLOC_FAILED_HOOK 在 FreeRTOSConfig.h 中设置为 1 时,才会调用 malloc 失败钩子。 设置后,应用程序必须为钩子函数提供以下原型
:
void vApplicationMallocFailedHook( void );
请参阅堆栈溢出保护页面,获取详细信息。
RTOS 守护进程任务与定时器服务任务相同。
有时它被称为守护进程任务,
因为该任务现在不仅仅用于服务定时器。
如果 configUSE_DAEMON_TASK_STARTUP_HOOK 在 FreeRTOSConfig.h 中设置为 1 ,
则守护进程任务首次开始执行时,会调用守护进程任务启动钩子
。 如果应用程序包含会从调度器启动后执行中受益的初始化代码,
这将非常有用,允许
初始化代码利用 RTOS 功能。
如果 configUSE_DAEMON_TASK_STARTUP_HOOK 设置为 1 ,则应用程序编写者必须
提供守护进程任务启动钩子函数的实现,且具有以下名称和原型
:
void vApplicationDaemonTaskStartupHook( void );
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.