【发布时间】:2016-12-19 14:43:16
【问题描述】:
我一直在研究一些嵌入式软件。这个软件分 分为两个主要部分。第一个是应用软件和 第二个是一些系统软件。系统软件包括 一组驱动程序和 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。
任何人都可以向我推荐一些好的文件吗? 描述了这种类型的司机工作?非常感谢。
【问题讨论】:
-
API 希望您将函数指针传递给您定义的函数。假设您的函数将在您收到 CAN 消息后立即执行。它将由驱动程序调用,而不是由程序员调用,因此称为“回调”。这不是标准化程序,而是您的特定驱动程序所独有的。您必须阅读有关驱动程序的文档以了解使用方法。或者如果没有文档,理解代码。
标签: c embedded driver can-bus isr