Embeded-Software-Architecture

嵌入式软件架构

嵌入式软件架构的六个步骤

1. 架构抽象层

抽象层是嵌入式软件架构中最重要的一个步骤。它提供了一个关注点分离的方法,将底层硬件和顶层应用程序隔离开来。这种隔离使得应用程序更易于编写和维护,同时也使得底层硬件更易于更换和升级。此外,抽象层还能够提高软件的可移植性和可重用性,因为它使得软件更易于在不同的硬件平台上运行。

反思:目前自己写的代码,有很多直接在应用层调用底层代码,耦合程度严重,不符合依赖倒置原则,更换芯片后移植也困难,如下

P0

解决方法:

  1. 明确依赖倒置原则(高层模块不依赖于底层模块,它们都依赖于抽象)

2、进行架构隔离

  1. 调用抽象层代码

    应用层永远都调用抽象层,不能跨层调用

  2. 符合依赖倒置原则

    应用层不依赖于固件库,而是依赖于抽象层;驱动模块也按照抽象层的对下接口进行实现。

3、最后实现更换芯片后,只需要修改驱动层,不需要修改应用层和HAL层

P1

2、 软件基础设施

P2

基础设施的内容:

1、基础类型和宏定义

2、操作系统

3、中间件(文件系统/协议栈/数据库等)

4、库(C库/ 数学库/矩阵库/容器库等)

5、框架(外设驱动框架/设备框架/状态机框架/行为树框架)

6、工具支持(测试、调试、仿真等软件工具的支持)

使用统一的软件基础设施的好处

1、提升软件质量

2、提升软件复用性

3、减少软件冗余、避免重复造轮子

4、有利于团队技术积累

5、有利于团队的技术培养

6、是跨平台开发和测试驱动开发的前提

3、合理识别和管理数据

4、软件分解

1、隔离硬件

P3

这一步主要是将通信口的原始数据,通过硬件抽象层,转换为我们需要的数据(做到上层数据与硬件无关)

2、按是否实时域分解

何为实时?一般以响应时间10ms为分界线,见仁见智

3、按是否安全域分解

4、机器人的功能域分析

感知 传感器数据

执行 执行机构数据 车体数据 指令数据

认知决策 任务数据 地图数据 当前线路数据

支持 错误与警报历史数据 配置数据 日志数据

5、按任务分解

P4

5、模块与接口定义

颗粒度:软件复用的关键!

软件分层的本质

接口定义的重要意义

P5

6、仿真、扩展与迭代

1、仿真

P6

P7

拥有自己的嵌入式软件架构 1.提升开发效率 2.软件架构并非一日之功 3.架构师不是最后的目标,是走向其他进阶职位的阶梯

嵌入式软件架构设计 模块化 & 分层设计 -嵌入式 (uml.org.cn)


Embeded-Software-Architecture
http://clomg.github.io/2023/05/25/embeded-software-architecture/
作者
CLoMg
发布于
2023年5月25日
更新于
2023年6月16日
许可协议