程序小白
认证:优质创作者
所在专题目录 查看专题
关于软件的作用域和生命周期的一些理解
浅析RTOS中的钩子函数(HOOK)
RTOS的时间片调度不同处——FreeRTOS与RTT
FreeRTOS中任务间的同步——事件组与全局变量
FreeRTOS的优先级翻转与继承
作者动态 更多
小小调度器——开局default,优雅总藏于细节之中
04-02 09:23
小小调度器——调度器核心的纯C实现
04-01 14:09
小小调度器——原来C代码还能这么写,原作者没少挨打吧!
03-27 15:42
解析由系统库引发的hardfault血案(RT-Thread+ESP32)
2023-07-17 16:04
TINA瞬时现象仿真分析——运放缓冲器振铃
2023-02-28 11:38

浅析RTOS中的钩子函数(HOOK)


什么是钩子函数?


      钩子函数的本质:还是函数,只是多了一个钩子的功能。那什么又是钩子?再去聊钩子就有点断章取义了。还是应该站在钩子函数的应用场景来理解。

      钩子函数在有系统的软件中应用较多,例如我们的FreeRTOS中。系统提供特定的环境上下文空间执行功能。例如在【空闲任务】中执行用户的代码。那这个功能该如何实现呢?


假如这个系统是我写的,也不打算给别人使用,那么……


      那么最简单的方式就是将这部分代码手动添加到空闲函数中。这么做现在用当然没什么问题,但是系统级代码与用户代码的耦合度就会非常高。啥子是高耦合,就是你把你的代码直接嵌入进了系统代码中,假如后续官方(也就是你咯)升级了系统,你在本地也需要同步升级系统源码版本。升级后的代码会直接覆盖原系统代码,而你在空闲函数中添加的用户级代码也就没有了。为了解决这一种情形,于是引入了松耦合的钩子概念。


解决上述问题的办法


      你需要在空闲任务中执行的函数,只需要通过空闲钩子,链接到系统的空闲任务中即可。系统并不关心你的函数在哪里定义,因为他与系统的代码是完全分离的,只是在执行时才会建立联系。这个时候你在升级你的代码时就不会出现系统代码覆盖应用代码的情况。


钩子函数的意义


      系统提供建立钩子函数,将对应的用户定义函数与系统建立应用链接。当系统运行时到相应的环境上下文时,先查找是否有钩子函数连接,如果有,那么转而调用相应的函数。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 4
收藏 3
关注 117
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧