目录
为什么使用多核?AUTOSAR提供了几种多核方案?具体是什么?
最基础概念
什么是AUTOSAR?AUTOSAR到底做了什么?
AUTOSAR,即汽车开放系统架构,是一套专门用于汽车的开放性的框架和行业标准,旨在标准化汽车开发的流程。
AUTOSAR 通过标准化软件接口、交换格式和方法论等内容,主要实现以下几个目标:
1. 使软件和硬件彼此独立,让应用层开发人员不需要过多的关注硬件;
2. 制定软件接口规范,使得软件不会高度依赖硬件平台,提高代码的复用性;
3. 通过标准化的开发流程和方法,降低汽车软件开发的重复性工作,提高工作效率和软件质量。
通过上述几个目标,AUTOSAR 可以实现大幅缩短开发时间和成本。
AUTOSAR的结构是什么样的?分为哪几层?
AUTOSAR 架构可以先被抽象成三个层次:应用层 ,RTE层 和 BSW层 ,这三层组成软件,架在微控制器上。
应用层:包含所有汽车电子系统的应用软件,封装了相关的控制算法,并由RTE事件触发。
RTE层:作为应用层与基础软件层交互的桥梁,封装了基础软件层的通信和服务,为应用层软件提供了标准化的基础软件和通信接口,实现了软硬件的分离。
BSW层:通过软件实现对硬件的控制,并提供一系列接口供商城调用。
其中BSW层可以再被细分为 服务层 、ECU抽象层 、微控制器抽象层(MCAL) 和 复杂驱动(CDD)。
服务层:提供汽车嵌入式系统软件常用的一些服务,包括网络通信管理、存储管理、ECU模式管理和操作系统等服务。
ECU抽象层:将ECU结构进行抽象,为ECU提供外围设备驱动的程序。
微控制器抽象层:与硬件相连接,映射出硬件的功能和接口,避免上层软件直接对微控制器的寄存器进行操作。
复杂驱动:有些比较复杂或对实时性要求比较高的设备或外设,AUTOSAR 并没有做出规范,这部分内容就是复杂驱动。
MCAL开发
什么是MCAL?
MCAL将底层硬件驱动抽象出来,对外设模块进行规范,基于Autosar规范进行驱动配置,提高了系统的可移植性、模块化和可重用性。
硬件抽象:
MCAL通过为硬件提供一个抽象层,使得上层的应用程序和操作系统无需直接与硬件交互,使得应用软件可以在不同的硬件平台之间更容易地迁移,无需对应用层进行大量修改。
硬件接口模块:
MCAL提供了一系列的驱动程序和服务模块,这些模块负责直接控制微控制器硬件,如GPIO(通用输入输出)、ADC(模数转换器)、PWM(脉冲宽度调制)、通信接口(如CAN、SPI、I2C)等。它通过标准化的接口使上层软件模块可以通过统一的API访问硬件资源。
硬件独立性:
通过MCAL,AUTOSAR系统能够提供硬件独立性,即上层应用程序和操作系统可以不依赖具体的硬件平台。这使得系统能够在不同的硬件平台上运行,降低了对特定硬件的依赖,提高了系统的可移植性。
驱动程序的实现:
MCAL包含了针对具体硬件的驱动程序,这些驱动程序负责与底层硬件进行交互,如配置硬件寄存器、处理中断、管理外设等。它们封装了硬件细节,提供了统一的接口供上层软件调用。
使用过EB吗?怎样使用EB配置MCAL工程?
1. 首先进入EB安装目录:EB\tresos\autosar下,根据使用的autosar规范的版本进入对应的文件夹下,将里面的arxml文件拆分,生成xdm文件。
2. 在EB安装目录下新建links文件夹,在里面添加 .link文件,内容为plugin路径,并将xdm文件放到该路径的config目录下。
3. 在EB配置完成后,选择生成,则会通过plugin找到对应模块的代码生成器,以代码生成器和配置为基础生成代码。
autosar4.3.1和4.4.0有什么区别?
主要区别在于4.4.0增加了对多核的规范内容。
什么是复杂驱动?
对于autosar没有做出规范的外设比如usart,芯片想要支持这个功能除了芯片有这个资源,就需要自行配置,这些需要自行配置的驱动模块叫做CDD,即复杂驱动。
所有autosar没有做具体配置的驱动全部都归类在这个模块下。
CDD模块基于需要基于autosar的共通部分规范(比如接口规范)来封装,可以调用mcal接口来实现其他的驱动功能,或者是单独的外设模块。
复杂驱动的代码只需要考虑autosar的标准规范(包含编码规范和基本要求),比如不能用标准库函数,根据autosar规范来定义宏来声明定义函数。
此外,对外暴露的接口要做参数检查。
为什么使用多核?AUTOSAR提供了几种多核方案?具体是什么?
有时候单核不能满足需求,所以会采用多核,不同的核实现不同的功能。具体怎么实现会通过软件来决定。如果不做约束,那么出现问题的时候就无法排查。此外,当大量资源都部署在一个核上,等待这一个核的资源,会导致效率低。
AUTOSAR 4.4 新增了对多核做了限制和需求。
AUTOSAR 对多核提供了四种方案:
Type 1
将一个外设的所有物理资源全部分配到一个核上。
Type 2
将不同的物理资源分配给不同的核。
比如eth有两路,分别分配给两个核,每个核只能访问自己的物理资源,不能访问另一路的。
核在调用外部接口时,会通过map表来检查该核控制的物理资源,与其做匹配。如果匹配,就能正常调用;不匹配则返回 error 。
Type 3
在 Type 2 的基础上,实现跨核调用。
需要解耦,比如两个核同时访问一个资源,以及两个核同时出发同一个资源相关的中断。
如果要实现就需要采用软件锁或硬件锁。硬件锁更高效,但会占用硬件资源。如果采用硬件锁,单mcal就会耗费大量硬件资源,但mcal正常在项目里占用资源是最少的,所以没有可实施性。
Type 4
所有资源都部署到一个核上,其他核只能间接访问。其他核想访问资源需要部署核提供核间通信机制,比如共享内存和向量。
共享内存,就是部署核提供的可供其他核调用的接口,其他核通过这个接口来间接控制该模块。
该方案需要MCAL层实现完整的核间通信机制,但一般这种机制都在rte层实现,而且 AUTOSAR 也没有对该方案的使用建议。