这是我一直在问自己的一个问题。我已经尝试找到关于此的好读物,但我似乎无法找到适合我认为事情应该如何的解决方案。
我认为出于可移植性和维护的原因,驱动程序最好不要相互依赖。但是,有时一个驱动程序可能需要另一个驱动程序提供的功能。例如,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/