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

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

3天内不再提示

5个使用带有中断的回调的技巧

PCB线路板打样 来源:LONG 2019-08-09 09:18 次阅读

回调是对更高级别软件传递到函数的可执行代码的引用。这些回调能够极大地提高嵌入式软件的可移植性和重用性,但是根据它们的定义,它们需要使用函数指针,如果不仔细使用,可能会非常危险。以下是在嵌入式系统中安全地创建和使用回调的五个技巧,特别是将它们与中断一起使用。

技巧1 -创建集合或注册方法- 回调是最常见的是将函数指针传递给函数,但它们也可以在便携式系统中用于设置将由中断服务例程(ISR)调用的函数。当中断触发时,中断处理程序将包含对应该执行的函数的引用。为了以可重用的方式设置被调用的函数,创建允许回调函数向模块注册的接口会很有帮助。创建寄存器或集合函数允许ISR处理程序是通用的,封装的,甚至可以编译为外设库的一部分。中断的可执行函数将在运行时设置。

技巧2 -将回调初始化为NULL或默认- 创建包含回调寄存器或设置功能的外设驱动程序接口是创建可移植中断的重要一步。但是有一个问题:如果回调永远不会被注册但是中断变为启用然后触发会发生什么?中断服务程序需要某种方式来判断是否已注册回调函数。提供此类验证的最简单方法是首先将回调函数指针初始化为NULL。在ISR中对NULL进行简单检查将阻止任何处理程序执行。使用NULL的另一种方法是初始化指向通用和空中断处理程序的指针。当未初始化的中断回调被触发时,默认处理程序将运行。

技巧3 -使用前验证回调- 将回调指针的初始值设置为NULL或通用处理程序允许中断验证中断处理程序是组。但是,在使用函数指针时,首先要确认内存中引用的位置不是NULL并且确实存在于系统中是一个好主意。函数指针可能非常危险,在进行调用之前应注意确保指向的位置有效。

提示4 -使用回调向较低级别的固件添加功能- 回调函数对于在通用和应用程序中向较低级别驱动程序和应用程序代码添加功能非常有用特定的方式。为了生成松散耦合且具有高内聚性的固件,开发人员可以通过使用回调将中断向量和对其他外围模块的引用传递到驱动程序中。回调允许开发人员在设计时添加特定于应用程序的功能,而无需不断修改驱动程序代码以获得所需的行为。可以通过这种方式使用回调来生成非常干净,可移植且可重复使用的固件和接口。

提示5 -创建抽象回调函数- 回调函数通常需要采用参数数量未知,它们可能会也可能不会返回数据,具体取决于应用程序的需求。然而,开发人员的目标是编写抽象的回调函数。对于与中断相关的回调,其中回调只是作为中断服务程序的一部分被调用,该函数可以获取void参数并返回void。需要与应用程序共享的任何数据都将以与中断相同的方式处理。对于可能与错误处理或其他自定义功能相关的驱动程序的回调,处理参数和返回值的最简单方法是传递指针并返回指针。

最后的想法

回调可以在嵌入式系统中找到广泛的用途,特别是在开发便携式和可重复使用的固件时。本文提供了五个开发人员如何考虑和实现中断回调的示例,但它们只是其中的一小部分。

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

    关注

    17

    文章

    2968

    浏览量

    21646
  • 华强PCB
    +关注

    关注

    8

    文章

    1831

    浏览量

    27717
  • 华强pcb线路板打样

    关注

    5

    文章

    14629

    浏览量

    42975
收藏 人收藏

    评论

    相关推荐

    函数小结

    作用: 方便层与层的隔离,方便系统功能的扩展,比如编写一比较函数,通过方法编写,可以将应用层的比较函数实现无限制类型的数据比较,
    发表于 07-05 01:51

    函数和中断处理函数的关系

    结论看完本文,大家可能对函数和中断处理函数的关系产生了疑问。其实是这样的,单片机每完成接收一字符,就会进入一次中断处理函数,而在
    发表于 08-13 08:34

    如何确定中断函数的函数名

    问题有通用的解法。下面以ADC1为例,来查找它的中断函数。首先打开CubeMX生成的代码,找到所有中断函数入口的C文件首先需要编译一下
    发表于 12-06 06:21

    怎么才能在中断函数里用延时呢?

    中断函数里不可以用 rt_thread_mdelay,怎么才能在函数里用延时呢?
    发表于 04-20 09:32

    怎样去解决外部中断函数执行错误的问题呢

    我想问个事,正在使用外部中断。配置好引脚,绑定中断函数。一开始为了验证编程正确,能进入
    发表于 08-22 14:22

    详解java 机制

    代码示例 接下来看一下的代码示例,代码模拟的是这样一种场景:老师问学生问题,学生思考完毕回答老师。 首先定义一接口,只有一
    发表于 09-28 13:14 0次下载

    LabWindows/CVI 程序 函数设计

    函数是系统框架设计中非常重要的一种手段,所谓函数(callback )是指一通过函数指针调用的函数。
    发表于 05-03 16:54 1.1w次阅读
    LabWindows/CVI 程序 <b class='flag-5'>回</b><b class='flag-5'>调</b>函数设计

    函数的详细资料说明

    异步事件的处理,首先将异步事件发生时需要执行的代码编写成一函数,并将该函数注册成为函数,这样当该异步事件发生时,系统会自动调用事先注册好的
    发表于 02-28 08:00 6次下载
    <b class='flag-5'>回</b><b class='flag-5'>调</b>函数的详细资料说明

    STM32Cube HAL库中断处理机制 以及函数实现原理

    STM32Cube HAL库中断处理机制,以及函数实现原理
    的头像 发表于 03-03 14:01 1.3w次阅读

    C语言函数的函数

    ,如果过后再执行,则称之为异步函数就是一通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一
    的头像 发表于 09-11 09:57 4097次阅读

    HAL库中断处理以及相关的函数

    驱动的开发时间,把重心放在应用代码上。   但是,STM32CubeMX只是生成了底层驱动的初始化代码。所以,我们还需要掌握:应用层代码如何调用HAL库函数(API接口),以及HAL库中断处理机制等相关知识。  HAL库牵涉的内容较多,下面简单描述一下HAL库中断处理,以
    的头像 发表于 01-07 11:46 9371次阅读
    HAL库<b class='flag-5'>中断</b>处理以及相关的<b class='flag-5'>回</b><b class='flag-5'>调</b>函数

    STM32编程时,如何确定中断函数的入口

    问题有通用的解法。下面以ADC1为例,来查找它的中断函数。首先打开CubeMX生成的代码,找到所有中断函数入口的C文件首先需要编译一下
    发表于 11-23 18:06 13次下载
    STM32编程时,如何确定<b class='flag-5'>中断</b><b class='flag-5'>回</b><b class='flag-5'>调</b>函数的入口

    根据机制注册事件并处理VI

    通过事件注册函数(Register Event Callback)注册一VI,在事件发生时会运行该回
    的头像 发表于 11-24 09:15 2193次阅读

    C语言|函数的不同用法

    函数是高级操作技巧,也是日常项目中常常使用到的技能。之所以说函数是高级操作技巧,是因
    发表于 07-10 10:34 1254次阅读

    函数(callback)是什么?函数的实现方法

    函数是一种特殊的函数,它作为参数传递给另一函数,并在被调用函数执行完毕后被调用。函数通常用于事件处理、异步编程和处理各种操作系统和
    发表于 03-12 11:46 2700次阅读