1 通信发送
1.1 LED_ON如何发送到Can总线的实例分析
信号就是应用层要传送的消息,比如LED的亮灭状态信号;应用层SWC想把 点亮LED灯的信号通过Can总线发出去,就需要通过调用Rte_Write_IfLight_DeOnOffStatus(LED_ON)来更新系统信号值,RTE将进一步就是调用 Com_SendSignal(信号Handle, LED_ON)来更新信号值;具体可参看文章「COM4-通信发送代码Com_SendSignal分析」。备注:PduInfo指针指向的PduInfo结构类型定义为如下:
typedef uint16 PduIdType;
typedef uint16 PduLengthType;
typedef struct {
uint8 *SduDataPtr; // payload
PduLengthType SduLength; // length of SDU
} PduInfoType;
那么LED_ON这个值会存在SduDataPtr指针指向的I-PDU缓存中。
具体介绍如下:PDU 就是协议数据单元,用于COM下面的各层之间进行传输。PDU包含各个信号Signals,也就是应用发送的信号值存储在COM的I-PDU缓存中,然后COM通过调用PduR_ComTransmit(Pdu Handle, PduInfo指针),把I-PDU发送给PduR,PduR通过路由表转发给CanIf模块,即调用CanIf_Transmit(Pdu Handle, PduInfo指针);CanIf模块做了一些列的错误检查后,如果邮箱HW mailbox空闲可用,则调用Can_Write( hth, PduInfo指针 ),经过Can总线的仲裁规则仲裁后,赢得仲裁的报文发送到Can总线上(一般是CanID越小优先级越高),最后LED_ON这个信号值就会出现在Can总线上了
1.2 通信栈发送模块的组成
1.3 发送函数之间的调用