我一直在研究一些嵌入式软件。这个软件是分开的 分为两个主要部分。第一个是应用软件和 第二个是一些系统软件。系统软件包括 一组驱动程序和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。
有人可以向我推荐一些好的文件吗? 描述了这种与驱动程序的工作?非常感谢。
答案 0 :(得分:2)
OSI model说话驱动程序应该管理物理层面的通信。
因此驱动程序执行通信设备激活,配置,读取,写入等操作以管理硬件以在总线(CAN)上进行通信。
数据链路层负责管理"协议"在总线上发送和接收的数据。
因此,驱动程序开发人员需要数据链接层开发人员设置当物理层触发特定事件时将被调用的函数(回调)。
换句话说,在您的特定情况下,您必须设置一个回调,根据您的协议管理收到的数据及其特性(结构,时间等......)