Как создать тип данных Union Implementation с битовыми полями в Autosar?

Я изучаю, как создавать сложные типы данных в AUTOSAR. Я искал указанную ниже проблему, но не нашел ни одной, которая показала бы мне путь с хорошей ясностью.

Я хотел бы создать IRV в таком виде:

union {
    uint8 u8Value;
    struct {
        uint8 bit0 : 1;
        uint8 bit1 : 1;
        ...
    }stMyBits;
}unMyUnion;

Основываясь на моем собственном исследовании, я нашел в SW Data Prop Ref то, что называется SwBitsRepresentation, где вы можете указать начальную позицию и количество битов. Однако это не сработало, потому что код, сгенерированный RTE, выглядел так:

union {
    uint8 u8Value;
    struct {
        uint8 bit0;
        uint8 bit1;
        ...
    }stMyBits;
}unMyUnion;

Компиляция этого определенно НЕ применит желаемые битовые поля.


person ember    schedule 16.11.2019    source источник


Ответы (1)


Битовые поля C не поддерживаются в AUTOSAR из-за отсутствия переносимости. Если вы хотите реализовать семантику битового поля, вам необходимо определить ImplementationDataType, который агрегирует SwDataDefProps, который, в свою очередь, относится к CompuMethod категории BITFIELD_TEXTTABLE.

В определении CompuMethod вы можете указать битовые поля и их семантику.

Генератор RTE будет учитывать эту конфигурацию, создавая макросы доступа, которые обеспечивают более или менее удобный способ доступа к битам в переменной хоста.

Дополнительную информацию об определении CompuMethod категории BITFIELD_TEXTTABLE можно найти в документе AUTOSAR «Шаблон программного компонента TPS».

person Uwe Honekamp    schedule 16.11.2019
comment
Спасибо за направление! Я раскопаюсь в этом как можно скорее и вернусь сюда! - person ember; 17.11.2019
comment
Большое спасибо @Uwe! Это именно то, что мне нужно. ImplementationDataType находится на уровне кода C. Отсюда мы можем определить несколько CompuMethod, в моем случае BITFIELD_TEXTTABLE, для AutosarDataType категории VALUE. BITFIELD_TEXTTABLE содержит все необходимые атрибуты, такие как маска, верхний / нижний пределы и, конечно, значение, которое вы хотите указать для каждого бита с помощью атрибута COMPU-CONST. - person ember; 17.11.2019