随着小米宣布造车,当下“软件定义汽车”的趋势如火如荼,autosar的全称Automotive Open System Architecture,即汽车开放软件架构,这正如TCP/IP对网络进行统一,autosar是对汽车软件技术的统一,TCP/IP制定的初衷是为统一网络标准从而诞生了今天的互联网,而AUTOSAR的制定是为实现汽车电子软件的统一从而实现汽车电子软件的复用。本项目是基于autosar3.1的开源代码arctic core,在此基础上,完成在n32g45x上的mcal驱动,适配RT-Thread内核为autosar的操作系统。
目前已完成mcal的mcu驱动,autosar的osek操作系统已经能在n32g45x上正常调度,移植rtthread到arctic core,但是在适配OSEK/VDX的接口过程中,发现这个适配工作不是一两个月所能完成,因为osek/vdx的标准非常严格,如果对OSEK/VDX感兴趣的小伙伴可以一起加入rtthread对osek/vdx的适配。
2.1 AUTOSAR的分层模型及各层简述
AUTOSAR从上往下分为应用层、RTE层和基础软件层(BSW)。
应用层由多个软件组件SWC组成,每个SWC是具有一定功能的模块,如汽车发动机控制逻辑,这些模块可以由matlab的autosar软件包依据模型进行设计;RTE全称Runtime Environment,即运行时环境,它的内部是一条autosar框架定义的虚拟功能总线(VFB),SWC、BSW通过这条虚拟功能总线进行通信。
BSW从上到下分为服务层、ECU抽象层、MCU抽象层,分层的目的是为了实现各层的复用和对下一层的隔离,这正如RT-Thread的分层思想那样,RT-Thread可以适配不同的MCU就是因为采用了驱动和设备分离的策略,RT-Thread的同一个设备因为注册了不同的驱动就可以驱动不同的MCU。在AUTOSAR中,和MCU有关的一层是MCU抽象层,及MCAL,用RTT的驱动和设备分离的思想来理解autosar的mcal就是同一个ECU抽象层因为注册了不同的MCU驱动就可以驱动不同的MCU。在autosar的成员中就有nxp这样的芯片原厂提供autosar的mcal。
2.2 简述OSEK/VDX接口api
在autosar的服务层中有一个符合OSEK/VDX标准的操作系统,负责内存管理、对各个功能的调度,api分为任务管理、中断处理、事件机制、资源管理、报警器。
1 StatusType ActivateTask ( TaskType )
2 将任务号为TaskID的任务由挂起态变为就绪态。
3 StatusType TerminateTask ( void )
4 将任务由就绪态转为挂起态。
5 StatusType ChainTask ( TaskType )
6 将当前任务由就绪转为挂起,并将TaskID的任务由挂起转为就绪,相当于TerminateTask和ActivateTask的连用。
7 StatusType Schedule ( void )
8 执行一次调度。
9
1 StatusType SetEvent ( TaskType EventMaskType )
2 设置一个事件位,当执行SetEvent后等待该事件位的任务可以由等待态变为就绪态。
3 StatusType ClearEvent ( EventMaskType )
4 清楚事件位
5 StatusType GetEvent ( TaskType EventMaskRefType )
6 返回TaskID任务的所有事件位
7 StatusType WaitEvent ( EventMaskType )
8 等待事件位,等待事件位的任务由就绪态转为等待态。
9
1 StatusType GetAlarmBase ( AlarmType , AlarmBaseRefType )
2 获取报警器的时基
3 StatusType GetAlarm ( AlarmType TickRefType )
4 获取闹钟当前的tick
5 StatusType SetRelAlarm ( AlarmType , TickType , TickType )
6 设置相对闹钟
7 StatusType SetAbsAlarm ( AlarmType , TickType ,
8 TickType )
9 设置绝对闹钟
10 StatusType CancelAlarm ( AlarmType )
11 取消闹钟
12
3.1 相关资源链接
arctic core官网:
http://dev.arccore.com/public/user-doc/UD441x/Arctic-Core-4.0_9503291.html
arctic core源码获取 :
http://my.arccore.com/hg
源码构建说明:
http://dev.arccore.com/public/userdoc/UD441x/Makesystem_23789620.html
3.2 软件框架说明
在arch文件夹中的文件为MCU内核架构相关的文件,如cortex-m3,主要内容为M3的启动文件(见M3编程指南),MCU的固件库。
在boards文件夹中的文件为各个MCU的实现,包括对板子的配置。
system文件夹中包含了一个OSEK/VDX标准的操作系统。
以MCU驱动的时钟设置为例,static void SetClocks(Mcu_ClockSettingConfigType *clockSettingsPtr)是autosar的mcal定义的一个接口,用于设置MCU的时钟,在n32g45x的实现如下:
写好mcal的mcu后编译成可执行文件下载到板子上,AUTOSAR能够在n32g45x上正常运行,可以看到三个任务块在调度。下载工具用的是pyocd。
由于源码采用的构建工具是makefile,所以需要将rtthread的源码和头文件路径添加到makefile文件。编译下载到板子上可以看到rtthread正常运行。
由于arctic core没有github,不能采用fork的方式协作开发,我的代码上传到gitee提示版权风险无法转为公开的仓库,对源码感兴趣的小伙伴可以在下方留下gitee账号或发邮件给我369247354@qq.com,我拉你到项目组。源码从附件下载:
n32g45x_arctic_core.zip
https://www.bilibili.com/video/BV1Ma411b7kD/
本次移植过程中,mcal的移植较为轻松,适配n32g45x的寄存器花了不少时间,需要查看n32g45x的参考手册的寄存器定义一个一个的去改。移植rtthread到arctic core的源码比较简单,只是添加rtt的源码到arctic core的makefile。遗憾的是还没完成rtt适配OSEK/VDX的接口,希望对OSEK/VDX感兴趣的小伙伴加入进来,一起完成rtt对OESK/VDX的适配。
来源:RTThread物联网操作系统
全部0条评论
快来发表一下你的评论吧 !