c - 保持微 Controller 外设驱动独立

标签 c device microcontroller drivers

这是我一直在问自己的一个问题。我已经尝试找到关于此的好读物,但我似乎无法找到适合我认为事情应该如何的解决方案。

我认为出于可移植性和维护的原因,驱动程序最好不要相互依赖。但是,有时一个驱动程序可能需要另一个驱动程序提供的功能。例如,I²C 总线可能有超时,这取决于定时器驱动程序。

到目前为止,我一直这样做的方法是简单地将驱动程序#include'ing 到其他驱动程序中,但这不是理想的解决方案。我觉得应该有更好的方法来做到这一点。

我正在考虑添加另一层,这是主应用程序和所有驱动程序之间的一种抽象。然而,这感觉就像是将问题转移到别处而不是解决问题。

我使用过函数指针,但这也使维护成为一件麻烦事。

关于驱动程序的相互依赖性以及如何巧妙地解决这样的问题,是否有任何好的来源或想法?

最佳答案

在大 Controller 上,Cortex M3/4之类的,有无数层是完全没问题的。例如,LPC1822 的 SD 卡接口(interface)包含一个“sdif”驱动程序,处理卡接口(interface)的基本通信和引脚切换。最重要的是“sdmmc”驱动程序,提供更复杂的功能。最重要的是 FAT 系统(使用实时时钟),等等......

相反,在微型 8 位 Controller 上,最好完全没有层。您必须为 i2c 通信设置的那 3 个寄存器是可管理的。不要为了一些微不足道的事情而写上百行代码。在那种情况下,将定时器直接包含在 I2C 例程中是完全可以的。如果您想让您的同事更容易理解您的程序,请花时间编写好的评论和文档,而不是将所有内容封装在函数和抽象层中。

当您受到资源限制并且您的程序也不是那么大时,不要为了获得一致的层而给自己带来太多开销。图层适用于大型复杂软件。在嵌入式计算中,有时最好保持横向依赖关系,而不是编写不适合闪存空间的庞大库。

关于c - 保持微 Controller 外设驱动独立,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30191871/

相关文章:

c结构问题

在某些设备上找不到 Android 资源

c# - 如何使用 Onvif 库 c# 获取设备信息?

ipad - Xcode 4.2 未检测到设备(ios6)

embedded - 微 Controller 环境中的原子操作是什么?

c - SQLite C API 如何将查询输出保存到字符串

c - 解码和理解汇编代码

c - 数独求解 - 在回溯中跳过舞台

c - 是否可以将 char 中的位映射到 Short 中的任意位?

数组值的 Char 数组到指针数组