__attribute__((section(“。abc.dfe”)))的兼容声明const volatile uint8 attributeVariable = 0; -符合MISRA

时间:2019-05-10 10:24:17

标签: c++ c embedded misra

我正在测试是否有违反MISRA准则的项目文件中声明了以下const

__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.

我已经修复了其他全局定义,这些全局定义没有使用__attribute__关键字,而是将其声明为

extern const volatile uint8 attributeVariable;
头文件中的

。我不确定是否可以使用__attribute__关键字时以相同的方式将声明写在标头中。 __attribute__是否影响我应该编写变量的外部声明的方式?

1 个答案:

答案 0 :(得分:1)

这里有两个问题。

首先,MISRA-C要求代码应为标准C,因此您必须与使用标准C的规则产生偏差。

第二,MISRA-C不喜欢您在文件范围内声明不是static的变量。全局变量不仅不被MISRA-C所困扰,所以问问自己,是否真的必须在整个地方公开此变量,或者是否可以通过setter / getter函数访问它。

话虽如此,我相信__attribute__的工作原理与其他类型限定符非常相似。您可以在声明的开头或结尾等处编写它。因此,例如编写应该没有问题:

extern const volatile uint8_t attributeVariable __attribute__ ((section(".abc.dfe")));