Совместимое объявление для __attribute__ ((section (". Abc.dfe"))) const volatile uint8 attributeVariable = 0; - MISRA-совместимый - PullRequest
0 голосов
/ 10 мая 2019

Следующая константа объявлена ​​в файле проекта, который я тестирую на нарушения правил MISRA, так как

__attribute__ ((section(".abc.dfe"))) const volatile uint8 attributeVariable = 0;

Тест MISRA выдает следующее сообщение

A compatible declaration shall be visible when an object or function with external linkage is defined. 
Global definition of 'attributeVariable ' variable has no previous declaration.

Я уже исправил другиеглобальные определения, в которых не использовалось ключевое слово * 1007, объявив его как

extern const volatile uint8 attributeVariable;

в заголовочном файле.Я не уверен, что могу написать объявление в заголовке таким же образом, используя ключевое слово __attribute__.Влияет ли __attribute__ на то, как я должен написать внешнее объявление переменной?

1 Ответ

1 голос
/ 10 мая 2019

Здесь есть две проблемы.

Прежде всего MISRA-C требует, чтобы код был стандартным C, поэтому вы должны создать отклонение от правила об использовании стандартного C.

Во-вторых, MISRA-C не любит, когда вы объявляете переменные в области видимости файла, которые не static. Глобальные переменные не одобряются не только MISRA-C, поэтому спросите себя, действительно ли вы должны выставлять эту переменную повсеместно или вместо этого вы можете получить к ней доступ через функции установки / получения.

При этом, я считаю, __attribute__ работает почти так же, как другие классификаторы типов. Вы можете написать это в начале или в конце объявления и т. Д. Поэтому не должно быть проблем с написанием, например:

extern const volatile uint8_t attributeVariable __attribute__ ((section(".abc.dfe")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...