FreeRTOS 入门 - 钩子函数

须知

源码版本:10.1.1
文章来源:https://www.jianshu.com/p/6c5cfc0a3e9a

钩子函数简介

钩子函数是操作系统(FreeRTOS)满足某些功能的机制,FreeRTOS调用钩子函数,但钩子函数的实现由开发者(用户)完成。
可以将之理解成回调函数。
大部分的钩子函数都能在“FreeRTOSConfig.h”中通过宏进行剪裁。

FreeRTOS的钩子函数


函数名称:vApplicationIdleHook()
使用条件:
1 在“FreeRTOSConfig.h”中配置“configUSE_IDLE_HOOK” 为 1(可裁剪)
2 实现函数“void vApplicationIdleHook()”


函数名称:vApplicationTickHook()
使用条件:
1 在“FreeRTOSConfig.h”中配置“configUSE_TICK_HOOK” 为 1 (可裁剪)
2 实现函数“void vApplicationTickHook()”


函数名称: vApplicationStackOverflowHook()
使用条件:
1 在“FreeRTOSConfig.h”中配置“configCHECK_FOR_STACK_OVERFLOW” 为 1 或者 2(可裁剪)
2 实现函数“void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )”


函数名称:vApplicationDaemonTaskStartupHook()
使用条件:
1 在“FreeRTOSConfig.h”中配置“configUSE_DAEMON_TASK_STARTUP_HOOK” 为 1 ( 可裁剪 )
2 在“FreeRTOSConfig.h”中配置“configUSE_TIMER” 为 1 ( 可裁剪 )[该钩子函数在Timer任务下实现,故需使能TIMER功能]
2 实现函数“void vApplicationDaemonTaskStartupHook()”

FreeRTOS 钩子函数对应的特点


运行周期:没有其它任务时,一直被调用,调用周期非常短(可以类比main函数中的大循环while(1)一样)
使用细节:
1 如果没有其它的任务优先级和空闲任务相同,那空闲任务钩子函数中不能阻塞或者挂起自身(空闲任务)。
FreeRTOS任何时候都需要有一个任务在运行,否则可能会造成没有任务能够进入运行态。
2 如果其它任务占用的实际比较少,空闲钩子函数将占用大量的系统时间片资源,那么用户可以将一些功能(对时序无要求)在该函数内实现。


运行周期:由“configTICK_RATE_HZ”决定, 一般都设置为 1MS
使用细节:
1 该函数在Tick中断函数中调用,所以该函数的运行时间越短越好,不能加任何delay。
2 该函数调用的周期性很强(1MS),一些定时器计数器(自定义的计数器)可以在该函数里面实现


运行周期:任务的栈溢出时候
使用细节:
1 并非所有的栈溢出都会触发该钩子函数。栈溢出可能会把系统栈溢出检测代码的数据也给破坏掉了,导致栈溢出检测失效,那钩子函数自然无法被调用咯。
2 参数可以知道那个任务的栈溢出


本人还没使用过该功能,后续使用过再补充说明吧

你可能感兴趣的:(FreeRTOS 入门 - 钩子函数)