当前位置: 首页 > 文档资料 > freeRTOS 使用教程 >

1.4.11 钩子函数

优质
小牛编辑
133浏览
2023-12-01

空闲任务钩子函数

空闲任务在执行时可以选择是否回调一个钩子函数,空闲任务运行在系统的最低优先级上,因此只有在应用程序任务全部处在阻塞或挂起态时,空闲任务才会得到执行。这使得可以使用空闲任务的钩子函数将系统转入低功耗模式,或者做一些其他任务。

使用空闲任务的钩子函数,需要将configUSE_IDLE_HOOK设置为1.并且,空闲任务钩子函数需要申明为如下原型:

void vApplicationIdleHook( void )

空闲任务的钩子函数在空闲任务执行时得到调用,此时系统中出空闲任务中,没有任何就绪任务,因此,钩子函数中不能调用任何会导致任务阻塞的API。同样,如果应用使用了vTaskDelay()API函数,则空闲任务的钩子函数必须允许周期性的返回。这是因为空闲任务的职责是回收被删除任务的堆栈空间。

节拍中断钩子函数

节拍中断可以选择是否回调一个钩子函数,这个钩子函数允许实现一些周期性的功能。

使用节拍中断钩子函数,需要将configUSE_TICK_HOOK设置为1,同时钩子函数申明为如下原型:

void vApplicationTickHook( void )

这个钩子函数必须很短且占用堆栈空间很少,因为这是在中断中调用的函数,同时,只能调用以FromISR结尾的API函数。

内存分配失败钩子函数

内存的分配机制可以参阅“内存管理”章节。在内存分配失败的时候,可以选择回调一个钩子函数,这就是内存分配失败钩子函数。

使用这个钩子函数,需要设置configUSE_MALLOC_FAILED_HOOK为1,钩子函数的原型为:

void vApplicationMallocFailedHook( void )

栈溢出钩子函数

见“栈溢出检测”章节。

守护任务启动钩子函数

RTOS内核的守护任务(daemon task)与软件定时器服务任务一样,之所以称为守护任务,是因为它不仅仅提供软件定时器服务任务的功能。

使用这个钩子函数,需要将configUSE_DAEMON_TASK_STARTUP_HOOK设置为1,钩子函数原型:

void vApplicationDaemonTaskStartupHook( void )

这个钩子函数会在守护任务首次开始时得到执行,而且只执行一次。这个特性,很适合在这个钩子函数中做一些初始化的任务。