下面讲讲我常用的一种编程方法,就是以模块为单位,在模块内分成硬件抽象层、用户接口层、应用层,欢迎大家发表意见和讨论。
假设要用一个SPI Flash存文件,在不使用文件系统的情况下,我通常的做法如下,其他液晶等模块方法类似。
硬件抽象层:我会建一个SPI_Flash_HAL.C文件,存放SPI Flash芯片与MCU相连接的所有硬件相关代码,例如SPI接口的初始化,使用SPI接口发送数据和读取数据的代码。如果MCU更换或者引脚有变化,只需要修改该文件的代码。硬件抽象层的函数只能被上一层用户接口层调用。
用户接口层: 我会建一个SPI_Flash_API.c文件,存放操作SPI Flash芯片的有关代码,例如擦除一页、编程一页或一个字节、读取一页或一个字节的函数。如果SPI Flash型号有更换,只需修改该文件的代码。用户接口层只能被上一层应用层调用。
应用层: 我会建一个SPI_Flash_APP.c文件,存放文件读取、文件写操作等函数,也就是与文件操作的相关函数。
大家觉得这种方法如何?有什么不足和需要改进的地方? |