c - 带回调函数的驱动程序

标签 c embedded driver can-bus isr

我一直在开发一些嵌入式软件。这个软件分为 分为两个主要部分。第一个是应用软件和 第二个是一些系统软件。系统软件组成 驱动程序和 RTOS 集。我一直在开发应用程序部分 我一直在使用准备好的驱动程序。司机中还有 CAN 通信驱动程序。其中一个函数具有以下功能 界面

result_t can_set_receive_callback (can_receive_callback_t cb);

除了这个函数之外,还有以下指针定义 功能

typedef void (*can_receive_callback_t) (can_message_t msg);

我无法理解如何使用驱动程序功能。我知道 我必须使用以下接口(interface)定义一些函数

void my_function (can_message_t m);

我还知道上面定义的函数就是所谓的回调函数。 但我不知道为什么我必须定义回调函数。

为什么不能在没有函数指针作为参数传递的情况下简单地调用驱动程序函数?

这是否意味着我定义的回调函数“说”如何处理收到的消息?驱动程序开发人员不知道哪些信息?

我的意思是接收消息是 由准备好的中断服务例程处理,但没有提到 函数看起来像 ISR。

任何人都可以向我推荐一些好的文档吗? 描述了这种类型的驱动程序工作吗?多谢。

最佳答案

OSI model说话的司机应该在物理层面上管理通信。

因此驱动程序执行通信设备激活、配置、读取、写入等来管理总线 (CAN) 上通信的硬件。

数据链路层负责管理总线上发送和接收的数据的“协议(protocol)”。

因此,驱动程序开发人员要求数据链路层开发人员设置当物理层触发特定事件时将调用(回调)的函数。

换句话说,在您的具体情况下,您必须设置一个回调来根据您的协议(protocol)及其特性(结构、计时等)管理接收到的数据

关于c - 带回调函数的驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41225058/

相关文章:

c++ - 存储函数指针供以后使用

Java计算MPG错误

linux - 如何编译在 Linux Ubuntu 中使用的驱动程序/内核模块?

c - 如何将整数算术变成 long long?

c - 扫描 double 和字符

c - WinMain 中 hPrevInstance 的作用是什么

检查输入字符串是否由特定字符组成 -> float

c - 嵌入式开发的 Pin Mask 约定

c - 通过UDP协议(protocol)发送巨大的(大约40K字节)数据,怎么可能呢?

PHP pdo 异常 "could not find driver"pgsql