本报讯 柬埔寨王宫事务部9月24日发布通告称,最受柬埔寨民众尊敬、爱戴的诺罗敦·莫尼列·西哈努克王太后陛下已年过花甲,目前正在北京的医院接受悉心治疗。...
2025-09-25 8
回调是对高级软件传递给函数的可执行代码的引用。这些回调有能力极大地提高嵌入式软件的可移植性和重用性,但是根据它们的定义,嵌入式开发人员需要使用函数指针,如果不小心使用,可能会非常危险。以下是在嵌入式系统中安全创建和使用回调的五个技巧,尤其是在中断中使用回调时。
技巧1——创建设置或注册方法—回调通常被视为传递到函数中的函数指针,但它们也可以在可移植系统中用于设置将由中断服务例程(ISR)调用的函数。当中断触发时,中断处理程序将包含一个应该执行的函数的引用。中断的可执行函数将在运行时设置。
技巧2——将回调初始化为空值或默认值—创建一个包含回调寄存器或设置函数的外设驱动程序接口是创建可移植中断的一个重要步骤,但是有一个问题:如果一个回调没有被注册,但是中断被激活并触发了,会发生什么呢?中断服务例程需要某种方式来判断回调函数是否已经注册,提供这种验证的最简单的方法是首先将回调函数指针初始化为NULL。在ISR中对NULL进行简单的检查将会阻止任何处理程序的执行。嵌入式开发人员使用NULL的一种替代方法是将指针初始化为一个通用的空中断处理程序。当一个未初始化的中断回调被触发时,默认的处理程序将会运行。
技巧3——使用前验证回调—将回调指针的初始值设置为 NULL 或通用处理程序允许中断验证是否已设置中断处理程序。但是,在使用函数指针时,首先验证内存中引用的位置不是 NULL 并且确实存在于系统中。
技巧4——使用回调向较低级别的固件添加功能—回调函数对于以通用和特定于应用程序的方式向低级驱动程序和应用程序代码添加功能非常有用。为了生产松耦合和高内聚的固件,开发人员可以通过使用回调将中断向量和对其他外围模块的引用传递到驱动程序中。回调允许嵌入式开发人员在设计时添加应用程序特定的功能,而不必不断修改驱动程序代码来获得所需的行为。回调可以用这种方式产生非常干净,可移植和可重用的固件和接口。
技巧5——创建抽象回调函数—回调函数通常需要接受未知数量的参数,它们可能返回数据,也可能不返回数据,这取决于应用程序的需要。然而,开发人员的目标是编写抽象的回调函数。对于与中断相关的回调,回调只是作为中断服务例程的一部分被调用,函数可以接受一个void参数并返回void。任何需要与应用程序共享的数据都将以与中断相同的方式处理。对于可能与错误处理或其他自定义功能相关的驱动程序回调,处理参数和返回值的最简单方法是传递一个指针并返回一个指针。
最后的想法
回调在嵌入式系统中有广泛的用途,尤其是在开发可移植和可重用的固件时。本文提供了五个例子,讲明嵌入式开发人员如何考虑和实现中断回调,但它们只是其中的一小部分。
相关文章
本报讯 柬埔寨王宫事务部9月24日发布通告称,最受柬埔寨民众尊敬、爱戴的诺罗敦·莫尼列·西哈努克王太后陛下已年过花甲,目前正在北京的医院接受悉心治疗。...
2025-09-25 8
自从特鲁多政府在美国的怂恿下,对中国产电动汽车、钢铁和铝产品加征高额关税以来,加拿大与中国的关系就如同滑下了拼命向下的轨道。中国这一举动无疑是给加拿大...
2025-09-25 7
据报道,近年来的中美博弈已不仅仅体现在贸易战、科技封锁和军事对抗等领域,金融和资本市场的较量同样成为了全球关注的焦点。中国连续大规模减持美国国债,特别...
2025-09-25 7
近日,四川成都一自行车车迷赛中发生选手集体摔车事故,一名年轻男选手疑似膝盖伤情严重,被传“膝盖骨没了”,引发众多网友热议。日前,成都市体育局回应新黄河...
2025-09-25 5
【环球网快讯】据《以色列时报》25日最新消息,以色列军方宣布,一名以色列国防军士兵在加沙城遭巴勒斯坦伊斯兰抵抗运动(哈马斯)狙击手袭击身亡。 报道称,...
2025-09-25 7
花费不菲入住五星级酒店 半夜却无奈躲在阳台 究竟发生了什么? 近日 30岁的孙先生反映 夫妻俩入住上海星河湾酒店后 自己眼角膜受伤,视物不清 妻子肺部...
2025-09-25 5
每经编辑|何小桃 据新黄河9月24日报道,记者近日获悉,浙江省绍兴市轨道交通2号线9月13日晚曾发生一起地铁列车撞上保洁员致多人伤亡的安全事故。 多名...
2025-09-25 5
资料图:上海绿捷 本文综合上观新闻、正观新闻、采招网、21世纪经济报道等 昨天(9月23日)深夜,针对公众关注的“臭味学生餐”事件,上海官方发布通报称...
2025-09-25 6
发表评论