记:单片机的程序的模块化分层设计

今日有一个Demo需要从STM32移植到51单片机上,移植的过程并不顺利,但是却明白了一些关于模块化设计的东西,之前一直没有学习过这方面知识,纯靠自己摸出来的。

序:

单片机小白一枚,以前写代码都是在单一芯片上使用,从未涉及过移植问题。

也想过要模块化设计,但是当时对模块化的理解是:一个功能算一个模块。比如操作SHT30,比如屏幕之类的。

这样貌似也没什么问题,但是像是点个灯,这种小操作,基本就是那里需要就直接在哪里操作IO口。

还有这功能些模块之间的相互调用问题,非常之混乱。

我一直都只是有“模块”的想法,但是却没有“层”的概念,我这里称为“层”也不知道对不对哈。

 

正文:

现在将程序分为以下几个层:

LIB     库文件层

Hardware     硬件层

Driver   设备层

User            用户代码(应用层)

 

LIB层:此层用于头文件以及一些辅助功能,这些功能代码与硬件无关,与设备无关,只有输入和输出数据的能力;此层的文件只能调用(#include)同层文件。

Hardware层:此层用于直接操作芯片外设,比如I2C、SPI、GPIO等;此层只能调用LIB层和同层文件。

Driver层:此层用于提供设备操作功能,比如OLED屏、SHT30等设备;此层只能调用Hardware、LIB以及同层文件。

User层:此层用于程序主要功能和业务逻辑,比如main函数、显示功能、声光报警等;此层只能调用Driver、LIB以及同层文件。

 

这样一来如果需要移植代码,只需要管实际的接线和Hardware层的重新实现就好了,尽管有些代码显得脱裤子放屁,比如点个灯,我需要先在Hardware层做GPIO的操作,再到Driver层创建LED,最后再到User层去打开灯,但是这样会使得程序结构更加清晰,而且简单的操作有的可以通过宏定义去实现,也不会增加代码量。

posted @ 2024-05-09 11:12  Lin_zzZ  阅读(3)  评论(0编辑  收藏  举报