我一直在研究一些嵌入式软件。该软件分为两个主要部分。第一个是应用程序软件,第二个是一些系统软件。系统软件由一组驱动程序和RTOS组成。我一直在开发应用程序部分,并且一直在使用准备好的驱动程序。在驱动程序中,还有用于CAN通信的驱动程序。其中一项功能具有以下界面
result_t can_set_receive_callback (can_receive_callback_t cb);
除此功能外,还有以下指向函数的指针的定义
typedef void (*can_receive_callback_t) (can_message_t msg);
我在了解如何使用驱动程序功能时遇到问题。我知道我必须使用以下接口定义一些功能
void my_function (can_message_t m);
我也知道上面定义的函数就是所谓的回调函数。但是我不知道为什么我必须定义回调函数。
为什么不能在没有传递函数指针作为参数的情况下简单地调用驱动程序函数?
这是否意味着我定义的回调函数“说”如何处理收到的消息?对于驱动程序开发人员未知的信息是什么?
我的意思是接收到的消息是由准备好的中断服务程序处理的,但是所有提到的功能看起来都不像是ISR。
谁能给我参考一些好的文档,其中描述了与驱动程序的这种类型的工作?非常感谢。
使用OSI模型的驱动程序应该在物理级别上管理通信。
因此,驱动程序执行通信设备的激活,配置,读取,写入等操作,以管理硬件在总线(CAN)上进行通信。
数据链路层负责管理在总线上发送和接收的数据的“协议”。
因此,驱动程序开发人员要求数据链路层开发人员设置在特定事件由物理层触发时将调用的函数(回调)。
换句话说,在您的特定情况下,您必须设置一个回调,该回调根据协议的特殊性(结构,时序等)来管理接收到的数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句