钩子函数

1.空闲任务钩子函数

空闲任务的钩子函数 OSIdleTaskHook() , 函数 OSIdleTaskHook() 代码如下:
void OSIdleTaskHook (void)
{
#if OS_CFG_APP_HOOKS_EN > 0u
if (OS_AppIdleTaskHookPtr != (OS_APP_HOOK_VOID)0) {
(*OS_AppIdleTaskHookPtr)();
}
#endif
}

要 使 用 空 闲 任 务 钩 子 函 数 的 话 需 要 将 宏 OS_CFG_APP_HOOKS_EN 1 ,即允许使用空闲任务的钩子函数。当时使能空闲任务的钩子函 数 以 后 每 次 进 入 空 闲 任 务 就 会 调 用 指 针 OS_AppIdleTaskHookPtr 所 指 向 的 函 数 。
打 开 os_app_hooks.c 文 件 , 在 文 件 中 有 个 函 数
App_OS_SetAllHooks() ,函数代码如下:
void App_OS_SetAllHooks (void)
{
#if OS_CFG_APP_HOOKS_EN > 0u
CPU_SR_ALLOC();
CPU_CRITICAL_ENTER();
OS_AppTaskCreateHookPtr = App_OS_TaskCreateHook;
OS_AppTaskDelHookPtr = App_OS_TaskDelHook;
OS_AppTaskReturnHookPtr = App_OS_TaskReturnHook;
OS_AppIdleTaskHookPtr = App_OS_IdleTaskHook;
OS_AppStatTaskHookPtr = App_OS_StatTaskHook;
OS_AppTaskSwHookPtr = App_OS_TaskSwHook;
OS_AppTimeTickHookPtr = App_OS_TimeTickHook;
CPU_CRITICAL_EXIT();
#endif
}
红色代码显示将 App_OS_IdleTaskHook 复制给 OS_AppIdleTaskHookPtr
查 看 os_app_hooks.c 文 件 , 会 发 现 App_OS_IdleTaskHook 是一个函数,代码如下:
void App_OS_IdleTaskHook (void)
{ }
 

想在空闲任务的钩子函数中做一些其他处理的话就需要将程序代码写在 App_OS_IdleTaskHook() 函数中。
注意!在空闲任务的钩子函数中不能调用任何可以是空闲进入等待态的代码,原因很简单, CPU 总是在不停的运行,需要一直工作,不能让 CPU 停下来。在 UCOS 中为了让 CPU 一直工作,在所有应用任务都进入等待态的时候 CPU 会执行空闲任务,我们可以从空闲任务的任务函数 OS_IdleTask() 看出,在 OS_IdleTask() 中没有任何可以让空闲任务进入等待态的代码。如果在 OS_IdleTask() 中有可以让空闲任务进入等待态的代码的话有可能会在同一时刻所有任务 ( 应用任务和空闲任务 ) 同时进入等待态,此时 CPU 就会无所事事了,所以在空闲任务的钩子函数 OSIdleTaskHook() 中不能出现可以让空闲任务进入等待态的代码!这点很重要,一定要谨记!

UCOSIII 中一共有 8 个钩子函数,出了上面讲的空闲任务的钩子函数以外,还有 7 个,分别 为 : OSInitHook() OSStatTaskHook() OSTaskCreateHook() 、 OSTaskDelHook() OSTaskReturnHook() OSTaskSwHook() OSTimeTickHook() 这些钩子函数的使用方法和空闲任务的钩子函数的使用方法类似

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值