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