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

    文章

    4555

    浏览量

    66736
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61345
  • HOOK
    +关注

    关注

    0

    文章

    15

    浏览量

    8309
收藏 人收藏

    评论

    相关推荐

    oracle配置文件类型关联

    Oracle是一种业界领先的关系型数据库管理系统,它在大型企业中被广泛使用。Oracle的配置文件对于数据库的稳定运行和性能优化至关重要。在这篇文章中,我们将详细讨论Oracle的一些重要配置文件
    的头像 发表于 12-06 10:17 222次阅读

    php的配置文件是什么

    PHP的配置文件是一种用于配置PHP解释器的文本文件。它包含了一系列的指令和选项,用于影响PHP的行为和性能。通过修改配置文件,可以改变PHP解释器的默认行为,从而满足不同的需求。 在
    的头像 发表于 12-04 15:55 793次阅读

    zookeeper的核心配置文件是什么

    Zookeeper是一个常用的分布式协调服务,它被广泛应用于大型分布式系统中。Zookeeper的核心配置文件是zoo.cfg,它包含了Zookeeper服务器的各种配置参数,可以通过修改这些参数
    的头像 发表于 12-04 10:33 276次阅读

    springboot的全局配置文件有几种

    Spring Boot是一种快速开发框架,其通过提供配置文件来实现对应用程序的配置。全局配置文件在Spring Boot中起着非常重要的作用,可以用于配置各种不同的属性,包括数据库连接
    的头像 发表于 12-03 15:28 478次阅读

    linux修改网卡ip配置文件

    Linux是一种开源的操作系统,因此,它给用户提供了很高的自由度,可以根据个人需要进行各种定制和配置。其中,修改网络接口配置文件是常见的操作,可以通过修改网卡ip配置文件来设置网络接口的IP地址
    的头像 发表于 11-17 10:51 1220次阅读

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳
    的头像 发表于 10-20 15:04 277次阅读
    KT142C语音芯片<b class='flag-5'>配置文件</b>总是不起作用?<b class='flag-5'>配置文件</b>的问题集中归纳

    什么是HOOK函数HOOK函数的用途和用法

    市面上绝大多数操作系统,都存在这样一类API函数接口:HOOK函数(也叫钩子函数)。
    发表于 09-13 09:31 747次阅读
    什么是<b class='flag-5'>HOOK</b><b class='flag-5'>函数</b>?<b class='flag-5'>HOOK</b><b class='flag-5'>函数</b>的用途和用法

    空闲任务钩子函数详解

    空闲任务钩子函数详解 1、钩子函数 FreeRTOS中有多个钩子函数钩子函数类似回调函数,当某
    的头像 发表于 07-30 10:57 610次阅读
    空闲任务<b class='flag-5'>钩子函数</b>详解

    配置文件选择器的蓝牙秒表

    电子发烧友网站提供《带配置文件选择器的蓝牙秒表.zip》资料免费下载
    发表于 07-13 09:16 0次下载
    带<b class='flag-5'>配置文件</b>选择器的蓝牙秒表

    自定义蓝牙低功耗配置文件

    自定义蓝牙低功耗配置文件
    发表于 07-06 19:24 0次下载
    自定义蓝牙低功耗<b class='flag-5'>配置文件</b>

    教程 3:自定义配置文件 gatt cmd 示例

    教程 3:自定义配置文件 gatt cmd 示例
    发表于 07-06 18:50 0次下载
    教程 3:自定义<b class='flag-5'>配置文件</b> gatt cmd 示例

    教程 2:添加特征-自定义配置文件创建

    教程 2:添加特征 - 自定义配置文件创建
    发表于 07-06 18:50 0次下载
    教程 2:添加特征-自定义<b class='flag-5'>配置文件</b>创建

    教程 3:构建自定义配置文件

    教程 3:构建自定义配置文件
    发表于 07-06 18:49 0次下载
    教程 3:构建自定义<b class='flag-5'>配置文件</b>

    教程 2:自定义配置文件示例

    教程 2:自定义配置文件示例
    发表于 07-04 20:50 0次下载
    教程 2:自定义<b class='flag-5'>配置文件</b>示例

    基于libconfig进行配置文件解析

    本文介绍基于libconfig进行配置文件解析
    的头像 发表于 06-08 10:18 840次阅读
    基于libconfig进行<b class='flag-5'>配置文件</b>解析