项目文件树
缩写
该项目文件树参考AUTOSAR结构,所以为了便于理解,此处展示部分缩写的全称:
| 缩写 | 全称 | 描述 |
|---|---|---|
| AUTOSAR | AUTomotive Open System ARchitecture | 汽车开放系统架构,是汽车软件开发的标准框架。 |
| ASW | Application Software | 应用软件,主要负责实现特定功能的业务逻辑。 |
| BSW | Basic Software | 基础软件,负责底层硬件控制和通用服务的实现。 |
| BSP | Board Support Package | 板级支持包,包含硬件初始化、驱动和相关工具。 |
| HAL | Hardware Abstraction Layer | 硬件抽象层,提供对硬件的抽象访问接口。 |
| MCAL | Microcontroller Abstraction Layer | 微控制器抽象层,提供对芯片外设的直接访问接口。 |
| RTE | Run-Time Environment | 运行时环境,负责 ASW 与 BSW 的通信管理。 |
| UDS | Unified Diagnostic Services | 统一诊断服务协议(ISO 14229),用于 ECU 的诊断通信。 |
| Dcm | Diagnostic Communication Manager | 诊断通信管理模块,实现 UDS 服务的解析和处理。 |
| Dem | Diagnostic Event Manager | 诊断事件管理模块,负责故障码存储和管理。 |
| PduR | Protocol Data Unit Router | 协议数据单元路由模块,负责数据路由。 |
| CanTp | CAN Transport Protocol | CAN 传输协议模块,用于实现 UDS 消息的传输。 |
| NvM | Non-Volatile Memory Manager | 非易失性内存管理模块,负责数据的持久化存储。 |
| SoAd | Socket Adapter | 套接字适配器,用于实现基于 TCP/IP 的通信协议(如 DoIP)。 |
| ECU | Electronic Control Unit | 电子控制单元,是汽车的嵌入式控制器。 |
| GPIO | General Purpose Input/Output | 通用输入输出,硬件外设的一种。 |
| UART | Universal Asynchronous Receiver-Transmitter | 通用异步收发器,用于串行通信。 |
| SPI | Serial Peripheral Interface | 串行外设接口,用于高性能串行通信。 |
| I2C | Inter-Integrated Circuit | 一种常用的两线串行通信协议。 |
| CAN | Controller Area Network | 控制器局域网,是汽车通信总线的一种。 |
| FlexRay | Flexible Ray | 一种高速汽车通信协议,用于安全关键应用。 |
| LIN | Local Interconnect Network | 局域互连网络,低成本汽车通信协议。 |
| DoIP | Diagnostics over Internet Protocol | 基于 IP 协议的诊断通信。 |
| OS | Operating System | 操作系统,提供任务调度和资源管理功能。 |
| SWC | Software Component | 软件组件,用于实现应用逻辑,是 ASW 层的核心构成模块。 |
概览
1 | ├─.vscode |
[!important]
不知道要将代码放在哪个文件夹中需要参考以下准则:
- 与硬件无关的请存放于ASW,也就是逻辑相关
- 与硬件有关的请存放于BSW,也就是对接硬件平台
- OS中存放系统相关,如文件系统、操作系统、调度系统
[!note]
为了保持风格的一致性,高两级的文件夹请使用开头大写(ASW、OS、User、Components等),再低级的文件夹就使用小写(inc、src、cfg等)
ASW
1 | ├─.vscode |
[!note]
注意,ASW中存放和硬件无关的代码,所以在写其中的代码,我们应该要尽量减少和硬件有关的代码,使用抽象代码,如使用定死的函数名访问,我们并不需要知道它下面是怎么实现的,我们只需要调用。(使用定死的函数名方便进行抽象)
[!important]
‼‼‼在ASW中写代码,一定要有抽象的概念‼‼‼
例如SWC是组件的意思,也就意味着,当你写好一个组件,那么我下次使用别的平台的时候可以直接调用你的组件,而不需要再修改很多东西,如定义一个宏开关来控制。
对于一个组件来说,我只需要知道你的组件的输入和输出即可,所以其中的代码尽量写的抽象,减少重复造轮子。
BSW
1 | ├─BSW 存放与硬件相关代码,所以需要区分不同芯片型号 |
[!tip]
需要考虑的是,是否要增加芯片厂商的文件夹,如ZX/FR3032D,如果要制定芯片厂商,请和plm等保持一致的缩写,如ZX代表智芯
Documents
1 | ├─Documents 存放和项目相关的手册、点检表、变更履历表,如果要存放过多的文件,请使用文件夹分类,便于查阅 |
OS
1 | ├─OS |
Output
1 | ├─Output |
[!note]
请务必在工程中设置output和listing以保证项目树的整洁性
Project
1 | └─Project |
[!important]
和项目相关的工程请存放至此,我们常用的工程有:
- Keil
- IAR
- SourceInsight
- Vscode
- TSMaster
- Canoe
- ZLG
- JFLash
- QAC
- Tessy
[!note]
QAC和Tessy的测试输出报告请不要放置Document中,需要存放在Project下的相关文件夹中
ReadMe
ReadMe文件中用来存放和项目相关教程,如Flash、Ram分布,如何使用函数,当使用的时候需要修改哪些等等。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 🍭你要信我啊の博客!