Automotive Open System Architecture (AUTOSAR),是汽车电子行业内解决软件复用问题的一种标准化软件架构,现在目前最新的版本是发布于2014年的10月31日的4.2版本。它能够让开发人员面向应用进行软件开发,为了解决汽车系统设计中与日益增多的软件内容和不断收紧的开发时间问题。今天我们就来看看如何开发符合AUTOSAR标准的软件。
小猿第一次接触AUTOSAR是因为我的一个朋友张果老(化名)原来在汽车行业,后来介绍我认识AUTOSAR标准,那还是在2013年左右,后来就研究了下这个标准,确实觉得好处很多。AUTOSAR软件通过提供一个开放的汽车软件架构应对日益复杂的代码,该架构由汽车OEM、供应商和工具开发者共同定义。AUTOSAR支持开发极具创新性且标准化的电子系统,以改进质量、性能、安全性和环保功能。它还能帮助简化汽车使用寿命内软件和硬件的更新流程。AUTAOSAR的标准架构得到了大量汽车厂商和芯片半导体厂商,以及第三方工具和服务商的大力支持,像我们熟悉的半导体厂商恩智浦,英飞凌,意法等都推出有自己的解决方案,能得到这么多牛逼公司的支持,你就知道他的厉害和趋势了。看下图AUTOSAR的伙伴和成员,不要亮瞎噢,找一找有你熟悉的吗?
既然这么多的公司都在遵从这一标准,虽然他是专为汽车行业设计的,但是我们同样可以借鉴他的架构和标准开发用于其他行业和产品的软件,就像MISRA现在已普遍应用于各个嵌入式软件开发中,而不只是局限于一个行业。
我们以一个简单的例子MCU GPIO来说明如何开发基于AUTOSAR标准的驱动软件,首先请自行下载AUTOSAR4.2标准压缩包到本地电脑,并熟悉AUTOSAR文档结构,这次我们主要参考AUTOSAR_SWS_PortDriver.pdf和AUTOSAR_SRS_PortDriver.pdf两个文档。参照这两个文档以及说明开发API接口,数据类型等。在microship的8位机和NXP的kinetis kv46 32位机上验证。我们这里没有完全遵照AUTOSAR标准但是大的架构是按照AUTOSAR来的。类型定义,参考文档的描述,其中Type可以定义为uint也可以定义为char。
例如按照文档要求可以定义如下
typedef unsignedchar Port_PinType;
……….
typedef enum
{
GPIO_E_PORT_PIN_IN = 0u,
GPIO_E_PORT_PIN_OUT
}ePortPinDirection_Type;
……….
这里没有列出所有定义,其他类似我们就不一一列举了,函数的定义也是一样按照文档的要求定义声明函数,不要忘记给你的任何一个函数都加注释,并使用统一的格式。
void GPIO_vSetPinDirection(Port_PinTypePortPin, ePortPinDirection_Type ePortPinDirection)
{
……….
}
按照文档开发完,并调试没有问题就可以使用这个驱动做应用了,例如我们可以驱动继电器,LED灯等,小猿使用这个驱动成功驱动继电器以及LED,等管脚的工作,并在microchip和NXP的片子上都调试成功。具体详细的开发需求请参阅官方文档。