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

    文章

    4942

    浏览量

    73165
  • FreeRTOS
    +关注

    关注

    14

    文章

    497

    浏览量

    66372
  • HOOK
    +关注

    关注

    0

    文章

    15

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    如何才能知道英飞凌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

    Profibus DP主站转Modbus TCP网关配置文件制作

    Profibus DP主站转Modbus TCP网关配置文件制作
    的头像 发表于 04-02 13:06 531次阅读
    Profibus DP主站转Modbus TCP网关<b class='flag-5'>配置文件</b>制作

    详解RTOS中的Hook函数

    Hook函数是RTOS中的一个关键特性,通过该函数,用户可以增强对任务管理的控制,定义系统行为。
    的头像 发表于 03-24 16:14 845次阅读

    嵌入式开发避坑指南|FreeRTOS的5个\"反直觉\"小技巧

    512B,但因接收NMEA语句时缓冲区溢出,最终导致系统崩溃。修复后堆栈扩容至1KB 技巧5:配置文件藏着\"隐藏技能\" 冷知识: 修改configTICK_RATE_HZ
    发表于 03-20 13:57

    Web Bluetooth SPP(串行端口配置文件)示例

    电缆替代(Cable Replacement)通常指的是通过无线技术,如低功耗蓝牙(Bluetooth LE)替代传统的有线连接,例如串行端口配置文件(Serial Port Profile,简称SPP)。
    的头像 发表于 02-28 09:40 1081次阅读

    DLPC3478怎么去做ini配置文件和firmware呢 ?

    你好我们现在是用其他厂商的芯片做的开发板加上dlpc3478 2005dmd3010,我们不是官网那个evm,我们要自己开发我们怎么去做ini配置文件 和firmware呢 ?之后我们是用特殊
    发表于 02-24 06:35

    如何导出交换机的配置文件

    在网络管理中,导出交换机的配置文件是一项关键任务,它有助于备份、审计、迁移或恢复网络配置。本文将详细介绍如何导出交换机配置文件,涵盖多种方法,适用于不同场景和需求。文章内容将围绕几种常见的导出方法展开,包括通过命令行接口(CLI
    的头像 发表于 02-02 17:20 6505次阅读

    stdio.h实现了printf函数?

    我们平时包含的 stdio.h文件,里面是不是实现了 printf 函数? 为什么会有这个疑问?因为每次使用 printf,就得包含 stdio.h ,这就导致很多同学误以为,st
    的头像 发表于 12-18 10:28 877次阅读

    解析$nextTick魔力,为啥大家都爱它?

    更新后的 DOM。 由于vue的试图渲染是异步的,生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中,原因是在created()钩子函数执行的时候
    的头像 发表于 12-17 10:02 838次阅读
    解析$nextTick魔力,为啥大家都爱它?