模块简介
COM是AUTOSAR服务层的模块,介于PDUR和RTE之间,如下架构图所示:
COM的主要功能如下:
- 为RTE或者ASW提供面向信号的数据接口;
- 通讯控制;
- 按不同的发送方式发送信号;
- 监控接收的信号,信号超时;
- 提供发送成功的通知;
- 提供初始值和信号更新指示;
- 大小端转换;
- IPDU和信号之间的打包盒解析;
- 支持大数据和动态长度的数据类型。
认识各种PDU
PDU由SDU和PCI构成:SDU(Service Data Unit)服务数据单元是需要传递的数据;PCI(Protocal Control Information)协议控制单元是数据传递所需的信息,比如包含源和目标信息,PCI在传输端由协议层添加,在接收端再次移除。
- I-PDU:Interaction Layer Protocal Data Unit。交互层协议数据单元,对应ISO七层模型的表示层。I-PDU承载着信号。
- N-PDU:Networt Layer PDU。网络层协议数据单元,对应ISO七层模型的网络层。TP层和IF层之间交互使用,如单帧、多帧、首帧、流控帧。
- L-PDU:Data Link Layer PDU。数据链路层协议数据单元,对应ISO七层模型的数据链路层。IF层和driver层之间交互使用。
需求及其对应的软件实现解读
1、支持多种不同阶段的配置
需求:COM需要支持在不同的编译阶段配置,即配置参数需要能够在不同的编译阶段更改:
- Pre-Compile-Time:通常的方式,生成的代码、预处理的指令等。
- Link Time:模块外的常数,模块编译完成后还能够再修改。
- Post-Build-Time:和2类似,模块外可加载的常量数据,但是数据在特定内存段,可以在整个工程编译完成后修改。比如直接刷新此内存区域即可。
软件实现:ComEnableSignalGroupArrayApi(待补充)
2、为PDUR提供接收指示函数
COM的唯一下层模块是PDU Router,当PDUR接收到I-PDU后,COM应该提供一个函数被PDUR调用,函数名为:Com_RxIndication。
软件实现:
void Com_RxIndication (
PduIdType RxPduId,
const PduInfoType* PduInfoPtr
)
RxPduId:接收PDU的ID;
PduInfoPtr:包含接收到的PDU的长度,以及指向PDU元数据的buffer的指针。
3、为PDUR提供发送确认函数
当PDUR发送I-PDU成功到网络后,应该调用COM提供的发送确认函数,函数名为:Com_TxConfirmation。
软件实现:
void Com_TxConfirmation (
PduIdType TxPduId,
Std_ReturnType result
)
TxPduId:发送成功的PDU的ID;