上一篇 下一篇
内存泄漏

钩子函数

1)说明

“钩子函数”(Hook Function)本质上是:在系统预留的特定位置,由用户自己实现、由系统自动调用的函数 即这个函数的声明、调用,系统已经安排好了,但是函数内容是空的,需要用户自己编写。系统在合适时机 “钩住” 你写的函数执行 —— 这就叫 钩子函数

钩子函数的核心特征:

特征 说明
由系统调用 不是你主动调用
你来实现 系统只声明
固定名字 必须按规定命名
固定时机 在特定事件发生时执行

2)举例

在 FreeRTOS 中,钩子函数非常典型。比如:

  • ① 空闲任务钩子函数(Idle Hook)

    在 task.h 文件中,有如下本就有的代码:

    #if ( configUSE_IDLE_HOOK == 1 )
    /**
     * 应用程序空闲钩子函数由空闲任务调用。
     * 这允许应用程序设计者添加后台功能,而无需创建单独任务所带来的开销。
     * 注意:vApplicationIdleHook()在任何情况下都不得调用可能导致阻塞的函数。
    **/
        void vApplicationIdleHook( void );
    #endif
    

    用户可以自定义:

    void vApplicationIdleHook(void)
    {
        // 这里写你想在空闲时执行的代码
    }
    

    当系统没有任务可运行时,空闲任务会自动调用它。前提是:

    #define configUSE_IDLE_HOOK 1
    
  • ② Tick 钩子函数(Tick Hook)

    在 task.h 文件中,有如下本就有的代码:

    #if  ( configUSE_TICK_HOOK != 0 )
    
    /**
     * 该钩子函数在系统时钟节拍处理程序中被调用,且在所有操作系统相关工作完成后执行。
    **/
        void vApplicationTickHook( void );
    
    #endif
    

    用户可以自定义:

    void vApplicationTickHook(void)
    {
        // 每次 tick 中断都会调用
    }
    

    前提是:

    #define configUSE_TICK_HOOK 1
    
  • … 还有很多 …


Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐