0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是Signal Group,为什么要用Signal Group?

832065824 来源:汽车电子嵌入式 作者:Tomas Li 2022-11-23 09:23 次阅读

前言

最近在研究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显式触发。同步是以原子方式执行的。

一个信号组一致性的替代方法是启用信号组数组APICom_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

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

6da358d8-6abe-11ed-8abf-dac502259ad0.png

2.Signal Group的接收过程

6dcb72dc-6abe-11ed-8abf-dac502259ad0.png

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_8data;

   (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);
}

6e0d855a-6abe-11ed-8abf-dac502259ad0.png

6e336086-6abe-11ed-8abf-dac502259ad0.png

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

6e632726-6abe-11ed-8abf-dac502259ad0.png

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

3. Signal Group的发送过程

6e858a46-6abe-11ed-8abf-dac502259ad0.png

Rte_ImplWrite_Transmit_Test_Signal_Group(P2CONST(uint8, AUTOMATIC, RTE_APPL_DATA) data) /* 1 */
{
   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;
}

6ea0d760-6abe-11ed-8abf-dac502259ad0.png

6ed0a4d6-6abe-11ed-8abf-dac502259ad0.png

信号组是可以直接和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中获取。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AUTOSAR
    +关注

    关注

    9

    文章

    330

    浏览量

    21138
  • PDU
    PDU
    +关注

    关注

    0

    文章

    91

    浏览量

    16822

原文标题:AUTOSAR下Com模块中Signal Group详解

文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    QuartusII中使用signal tapII

     使用signal tapII可以在线测试硬件运行数据。使用方法如下:1、创建并设置stp文件。在file中选择new>signal tap,便创建了stp文件。2、设置stp文件的内容。包括
    发表于 01-17 10:01

    CD4007里的group A subgroup是什么意思

    请问有人知道CD4007里的group A subgroup是什么意思吗,就如下面图片里的所示,搞不懂?谢谢了
    发表于 05-23 10:56

    【AMD社招】Signal Validation Engineer

    AMD超威半导体上海研发中心招聘 Signal Validation Engineer,请有意向者将简历发送到 Maggie1.Zhang@amd.com 以及
    发表于 03-13 16:30

    没有与IODELAY GROUP关联的IDELAYCTRL

    元素与IODELAY_GROUP'tri_mode_ethernet_mac_iodelay_grp'相关联,但没有与此IODELAY_GROUP关联的IDELAYCTRL。单独的示例设计运行良好但是
    发表于 10-25 15:26

    如何使用命令添加用户到group

    useradd 示例 – 增加一个新用户到附加用户组¶新增加一个用户并将其列入一个已有的用户组中需要用到 useradd 命令。如果还没有这个用户组,可以先创建该用户组。命令参数如下:useradd
    发表于 09-01 17:25

    定义一个group想对这个group单独优化需要怎么实现呢?

    使用scons进行编译,我定义了一个group,想对这个group单独优化。需要怎么实现呢?SConscript 作如下定义CPPDEFINES = ['']LOCAL_CCFLAGS = '-O2
    发表于 03-23 11:19

    DIGITAL RF SIGNAL GENERATORS 3

    DIGITAL RF SIGNAL GENERATORS 3410 Series Operating Manual:This manual explains how to use the 3410
    发表于 11-14 16:33 52次下载

    When Signal Integrity Matters

    I recently served on a panel where I was asked, “At whatpoint does signal integrity become
    发表于 01-15 10:08 0次下载

    PROGRAMME Digital Signal Proce

    PROGRAMME Digital Signal Processing (DSP)
    发表于 07-05 11:21 10次下载

    风河被VDC Research Group评为最领先嵌入式L

    风河被VDC Research Group评为最领先嵌入式Linux厂商 Intel公司旗下全资子公司风河系统公司(Wind River)日前宣布,风河公司被VDC Research Group评为
    发表于 08-05 09:59 597次阅读

    CAD中组(Group)如何应用,组和图块有何区别?

    图块大家用得都比较多了,但组(Group)用到的人并不多,因为在AutoCAD菜单里似乎找不到这个命令,在浩辰CAD倒是提供了组工具的工具栏,在扩展工具里,可以快速创建和分解组。 组到底
    发表于 10-23 16:00 4209次阅读
    CAD中组(<b class='flag-5'>Group</b>)如何应用,组和图块有何区别?

    Group Communication for the Constrained Application Protocol (CoAP)

    Group Communication for the Constrained Application Protocol (CoAP),CoAP下的组通信协议说明
    发表于 11-26 15:22 10次下载

    16Bit Group Ripple Adder

    16Bit Group Ripple Adder。
    发表于 03-21 15:07 0次下载

    雷蛇加入Khronos Group会员 正式支持Vulkan规范

    Khronos Group于周四发布了一份简短的声明,PC游戏外设厂商雷蛇已经正式成为会员之一。Khronos Group是开源Vulkan API背后的非营利性组织。现在Vulkan API已经
    发表于 12-03 11:57 786次阅读

    为什么在语义相同的情况下group by和distinct效率相同呢?

    在语义相同,无索引的情况下:distinct效率高于group by。原因是distinct 和 group by都会进行分组操作,但group by可能会进行排序,触发filesort,导致sql执行效率低下。
    的头像 发表于 01-09 10:46 713次阅读