缩写

该项目文件树参考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
2
3
4
5
6
7
├─.vscode
├─ASW 此处存放与硬件平台无关代码
├─BSW 存放与硬件相关代码,所以子文件夹需要区分不同芯片型号
├─Documents 存放项目相关的文档,为了方便使用,最好将使用的芯片的手册放于此处
├─OS 存放和系统相关的,如文件系统、操作系统、调度系统等等
├─Output 存放输出文件,请在设置Keil和IAR等软件时,选用输出到此文件夹,方便管理,并且增强Project中的整洁性
└─Project 存放和工程相关的文件树,如KEIL、IAR、SOURCEINSIGHT、TSMATSER、CANoe、JFLASH,与项目相关的工程请放置此处

[!important]

不知道要将代码放在哪个文件夹中需要参考以下准则:

  1. 与硬件无关的请存放于ASW,也就是逻辑相关
  2. 与硬件有关的请存放于BSW,也就是对接硬件平台
  3. OS中存放系统相关,如文件系统、操作系统、调度系统

[!note]

为了保持风格的一致性,高两级的文件夹请使用开头大写(ASW、OS、User、Components等),再低级的文件夹就使用小写(inc、src、cfg等)

ASW

1
2
3
4
5
6
7
8
9
10
├─.vscode
├─ASW 此处存放与硬件平台无关代码
│ ├─Include 此处存放一些类型头文件
│ ├─Lib 此处存放一些库文件,也就是不会修改的文件
│ ├─SWC 此处存放APP相关组件代码,如门窗控制器组件等等
│ │ └─btdm 此级文件夹下的文件树可以按照自己的喜好存放,如可以将c和h文件放在一起,也可按照不同的文件后缀对文件树进行构建
│ │ ├─inc 存放头文件
│ │ └─src 存放c文件
│ ├─User 一般用于存放main函数和相关app操作函数,一般来说main函数尽量不要有太多的内容,使用函数调用,方便在此基础上修改
│ └─Utils 存放工具文件,如delay、RTT、coreMark等工具。

[!note]

注意,ASW中存放和硬件无关的代码,所以在写其中的代码,我们应该要尽量减少和硬件有关的代码,使用抽象代码,如使用定死的函数名访问,我们并不需要知道它下面是怎么实现的,我们只需要调用。(使用定死的函数名方便进行抽象)

[!important]

‼‼‼在ASW中写代码,一定要有抽象的概念‼‼‼

例如SWC是组件的意思,也就意味着,当你写好一个组件,那么我下次使用别的平台的时候可以直接调用你的组件,而不需要再修改很多东西,如定义一个宏开关来控制。

对于一个组件来说,我只需要知道你的组件的输入和输出即可,所以其中的代码尽量写的抽象,减少重复造轮子。

BSW

1
2
3
4
5
6
7
8
9
10
├─BSW				存放与硬件相关代码,所以需要区分不同芯片型号
│ ├─Bsp 存放供应商和用户的接口函数
│ │ ├─inc
│ │ └─src
│ ├─Cmsis 这里存放和芯片内核文件,如core_cm3.h、cmsis_compile.h等等类似文件
│ ├─Diagnostics 这里存放诊断相关文件,如UDS
│ ├─Drivers 这里存放驱动文件
│ ├─Middleware 存放BSP层和SWC层的交互函数
│ ├─Scripts 存放脚本相关文件,如sct、icf、bat、py,和工程相关的脚本文件请都放至此处。在Keil中如果使用可视化宏文件请放置此处
│ └─StartUp 这里存放启动文件,如startUp.s等文件

[!tip]

需要考虑的是,是否要增加芯片厂商的文件夹,如ZX/FR3032D,如果要制定芯片厂商,请和plm等保持一致的缩写,如ZX代表智芯

Documents

1
2
├─Documents		存放和项目相关的手册、点检表、变更履历表,如果要存放过多的文件,请使用文件夹分类,便于查阅
│ └─FR3032D

OS

1
2
3
4
5
6
7
├─OS		
│ ├─FlashDB 文件系统
│ │ ├─inc
│ │ └─src
│ └─FreeRTOS 操作系统
│ ├─inc
│ └─src

Output

1
2
3
├─Output
│ ├─Listings 存放链接文件和映射文件,注意该文件夹是软件生成的,在Keil或IAR中设置即可
│ ├─Objects 存放中间文件,如o文件、obj文件,该文件夹也是软件自动生成的,需要配置

[!note]

请务必在工程中设置output和listing以保证项目树的整洁性

Project

1
2
3
4
5
6
7
8
9
10
└─Project
├─KEIL
│ └─RTE
│ └─_blueTooth
├─SOURCEINSIGHT
│ └─blueTooth.si4project
│ ├─Backup
│ └─cache
│ └─parse
└─VSCODE

[!important]

和项目相关的工程请存放至此,我们常用的工程有:

  1. Keil
  2. IAR
  3. SourceInsight
  4. Vscode
  5. TSMaster
  6. Canoe
  7. ZLG
  8. JFLash
  9. QAC
  10. Tessy

[!note]

QAC和Tessy的测试输出报告请不要放置Document中,需要存放在Project下的相关文件夹中

ReadMe

ReadMe文件中用来存放和项目相关教程,如Flash、Ram分布,如何使用函数,当使用的时候需要修改哪些等等。