目录规范简介

代码工程目录规范符合基本要求是有一定意义的。代码是要长期维护的,长期BUG修改,功能的完善与补充,甚至是要多人参与阅读、修改、完善,最后也可能一样功能的整个工程代码移植在不同的硬件mcu上运行。因此代码目录的规范性方便团队高效率,高准确性的维护和完善。

1 目录组织基本层次结构

程序根目录下一级目录示例
image.png
注:各个目录层次可以有多个具体功能的子目录。

2 APP目录说明

app 应用层主业务流程处理文件,整个工程代码的逻辑功能实现。

3 HAL目录说明

hardware 接口层文件形式,函数形式。
文件命令形式 HALxxx.h,HALxxx.c

本层文件3类函数

  1. HALxxx()形式为功能抽像函数,只给本层其它模调调用和App层各模块调用
  2. mcu_xxx()形式为外部函数接口声明,它没有函数体,它是少数HALxxx()函数的功能补充,是为操作不同mcu硬件而定的需求声明
  3. onxxx()形式为事件函数,只开放给mcu底层调用,推动整个软件的事件机制

抽象接口层函数特点

  1. 本目录的文件要纯C代码:不要出现与mcu有关的专用的库函数,库变量
  2. 描述相关功能的抽象函数标准定义和结构定义
  3. 驱动函数类型只在头文件声明为 extern 外部函数,命令格式extern muc_Function()——函数体要在HALmcu目录里根据不同硬件mcu做不同实现代码。
  4. 驱动函数类型要求—注释功能说明,注释入参说明,注释返回值说明,各说明要清楚详细,方便mcu现实或移植时容易理解该函数指针功能是做什么
  5. 事件回调函数onFuncton()—被HALmcu目录硬件中断或底层异步任务引用,以on开头命令
  6. HALxxx()函数可以被APP层调用,也能直接调用APP层的函数,禁止底层调用

    4 HALmcu目录说明

    与硬件mcu的驱动编写,读写寄存器,硬件中断处理。
    mcu操作层函数特点

  7. hardware目录实现接口层给出的已声明过的外部函数,extern muc_Function()

  8. 触发或调用hardware目录里的事件回调函数 onFuncton()
  9. HALmcu目录里是俱体的mcu硬件寄存器操作
  10. HALmcu只能#include HAL目录里的头文件,函数、变量,但禁止跨层引用APP层的函数和变量
  11. APP层禁止出现 #include “mcu层头文件.h”,函数、变量
  12. hardware目录的文件命名格式 mcu_xxxxx.h,mcu_xxxxx.c.

5 代码工程例子

5.1 功能模块目录例子
image.png
image.png
image.png

5.2 HAL层函数例子
HAL_xxx.c 文件里的底层接口声明为外部函数 extern mcu_xxx()
HAL_xxx.c 文件里的本模块功能函数定义 HAL_xxx()
image.png

5.3 mcu层实现接口层用extern 声明的函数,触发接口层onxxx()事件函数
image.png