AutoSAR COM
1.通信模型
发送逻辑:SwcAppSender->Rte->Com->Pdur->CanIf->CanDrv
接收逻辑:CanDrv->CanIf->PduR->Com->Rte->SwcAppReceiver
2.协议数据单元
PDU的概念:通信过程中需要通过其通信堆栈交换的信息实体需要PDU去承载
PDU = SDU(数据服务单元) + PCI(Protocol Control Information);
SDU&PDU的命名规则
数据链路层
autosar中的驱动模块和接口模块都被分配到数据链路层(L层)。因此在这两个模块之间交换的PDU被称为L-PDU
网络层(N层)
与osi相反,autosar中的传输协议模块被分配到网络层。因此在这两个模块之间交换的PDU被称N-PDU
交互层(I层)
位于Rte和Tp模块之间的通信栈的所有模块都分配给autosar中的交互层。因此这些模块之间的PDU交换在Autosar中被命名为I-PDU
使用下层的PduR的API进行发送,PDU在参数中进行传递
Com_RxIndication()
PduR_ComTransmit() --> Com_TxConfirmation()
Com层发送报文的调用顺序
Rte_COMCbkTAck_signal() <-- Com_TxConfirmation()
3.com信号的发送接口
信号的发送:上层调用通过Com_SendSignal来更新信号的值
SWC(arxml系统描述文件)–>RTE–>COM
信号的接收:上层通过Com_ReceiveSignal来读取信号的值
COM(Com_ReceiveSignal)–>RTE–>SWC
4.通信的发送代码ComSendSignal分析
发送代码分析(异步)
信号的配置结构体
报文PDU的配置结构体
长度较大的Pdu数据的Pdu buffer的数据锁定问题
信号的transfer属性
触发trigger属性
pending属性
None属性
信号的更新位的概念
临界段的进入和退出
uint8 Com_SendSignal(Com_SignalIdType SignalId, const void *SignalDataPtr)
{
// 根据SignalId 标识获取信号结构体
const ComSignal_type * Signal = GET_Signal(SignalId);
// 根据IPduHandleId 标识获取Pdu结构体
const ComIPdu_type *IPdu