嵌入式软件分层及目录结构设计规范

嵌入式软件分层及目录结构设计规范

  • 背景
  • 嵌入式软件分层结构
    • 程序入口
    • 应用层
    • 通用组件
    • 基础库
    • 芯片支持包
  • 嵌入式软件目录设计

背景

公司嵌入式产品众多,对应嵌入式软件工程也有很多。一般的嵌入式产品一个嵌入式开发工程师基本上就能完成了,不同的工程师对嵌入式软件的分层结构理解不同,软件的目录结构设计的也会不一样。对于一些开发经验尚浅的工程师,嵌入式软件分层结构设计往往有比较大的缺陷。

统一各嵌入式软件的分层及目录结构,好处显而易见。开发人员遵循同一种设计结构:

  • 新产品软件设计时,可以参考已有的项目,很方便的完成工程搭建;
  • 不同产品之间的通用模块可以很方便的移植、复用;
  • 开发人员可以快速上手未开发过的相关产品的软件。

嵌入式软件分层结构

为方便嵌入式软件的移植、各项目之间模块的复用,嵌入式软件按照如下图的分层结构设计:

程序入口 应用层 基础库 通用组件 芯片支持包

注意: 各层之间的依赖关系一定要理解清楚,不能随意依赖各模块,否则会导致模块无法复用、软件难于移植等问题。

程序入口

  • 该层主要实现整个程序的入口模块,一般即main函数及主线程(MainThread)模块,方便开发人员快速找到整个代码的入口,便于分析整个项目。一般情况下,不同项目的入口模块实现是不同的。

应用层

  • 应用层主要实现产品相关的业务逻辑,不同产品之间的业务逻辑是不同的,因此该层一般在不同的项目之间也是不能复用的。
  • 注意:根据软件分层结构,应用层只能依赖基础库及通用组件。不能向下依赖芯片支持包。

通用组件

  • 通用组件主要是应用层需要依赖的非基础库中的一些通用模块。如第三方库lwip/ucgui等,或者是内部开发的一些通用的库,如参数存储库等。
  • 通用组件一般情况下只能依赖基础库实现。特殊情况下,需要依赖芯片支持包csp时,需要项目组讨论通过后才允许。

基础库

  • 基础库(cbase)是C语言开发所必须依赖的库。主要目的是解除应用程序对底层硬件及操作系统(ucos/freertos/linux等)的依赖,并提供一些嵌入式的基础开发组件(如内存管理、数据结构、日志、终端调试),从而提高程序的复用性、可移植性及稳定性。
  • 基础库一般情况下仅依赖芯片支持包及C标准库实现。
  • 基础库详细设计见:通用基础库设计

芯片支持包

  • 芯片支持包为各MCU厂商提供的一些MCU的开发库、移植好的RTOS及移植好的第三方库等,一般也叫SDK(软件开发工具包),如STM32官方提供的标准库、HAL库等。
  • 该层与芯片紧密依赖,同一型 或同一系列的芯片(或者同一厂商的芯片)可以共用一个芯片支持包。

嵌入式软件目录设计

根据嵌入式软件的分层结构,目录按如下结构设计:
工程根目录 :

  • doc – 相关的文档、说明
  • utilities– 相关的开发工具、脚本等
  • src – 源码
    • config – 全局工程配置目录,包含各层需要经常改动的配置头文件
    • init – 程序入口
    • app – 应用层
      • xxx模块
      • yyy模块
    • component – 通用组件
    • cbase – 基础库
    • csp – 芯片支持包
      • xxx – xxx芯片支持包
      • yyy – yyy芯片支持包
    • project – 工程
      • xxx – xxx芯片(对应src下的xxx芯片支持包)
        • mdk – mdk开发环境(本层目录可选)
      • yyy – yyy芯片(对应src下的yyy芯片支持包)

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年8月4日
下一篇 2022年8月4日

相关推荐