0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS_005_FreeRTOSConfig.h配置文件(二) HOOK钩子函数

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-14 14:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

HOOK介绍

很多初学者(包括我在内)初学的时候对HOOK函数完全就是懵的,不知道是什么东西。如果需要理解本文说的HOOK函数相关配置,就需要理解什么是HOOK函数。

HOOK函数:HOOK翻译出来的意思是钩子、钩住,所以也叫“钩子函数”,可以理解为钩住你想要的东西。

HOOK函数实际上是操作系统消息处理机制的程序段,通过系统调用,把它挂入系统。

HOOK函数可以说是操作系统必有的一类函数,像Windows、Linux以及我前面讲述过的UCOS嵌入式实时操作系统都有这类钩子函数。

HOOK函数是提供给开发者的函数,实现自己想要实现的东西。比如:RTOS中IDLE空闲任务就提供了一个HOOK函数,我想要对其计数,计数到1W,我就打印出来(就是实现了自己想要实现的东西)。

总之,初学者初学的时候不一定要完全掌握和精通操作系统里面的每一项东西,但一定要了解。

好比我在微信公众号里分享的文章,你不必认真去分析或深入理解。但有必要了解,不要等遇到了问题,再反过来问我之前分享过的问题!

HOOK配置

上面对HOOK描述了那么多,相信大家对HOOK有一定的了解,下面来讲述在“FreeRTOSConfig.h”中与HOOK相关的配置。

1.configUSE_IDLE_HOOK

是否定义IDLE空闲任务HOOK函数

配置为0:不定义

配置为1:定义

configUSE_IDLE_HOOK是系统设计之初就有的,必须在“FreeRTOSConfig.h”中宏定义。不像有些宏定义可以不在“FreeRTOSConfig.h”中定义,因为它们在“FreeRTOS.h”有判断是否定义了,如果没有定义,会有一个默认的定义。

比如:上一篇文章说的“configUSE_MUTEXES”,可以不在“FreeRTOSConfig.h”中定义,而在“FreeRTOS.h”中可以看到如下一段代码:

#ifndef configUSE_MUTEXES

#define configUSE_MUTEXES 0

#endif

也就是说,如果没有定义,它会默认给你定义。

回来说configUSE_IDLE_HOOK,在task.c文件中,有如下一段代码:

#if (configUSE_IDLE_HOOK == 1)

{

extern void vApplicationIdleHook(void);

vApplicationIdleHook();

}

#endif

意思是说:如果你配置configUSE_IDLE_HOOK为1,那么你就必须要实现“vApplicationIdleHook()”这个函数,否则编译会出错。初学者默认不定义该函数。

2.configUSE_TICK_HOOK

是否定义TICK滴答HOOK函数

配置为0:不定义

配置为1:定义

在task.c文件中的xTaskIncrementTick函数下可以看见如下代码:

#if (configUSE_TICK_HOOK == 1)

{

if(uxPendedTicks == (UBaseType_t) 0U)

{

vApplicationTickHook();

}

else

{

mtCOVERAGE_TEST_MARKER();

}

}

#endif

提示:xTaskIncrementTick函数是在PendSV_Handler中断函数中被调用的。因此,vApplicationTickHook()函数执行的时间必须很短才行。

3.configCHECK_FOR_STACK_OVERFLOW

是否定义栈溢出HOOK函数

配置为0:不定义

配置为1:定义

这个配置比较关键和重要,特别对于复杂的系统设计,代码量比较大那种工程,使用该功能,可以帮你分析是否有内存越界的情况。

4.configUSE_MALLOC_FAILED_HOOK

是否定义内存分配失败HOOK函数

配置为0:不定义

配置为1:定义

我们创建任务、信号量、队列等都需要耗费系统堆栈,如果我们对系统总共分配堆栈不够多,在创建多个任务或队列时容易分配失败,这个时候就起到一个提示作用。

5.configUSE_DAEMON_TASK_STARTUP_HOOK

是否定义守护进程HOOK函数

配置为0:不定义

配置为1:定义

通过分析软件源代码可以发现,这个HOOK函数是在TIMER任务下面实现的,所以需要配置configUSE_TIMERS为1。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4981

    浏览量

    74483
  • FreeRTOS
    +关注

    关注

    14

    文章

    501

    浏览量

    67350
  • HOOK
    +关注

    关注

    0

    文章

    15

    浏览量

    8861
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何为时间同步网络选择合适的 PTP 配置文件

    构建高精度时间同步网络时,如何正确配置 PTP 配置文件(PTP Profile)?本文深入解析通用、电信及媒体配置文件的差异,助您实现纳秒级同步。立即阅读指南!
    的头像 发表于 04-30 17:45 5136次阅读
    如何为时间同步网络选择合适的 PTP <b class='flag-5'>配置文件</b>

    LIN堆栈配置文件如何生成?

    你好! 我正在尝试在MCUXpresso IDE中为没有专用演示的电路板创建一个LIN堆栈应用程序。我看到对于其他板子,“源”目录中已经包含了一些 lin_cfg.c/.h 文件,但我不知道如何生成
    发表于 04-27 07:42

    [VirtualLab] 配置文件编辑工具:速度与精度

    配置文件编辑工具,用于定制光场数据采样的设置,在光通过光学系统传播过程中使用 配置文件编辑和运行功能区 **速度与精度 - 工具 ** **奈奎斯特周期评估精度等级 ** 场尺寸估计的功率部分 为了估算一
    发表于 04-14 08:29

    以“网关中间件”实现充电桩OCPP 1.6安全配置文件无缝升级

    深圳惠志科技有限公司推出的OCPP安全代理网关采用"网关中间件"架构,在充电桩与云端CSMS之间透明地部署,实现充电桩OCPP 1.6协议安全配置文件从Profile 0/1到Profile 2/3的无缝升级,而无需触及桩端硬件与固件。
    的头像 发表于 02-04 11:56 1227次阅读
    以“网关中间件”实现充电桩OCPP 1.6安全<b class='flag-5'>配置文件</b>无缝升级

    配置文件损坏可能会带来哪些安全风险?

    配置文件损坏不仅会导致电能质量在线监测装置功能异常,还可能引发 数据安全、运维安全、设备安全、合规安全 四大类安全风险,尤其在电力系统、工业配电等关键场景中,风险可能传导至电网或生产系统,造成
    的头像 发表于 12-10 16:37 634次阅读
    <b class='flag-5'>配置文件</b>损坏可能会带来哪些安全风险?

    rtthread线程出现异常了,有没有什么钩子函数能够定义用户操作?

    线程出现异常了,有没有什么钩子函数能够定义用户操作????
    发表于 09-18 06:36

    在RT-Thread中编译钩子函数出现乱码问题和为什么打开终端会弹出外部终端?

    当然在Xshell8中显示钩子函数打印的内容是不会出现乱码的,就是在RT-Thread中内部打开终端显示内容会出现问题,不知道什么原因,求大佬help #include #define
    发表于 09-15 07:09

    求助各位大佬,关于如何读写编码格式为UTF-16LE的配置文件

    如题,小白求助各位大佬,要怎么实现对编码为UTF-16LE的配置文件的读写。 使用读配置文件的vi读不出内容。 使用读文本的方式写入异常,文件的编码变成UTF-8且内容也不对。
    发表于 09-14 12:54

    【RA-Eco-RA6M4开发板评测】2、移植FreeRTOS_CLI和添加自定义指令

    。 在配置中设置自定义的FreeRTOSConfig.h文件路径,可以在工程中使用自定义的FreeRTOSConfig.h文件
    发表于 07-23 11:34

    CYW20721 是否支持 HFP、HSP 和 A2DP 配置文件

    我打算使用 CYW20721,以替换我们产品中已经过时的蓝牙模块. 我很想知道 CYW20721 是否支持 HFP、HSP 和 A2DP 配置文件
    发表于 07-04 07:28

    哪些芯片支持蓝牙经典 A2DP 配置文件和 LE 音频?

    哪些芯片支持蓝牙经典 A2DP 配置文件和 LE 音频?
    发表于 07-01 06:41

    CYW920820M2EVB-01开发套件可以与蓝牙的免提配置文件一起使用吗?

    我有英飞凌 CYW920820M2EVB-01 开发套件,我想将它与蓝牙的免提配置文件一起使用。 是否可以。 该套件是否支持该配置文件? 我无法在任何地方找到该套件支持的配置文件。 如果是,那么我可以得到一些关于如何执行此操作的
    发表于 06-30 06:15

    如何才能知道英飞凌Bluetooth®产品支持哪种Bluetooth®配置文件和版本?

    如何才能知道英飞凌Bluetooth®产品支持哪种Bluetooth®配置文件和版本? A2DP、AVRCP、HSP、HFP 等 是否有一个网页或文档解释每个设备支持哪些配置文件和版本? 目前我想了解以下设备特别支持的配置文件
    发表于 06-27 06:04

    【RA4L1-SENSOR】4、移植FreeRTOS-CLI

    方式为动态分配。 在配置中设置自定义的FreeRTOSConfig.h文件路径,可以在工程中使用自定义的FreeRTOSConfig.h文件
    发表于 06-26 22:30

    配置文件的差异介绍

    配置文件的差异 FA模型应用在config.json文件中描述应用的基本信息,一个应用工程中可以创建多个Module,每个Module中都有一份config.json文件。config.json由
    发表于 06-05 06:50