STM32软件架构
1、架构设计的意义
(1)应用代码逻辑清晰、避免代码冗余;
(2)代码通用,方便软件移植;
(3)最大限度做到无需大量修改即可复用;
(4)各功能独立,低耦合高内聚;
(5)利用架构及其规则进行开发,在开发时间、成本、生产率和产品质量方面具有极大的回报。
2、总体架构图
3、结构层说明
3.1、硬件层
硬件层可分为硬件抽象层和硬件驱动层两部分
(1)硬件抽象层主要是STM32片内的外设驱动,如 GPIO、RCC、ADC、SPI、I2C、USART等
(2)硬件驱动层主要指设备的外设驱动
3.2、功能模块层
功能模块层封装实现具体功能的子模块,如 :储存读写模组、按键触发模组、系统心跳模组、显示操作模组、串口收发模组、数据采集模组等
3.3、应用接口层(该层根据情况而定)
应用接口层主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供API所定义的功能的软件称作此API的实现。API是一种接口,故而是一种抽象。
3.4、业务逻辑层
业务逻辑层 通过调用应用接口层API接口实现产品的各个业务功能,如:按键事件业务、用户GUI业务、通信收发业务、线程守护业务、系统自检业务;
3.5、应用层
应用层为程序的总体运行框架,组织、整合、调用业务逻辑,完成产品整体功能
4、遵循规则
4.1、命名
(1)文件名添加前缀:硬件抽象层( hal_ )、功能模块层( fml_ )、应用接口层( api_ )、业务逻辑层( bll_ )、应用层( app_ );
(2)api接口命名规则:api_功能名称;
4.2、调用
(1)同一级别的层相互独立,互不影响、互不干扰、互不关联,不能相互调用,只能调用下层接口;
(2)各个层之间不能跨层调用,如:在业务逻辑层不能直接调用功能模块层的代码 ,仅能调用应用接口层代码;
4.3、增删
(1)新增接口要求与整体规则统一,后续只能增加,不允许修改、不允许删除;
(2)每次新增接口,需在文件头备注 (作者、版本信息、状态功能) ;
5、优劣评估
5.1、优势
(1)底层驱动变动、更换平台,只需更改底层驱动,其他的层次结构不受影响、干扰,无需重新修改;
(2)功能模块变动,只需单独升级功能模块,其他模块不受影响,应用层也不受影响;
(3)架构设计完成后主要的工作区在业务逻辑层,应用层的作为整体架构的调度者、领导者,通过调用业务逻辑完成产品功能。
5.2、劣势
(1)架构设计一般比较复杂,设计和实现一个好的架构需要相当的时间。所以,一般只有在架构可以被多次反复应用的时候,前期投入的时间成本会得到丰厚的回报;
(2)架构设计规定了一系列的接口和规则,这虽然简化了二次开发工作,但同时也要求二次开发者必须记住很多规则,如果违反了这些规则,就不能工作。但是由于架构屏蔽了大量的领域细节,相对而言,其学习成本还是大大降低了;
(3)架构的升级对已有产品可能会造成严重的影响,导致需要完整的回归测试。
6、实例