想象以下 Adc 设置:AdcGroupA 包含三个 AdcChannels AdcCh1、AdcCh2、AdcCh3,如下面的 Adc 配置 (arxml) 所示:
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>AdcGroupA</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/Adc/AdcConfigSet/AdcHwUnit/AdcGroup</DEFINITION-REF>
<PARAMETER-VALUES>
...
</PARAMETER-VALUES>
<REFERENCE-VALUES>
<ECUC-REFERENCE-VALUE>
<DEFINITION-REF DEST="ECUC-REFERENCE-DEF">/Adc/AdcConfigSet/AdcHwUnit/AdcGroup/AdcGroupDefinition</DEFINITION-REF>
<VALUE-REF DEST="ECUC-CONTAINER-VALUE">/ActiveEcuC/Adc/AdcConfigSet/AdcHwUnit_ADC0/AdcCh1</VALUE-REF>
</ECUC-REFERENCE-VALUE>
<ECUC-REFERENCE-VALUE>
<DEFINITION-REF DEST="ECUC-REFERENCE-DEF">/Adc/AdcConfigSet/AdcHwUnit/AdcGroup/AdcGroupDefinition</DEFINITION-REF>
<VALUE-REF DEST="ECUC-CONTAINER-VALUE">/ActiveEcuC/Adc/AdcConfigSet/AdcHwUnit_ADC0/AdcCh3</VALUE-REF>
</ECUC-REFERENCE-VALUE>
<ECUC-REFERENCE-VALUE>
<DEFINITION-REF DEST="ECUC-REFERENCE-DEF">/Adc/AdcConfigSet/AdcHwUnit/AdcGroup/AdcGroupDefinition</DEFINITION-REF>
<VALUE-REF DEST="ECUC-CONTAINER-VALUE">/ActiveEcuC/Adc/AdcConfigSet/AdcHwUnit_ADC0/AdcCh2</VALUE-REF>
</ECUC-REFERENCE-VALUE>
</REFERENCE-VALUES>
<SUB-CONTAINERS>
</SUB-CONTAINERS>
</ECUC-CONTAINER-VALUE>
在复杂驱动程序或 IoHwAb 中,AdcGroup 可以按如下方式使用:
Adc_ValueGroupType AdcGroupAReadDataBuffer[SIZE_OF_GROUPA];
Adc_StartGroupConversion( AdcGroupA );
…
Std_ReturnType Adc_ReadGroup( AdcGroupA, &AdcGroupAReadDataBuffer[0] );
…
valueAdcCh1 = AdcGroupAReadDataBuffer[IDX_GROUPA_CH1];
valueAdcCh2 = AdcGroupAReadDataBuffer[IDX_GROUPA_CH2];
valueAdcCh3 = AdcGroupAReadDataBuffer[IDX_GROUPA_CH3];
AUTOSAR Adc 规范针对 Adc_ReadGroup [SWS_Adc_00369] 说“组通道值按通道编号升序存储。” 但这里指的是哪个“频道号”?如果我查看一些 Adc 驱动程序的行为,它显然与 AdcChannel.AdcChannelId 无关。因此,我假设该顺序与 AdcGroup 中对 AdcChannels 的引用列表有关。但是:这个列表没有索引或 ID!请参阅上面的 arxml 片段。所以,顺序/排序不是由任何东西决定的。或者是吗?似乎在我的工具链中,顺序由您将 AdcChannel 添加到 AdcGroup 的顺序定义:
#define IDX_GROUPA_CH1 (0u)
#define IDX_GROUPA_CH2 (2u)
#define IDX_GROUPA_CH3 (1u)
由此产生的问题是:如何找出 AdcGroup(数据缓冲区)中的 AdcChannel 使用的索引?是否有为此生成的定义(将替换 IDX_GROUPA_CH?在上面的示例中)?请不要告诉我:“看看 arxml 文件”或“你已经配置好了”。请记住,C 代码的开发人员通常无权访问或许可配置工具链。