<span style="font-size: 12px; background-color: rgb(255, 255, 255);"> </span><span style="font-size: 12px; background-color: rgb(255, 255, 255);"><span style="font-family:KaiTi_GB2312;">单片机的种类繁多,且架构不同,导致开发周期长,效率低,排错难。本人就深受其苦。由此,需要一种程式化的方法来梳理整个单片机软件系统。</span></span>
在参考有关单片机及c语言的书籍后,暂将普通的单片机程序(不考虑操作系统)分为四个层次。
1、硬件基础层(Hardware Base Layer):该层由生产具体芯片的厂商提供,例如reg51.h头文件和Startup_A51.asm等。一般单片机入门从该层开始。但该层是对具体硬件的描述,仅从该层开发效率低。即使面对相同的芯片,实现的功能不同就有可能会成为编写软件的障碍。
2、硬件抽象层(Hardware Absract Layer):该层如同我们平时用c语言编写的单片机相关函数,如常用的timer_init()、usart_init()、usart_sendData()等。进入单片机编程至今已有两年,回顾写过的这类函数,大部分都是用void作为形参或返回值。这样的函数虽然有了结构化的雏形,但离模块化、功能化还很远。
3、应用程序接口层(Application Interface Layer):一般的单片机程序是没有该层的,有人会有这样的考虑,单片机的RAM和ROM都很有限,过多的函数调用会受到硬件资源的限制,并且实时性变差。但没有这一层级,我们所需实现的综合功能就要直接和硬件打交道,而硬件逻辑和我们所需要的功能逻辑有一定的出入,不兼容的逻辑体系会使开发工程左右为难,因此,这一层的功能便是在受限的硬件逻辑和开发者需要的功能逻辑之间相互转换。如果接口设计良好,对于单片机软件体系的改良是有帮助的。