保持微控制器外设驱动程序独立

时间:2015-05-12 13:08:06

标签: c device microcontroller drivers

这是我一直在问自己一段时间的问题。我已经尝试过很好的阅读,但我似乎无法找到适合我认为应该如何的解决方案。

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

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

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

我使用过函数指针,但这也使维护成为一种新生。

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

1 个答案:

答案 0 :(得分:3)

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

相反,在一个微小的8位控制器上,根本没有层可能更好。您必须为i2c通信设置的这3个寄存器是可管理的。不要写几百行代码来做一些微不足道的事情。在这种情况下,将定时器直接包含在I2C例程中是完全没问题的。如果您希望您的程序对您的同事更容易理解,请花时间编写好的注释和文档,而不是将所有内容封装在函数和抽象层中。

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