一文搞懂AUTOSAR核间通信原理、实现和配置

简介

AUTOSAR多核操作系统提供了IOC(Inter-OS-Application Communication)的通讯方式来保证核间数据读写的一致性。与核内SWCs间的通信不同(RTE实现),IOC是由OS实现的。OS Application在读或写时一般会获取Spinlock,以防止其他OS Application操作数据而导致的数据不一致。需要注意的是,核内的SWCs或者BSW模块间的通信不能走IOC,因为这会降低CPU的效率。同时假如不是所有的sender/recevier的SWCs或BSW在同一个OS Application上,那么就应该用IOC的方式进行通信!

功能介绍

IOC只提供sender/receiver的通信方式,RTE会将client-server的请求和应答转换为sender/receiver通信。IOC支持1:1、N:1和N:M(非队列)的通信方式。通信的数据类型既可以是基础数据类型也可以是复杂数据类型。在多核单片机中,IOC还提供了Notification功能,这样接收方就可以更快速的知道数据可用了。通用的通知方式是触发接收方的2类中断来告知。同一个IOC的Api函数可以被同一个SWC的不同runnable调用,但是假如被不同任务调用时需要小心了,用户必须确保IOC Api在返回前不会被另一个任务调用,因为IOC函数是不可重入的,这种情况可能导致Spinlock的死锁(死锁问题见AUTOSAR OS之Resource和Spinlock)!

通信实例

1 1:1 sender/receiver不带Notification的通信

在上边的例子中,发送方把数据写到接收方可以读取的共享内存中。发送方生成的RTE接口为:

Rte_Send_<port>_<item> (..., <data>)

接收方生成的RTE接口为

Rte_Receive_<port>_<item> (..., <data>)

这种通信方式适用于:1 SWC间的Sender/Receiver通信;2 队列或非队列通信;3 1:1通信。

2 N:1 client/server带有Notification的通信

当数据写入IOC内部数据缓存后,Rte函数调用OS的服务来激活接收任务。这种通信方式适用于:1 带Notification的SWC间的Sender/receiver通信;2 Client/server通信。3 队列或非队列通信;4 非polling模式的1:1通信;5 N:1通信。

IOC使用注意事项

当多个核在同一段时间都去访问核间通讯的数据时,由于Spinlock的存在,按照先后顺序访问,后访问的任务就会一直忙等待,假如数据量很大,而访问这个数据的周期又短,这就会导致CPU负载急剧增大。因此对于多核单片机,资源分配一定要做好,尽量要减少核间通信!

伪代码实现

1 IOC数据通信为基本数据类型(原子操作)

由于是基本数据类型,此时数据的读写一条指令就可以完成,因此此时IOC生成的Rte接口不含有任何Spinlock。如:

#define IocWrite_Rte_Rx_000038(value) (Os_Ioc_Rte_Rx_000038 = (uint8)value, IOC_E_OK)
#define IocRead_Rte_Rx_000038(value) (*value = Os_Ioc_Rte_Rx_000038, IOC_E_OK)

2 IOC数据通信为复杂数据类型

此时应该加上Spinlock保证数据一致性。

Std_ReturnType IocRead_Rte_Rx_000000(struct complex_type* value)
{
    Os_IocLock(ConfigPtr);/*获取Spinlock*/
    *value = Os_Ioc_Rte_Rx_000000;
    Os_IocUnlock(ConfigPtr);/*释放Spinlock*/
     return E_OK;
}

3 带Notification的核间通信

AUTOSAR(汽车软件架构)是指汽车行业中的一个开放标准化平台,旨在促进汽车电子系统的开发集成。AUTOSAR将汽车电子系统划分为不同的软件组件,这些组件由不同的供应商开发,并通过核间通信进行互操作。核间通信是指不同的电子控制单元(ECU)之间通过总线进行数据交流共享。 AUTOSAR核间通信的目的是实现汽车电子系统的模块化可重用性,使不同的软件组件可以独立开发更新。它通过定义一系列的接口协议,确保不同的ECU可以相互通信,并共享数据功能。核间通信协议的选择取决于所使用的总线类型,如CAN(控制器局域网)、FlexRay或Ethernet等。 对于AUTOSAR核间通信实现,需要在系统设计软件开发过程中考虑以下几个方面: 1. 定义合适的接口:不同的软件组件需要定义统一的接口标准,包括数据格式、消息协议服务接口等,以确保数据的正确传输解析。 2. 消息传输:选择适合的总线协议,如CAN、FlexRay或Ethernet,以完成消息的传输接收。同时需要考虑消息的优先级时序要求。 3. 网络管理:为了管理各个ECU之间的通信,需要实现网络管理功能,包括配置、故障诊断网络同步等。 4. 数据共享与同步:不同的软件组件可能需要共享数据功能,因此需要实现数据共享同步机制,以确保数据的一致性准确性。 5. 性能优化:在设计实现过程中要考虑性能优化,包括减少通信延迟、提高带宽利用率以及对系统进行实时调度等。 总之,AUTOSAR核间通信实现汽车电子系统模块化可重用性的关键技术之一。通过定义合适的接口协议,以及选择合适的总线类型,可以实现不同的ECU之间的数据交流共享。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值