AUTOSAR下Com模块中Signal Group详解

发布于 2023-5-30 11:26
浏览
0收藏

前言

最近在研究AUTOSAR通信协议栈的时候发现对Com模块的Signal Group很是疑惑,产生了以下几个问题:


(1)什么是Signal Group,为什么要用Signal Group?


(2)什么是Shadow buffer,Shadow buffer机制为什么能保证数据的一致性?


(3)一个信号又属于一个信号组,那么可以为这个信号和所在的信号组都配置Notificaition吗?


(4)信号组包括的信号可以跨不同IPDU吗?


(5)RTE在获取一个Signal时,如果这个Signal属于一个Signal Group,那么Signal的值冲Signal的buffer获取还是Shadow buffer获取?


本文先梳理一遍Com Signal报文的手法过程过程,然后回答这些问题。

AUTOSAR 通信服务-Com模块概念详解

正文

1.Signal Group概念介绍

为了支持复杂数据类型的AUTOSAR概念,AUTOSAR COM提供了信号组的解决方案。AUTOSAR COM模块一致地发送和接收信号组,为复杂数据类型提供必要的一致性。信号组支持静态配置。对于每个信号组,可以配置一个符号名。


AUTOSAR COM模块通过shadowbuffer缓冲区机制实现信号组的一致性,即RTE访问shadowbuffer缓冲区中的组信号。如果shadow缓冲区需要与I-PDU同步,RTE可以使用Com_SendSignalGroup或Com_ReceiveSignalGroup显式触发。同步是以原子方式执行的。


一个信号组一致性的替代方法是启用信号组数组API Com_SendSignalGroupArray和com_receivesignalgrouparray

1.1 Initialization

通过调用Com_Init, AUTOSAR COM模块将初始化发送端信号组的shadow缓冲区,一个结构良好的SWC在调用Com_ReceiveSignalGroup之前尝试读取组信号。

1.2 Transmission

如果Com_SendSignal或com_invalidatsignal被调用的信号属于一个信号组,那么AUTOSAR COM将只更新这个信号组的shadow缓冲区。除非I-PDU内容发生了变化,否则不需要像TMS评估那样进行进一步的I-PDU处理。


如果为信号组调用Com_SendSignalGroup, AUTOSAR COM模块将自动复制shadow缓冲区内容到I-PDU buffer。


Example with two group signals signal_a and signal_b, which belong to group_x:

/* copy a to shadow buffer */

Com_SendSignal (signal_a, &a);

/* copy b to shadow buffer */

Com_SendSignal (signal_b, &b);

/* copy shadow buffer to I-PDU */

Com_SendSignalGroup (group_x)

1.3 Reception

当信号组数据被Com_ReceiveSignalGroup复制到shadow buffer后,可以通过调用com_receivessignal函数从shadow缓冲区接收组信号。


如果为一个信号组调用Com_ReceiveSignalGroup, AUTOSAR COM模块将自动将数据从I-PDU缓冲区复制到shadow缓冲区。


Example with two group signals signal_a and signal_b, which belong to group_x:

/* copy I-PDU to shadow buffer */

Com_ReceiveSignalGroup (group_x);

/* copy a from shadow buffer */

Com_ReceiveSignal (signal_a, &a);

/* copy b from shadow buffer */

Com_ReceiveSignal (signal_b, &b)

1.4 Notifications

下表显示,所有的通知功能仅可为信号组配置,而不是为单个组的信号配置。

AUTOSAR下Com模块中Signal Group详解 -汽车开发者社区

2. Signal Group 的接收过程

AUTOSAR下Com模块中Signal Group详解 -汽车开发者社区

1)如果是Defered IPDU,那么Com_RxIndication只完成IPDU数据拷贝到IPUD的buffer中去,下一个mainfunction中中再去解析IPDU中的Signal。


2)如果是Immediate IPDU,那么Com_RxIndication中完成IPDU数据拷贝到IPUD的buffer中去后还完成Signal和Signal Group数据的解析和拷贝到Buffer当中去,1和2中buffer是一个地方。

Rte_COMCbk_ISigGrp_Receive_Test_Signal_Group(void)
{
Array_uint8_8 data;  

(void)Com_ReceiveSignalGroup(((VAR(Com_SignalGroupIdType, AUTOMATIC))0));

(void)Com_ReceiveShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))0), &data[0]);
 
 (void)Com_ReceiveShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))1), &data[1]);
 
 (void)Com_ReceiveShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))2), &data[2]);
 
 (void)Com_ReceiveShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))3), &data[3]);
 
 (void)Com_ReceiveShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))4), &data[4]);
 
 (void)Com_ReceiveShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))5), &data[5]);
 
 (void)Com_ReceiveShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))6), &data[6]);
 
 (void)Com_ReceiveShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))7), &data[7]);
 
 (void)Rte_Rx_000001(&data);
 }

AUTOSAR下Com模块中Signal Group详解 -汽车开发者社区

AUTOSAR下Com模块中Signal Group详解 -汽车开发者社区

3)如果配置了一个Signal Group的Notification且所在的IPDU是Immediate IPDU,那么在Com_RxIndication中就会调用Notification,且这个Notification的名字为Rte_COMCbk_<sg>。

AUTOSAR下Com模块中Signal Group详解 -汽车开发者社区

4)Notification中会调用Com_ReceiveSignalGroup完成Signal Group数据从shadow buffer拷贝到Signal Group buffer中去,然后调用Com_ReceiveShadowSignal将Signal Group数据拷贝到外部buffer中去。

3. Signal Group的发送过程

AUTOSAR下Com模块中Signal Group详解 -汽车开发者社区

Rte_ImplWrite_Transmit_Test_Signal_Group(P2CONST(uint8, AUTOMATIC, RTE_APPL_DATA) data) /* 1 */n = RTE_E_OK;
  {
  VAR(Std_ReturnType, AUTOMATIC) rtn = RTE_E_OK;
  
  Rte_memcpy(Rte_Ms_000001, data, sizeof(Array_uint8_8));

Com_UpdateShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))0), &data[0]);

Com_UpdateShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))1), &data[1]);

Com_UpdateShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))2), &data[2]);

Com_UpdateShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))3), &data[3]);

Com_UpdateShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))4), &data[4]);

 Com_UpdateShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))5), &data[5]);

 Com_UpdateShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))6), &data[6]);

Com_UpdateShadowSignal(((VAR(Com_SignalIdType, AUTOMATIC))7), &data[7]);

 if ( ((VAR(StatusType, AUTOMATIC))E_OK) != Com_SendSignalGroup(((VAR(Com_SignalGroupIdType, AUTOMATIC))1)) )
 {
  rtn = ((VAR(Std_ReturnType, AUTOMATIC))RTE_E_COM_STOPPED);
  }
  
  /* Send complete */
  return rtn;
  }

AUTOSAR下Com模块中Signal Group详解 -汽车开发者社区

AUTOSAR下Com模块中Signal Group详解 -汽车开发者社区

信号组是可以直接和SWC进行Pport-Rport连接的,也就是说SWC可以通过RTE读取或者发送Signal Group数据。在通过RTE发送Signal Group数据的时候,首先通过通过Com_UpdateShadowSignal函数将要发送的数据拷贝到Signal Group的shadow buffer中去,然后调用Com_SendSignalGroup将shadow buffer中的数据以原子操作的方式拷贝到IPDU的Buffer中去,并且触发IPDU的数据发送(调用PduR_Transmit)。

4.问题回答

问题1:什么是Signal Group,为什么要用Signal Group?

答:为了支持复杂数据类型的AUTOSAR概念,AUTOSAR COM提供了信号组的解决方案。AUTOSAR COM模块一致地发送和接收信号组,为复杂数据类型提供必要的一致性。通俗的来讲,Signal Group就是一个IPDU里面的几个Signal的集合,这几个Signal的操作需要保持一致性(也就是如果外部发送方有对这几个数据中一个或多个数据有改动,那么接收方也需要同时更新,比如车道线的一阶参数、二阶参数、三阶参数、常数项是4个不同的Signal,这4个Signal就需要保持一致性,不然到最后仪表上画出来的车道线就会偶发的和实际不一样)。


问题2:什么是Shadow buffer,Shadow buffer机制为什么能保证数据的一致性?

答:本来COM模块为每个Rx Signal和Rx Signal都设有一个Signal Buffer的,Signal数据的收发都通过这个Signal来实现。如果Signal Group,COM模块为每个Signal Group又额外设置了一片Signal Group Buffer,这片Buffer就是所谓的Shadow buffer。在发送Signal Group的时候,将Signal Group拷贝到IPDU Buffer的时候是原子操作(也就是拷贝前关闭全局中断,拷贝后打开全局中断,保证拷贝过程不被中断干扰)保证了Signal Group数据的一致性。


问题3:一个信号又属于一个信号组,那么可以为这个信号和所在的信号组都配置Notificaition吗?

答:AUTOSAR规范规定,一个Signal配置为一个Signal Group的Group Signal后只能有Signal Group的Notification。


问题4:信号组包括的信号可以跨不同IPDU吗?

答:这个问题在AUTOSAR规范当中没有找到。通过阅读源码发现Signal Group中的Signal应该都是同一帧IPDU中的Signal(这个有待进一步确认)。


问题5:RTE在获取一个Signal时,如果这个Signal属于一个Signal Group,那么Signal的值从Signal的buffer获取还是Shadow buffer获取?

答:从Shadow buffer中获取。


参考文献:

[1]Specification of Communication AUTOSAR Release 4.2.2

[2]Specification of PDU Router AUTOSAR Release 4.2.2

[3]Specification of CAN Interface AUTOSAR CP Release 4.3.1

[4]Specification of LIN Interface AUTOSAR CP Release 4.3.1


文章转载自公众号:汽车电子嵌入式

分类
1
收藏
回复
举报
回复
相关推荐