参考链接:
lipeionline
strongerHuang
天山脚下
最近在看一份公司代码里面用到了很多HOOK函数(钩子函数),就想研究一下RTOS中钩子函数的含义及用途。
钩子与回调:
- 钩子实际上是一个处理消息的程序段,通过系统的调用,把它挂入系统。每当特定的消息发出,在没有到达目的的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
- 回调函数其实是调用者将回调函数的指针传递给了调用函数,当调用函数执行完毕后,通过函数指针来调用回调函数。
钩子函数是操作系统中都会具备的功能,需要使用就自己编写函数中的具体内容,如果不需要就不用管它**
FreeRTOS中的钩子:
FreeRTOS中的Hook函数也可以在"FreeRTOSConfig.h"中进行裁剪:
#define configUSE_IDLE_HOOK 0
*空闲任务钩子函数
*由于RTOS中每个时刻都必须有任务在运行所以空闲任务函数不可堵塞和挂起
*(它本身优先级最低所有不悔和*其他任务冲突)
#define configUSE_IDLE_HOOK 0
*时间片钩子函数,xTaskIncremenTick()会调用此钩子函数。
*此钩子函数最终会被节拍中断服务函数调用,
*对于STM32来说就是滴答定时器中断服务函数。
#define configUSE_MALLOC_FAILED_HOOK 0
*内存申请失败钩子函数,
*当使用函数pvPortMalloc()申请内存失败的时候就会调用此钩子函数。
#define configUSE_DAEMON_TASK_STARTUP_HOOK
*守护(Daemon)任务启动钩子函数,守护任务也就是定时器服务任务