Представьте себе следующую настройку 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. Поэтому я предполагаю, что порядок связан со списком ссылок на AdcChannels в AdcGroup. НО: этот список не имеет индекса или идентификатора! См. Фрагмент arxml выше. Итак, порядок / сортировка ничем не определяется. Либо это? Похоже, что в моей инструментальной цепочке порядок определяется последовательностью добавления AdcChannels в AdcGroup:
#define IDX_GROUPA_CH1 (0u)
#define IDX_GROUPA_CH2 (2u)
#define IDX_GROUPA_CH3 (1u)
В результате возникает вопрос: Как мне узнать, какой индекс используется для AdcChannel в AdcGroup (буфере данных)? Есть ли сгенерированное определение для этого (которое заменило бы IDX_GROUPA_CH? В приведенном выше примере )? И, пожалуйста, не говорите мне: «посмотрите файл arxml» или «как вы его настроили». Имейте в виду, что разработчики C-кода часто не имеют доступа или лицензии на Configuration-Tool-Chain.