misra相关内容

GCC变量映射与MISRA-C

我主要知道两种方法(有许多变体,使用双字段,每个外围设备的数据结构,等等)使用GCC声明内存映射寄存器: 使用以右地址开头的指针,如volatile uint32_t *pMyRegister = (uint32_t *)0xDEADBEEFUL; 或定义一个变量并手动映射它,如volatile uint32_t MyRegister __attribute((section(".regi ..
发布时间:2022-04-10 17:20:21 其他开发

C 结构体信息隐藏(不透明指针)

我目前对 C 结构的信息隐藏概念有些困惑. 这个问题的背景是一个嵌入式 c 项目,对 OOP 的了解几乎为零. 到目前为止,我总是在相应模块的头文件中声明我的 typedef 结构.所以每个想要使用这个结构体的模块都知道结构体类型. 但经过 MISRA-C 检查后,我发现了中等严重性警告:MISRAC2012-Dir-4.8- 结构的实现不必要地暴露给翻译单元. 经过一番研 ..
发布时间:2021-08-31 19:14:48 其他开发

整数提升(MISRA C:2012 Rule 7.2)

MISRA强制对无符号整数常量使用 U 后缀 uint32_t the_answer = 0x42U; 我觉得 U 有点像样板,因为没有它,这行很容易理解. 所以我想知道这个规则有多重要,以及 unsigned int x = 1 是否真的是隐式整数提升的错误示例. 解决方案 您是正确的,根据规则10.3的例外,此特定示例中的U是多余的: “如果一个基本符号类型的非负整 ..
发布时间:2021-05-16 19:14:04 其他开发

C89中的{0}初始化程序的标准如何?

在我当前使用MISRA 2004标准的项目中,我们使用了三个GCC编译器,版本3.2.3、4.4.2和5.4.0. 我们使用脚踏开关和c89标准以及大量其他限制运行构建检查.限制之一是必须在声明时初始化所有数据. 我有一个问题,在GCC 3.2.3上,通用零初始化程序{0}仅针对基本单一类型的数组进行编译.如果我有一个结构数组,那么我会得到一个缺失的大括号警告,并且仅当我将{0}更改为 ..
发布时间:2020-11-12 23:14:02 其他开发

MISRA C 2012规则9.1读取未初始化的值

我正面临着违反规则9.1的情况. 我想在初始化之前读取一个自动变量(在声明时具有垃圾值),并在不为null的情况下分配null.如果为null,则使用不同的值. 示例代码: { int8_t reg_num; uint64_t var1[NUM]; for (reg_num = 0; reg_num ..
发布时间:2020-06-30 22:33:30 其他开发

MISRA违反规则10.1和枚举

首先,这类似于:如何隐式转换整数类型?,但带有不同的MISRA警告. 编译器不会生成MISRA错误,但是静态分析工具会生成.我正在与工具制造商取得票证. 给出: #include enum Color {RED, VIOLET, BLUE, GREEN, YELLOW, ORANGE}; int main(void) { enum Color my_co ..
发布时间:2020-06-30 22:33:09 其他开发

如何使C代码符合MISRA C:2012标准?

我正在使用PC-Lint将MISRA C:2012标准验证为我的MCU代码. 我遇到了以下错误.在这里发布了示例代码,其中条件语句出现了错误. 1]无符号整数文字,不带'U'后缀[MISRA 2012 Rule 7.2,必填] S_LCB_100, 2]逻辑运算符'&&'右侧的副作用[MISRA 2012规则13.5,必填] while(((0x00000000!= List [Loo ..
发布时间:2020-06-30 22:32:03 其他开发

BLAS和LAPACK库是否符合MISRA标准?

我猜答案是否.但是,我想知道是否有人对此主题有所了解. BLAS和LAPACK库是否符合MISRA标准? MISRA标准(MISRA C:1998,MISRA C:2004,MISRA C:2012)要求极高,我相信BLAS和LAPACK库不符合该标准.因此,如果我的软件项目要求符合MISRA,则不应使用此类库. 对此问题的任何见识都将得到极端的赞赏:) 解决方案 除非该库被积 ..
发布时间:2020-06-30 22:32:01 其他开发

从原始内存读取值(符合MISRA)

我正在尝试读取以前写在NVM闪存上的变量的值. 我的代码是: uintptr_t address = getAddress(); //[MISRA C++ Rule 5-2-8] cast from unsigned int to pointer uint16_t value = *(reinterpret_cast(address)); 问题是在MISRA ..
发布时间:2020-06-30 22:31:57 C/C++开发

为什么MISRA规则禁止使用'#undef'?

为什么MISRA规则禁止在程序中使用#undef?如果我想限制任何宏的范围,如何在不使用#undef的情况下做到这一点? 解决方案 基本上,由于MISRA过于偏执并且不信任程序员不知道自己在做什么:-)认真地说,MISRA试图防止某些错误并受到指导相信如果您禁止潜在的有问题的代码构造,软件的可靠性就会突然提高.这是否成立尚有争议.在#undef的情况下,可能的原因是,一旦定义了宏,它的扩展 ..
发布时间:2020-06-30 22:31:51 其他开发

我是否可以选择禁用这两个MISRA规则:每个函数一个语句和强制函数原型?

我们的公司现在是ISO-13485(医疗设备),并且希望使用MISRAC2012.我阅读了该标准,但是如果我认为它可以提高稳定性和可读性,则无法确定是否可以禁用某些规则. 两个示例: MISRA每个函数仅允许1个返回语句.这通常会导致嵌套的条件结构看起来像圣诞树.我真的不认为这条规则会增加安全性,因为它会使代码的可读性降低并且更容易出错. MISRA仅接受具有原型的功能,即使是静 ..
发布时间:2020-06-30 22:30:41 其他开发

MISRA C ++规则5-0-3误报

我的静态分析器抛出以下警告: MCPP规则5-0-3:此复杂表达式被隐式转换为 不同的基本类型 对于以下代码: void func(const uint32_t arg) { //32U has underlying type uint8_t const uint32_t u32a = arg % 32U; //warning issued in this lin ..
发布时间:2020-06-30 22:30:36 C/C++开发

什么时候应该在C中使用UINT32_C(),INT32_C(),...宏?

我在项目中切换到定长整数类型的主要原因是,它们在使用它们时帮助我更清楚地考虑整数大小.通过#include 包括它们还包括许多其他宏,例如打印宏PRIu32,PRIu64,... 要将常量值分配给固定长度的变量,我可以使用UINT32_C()和INT32_C()之类的宏.每当我分配一个恒定值时,我就开始使用它们. 这导致类似于以下代码: uint64_t ..
发布时间:2020-06-30 22:30:32 其他开发

什么是C中链表的忠实替代品?

这个问题可能太宽泛或偏见,但我知道这个站点充满了经验丰富的程序员,我认为这可能会鼓励进行很好的讨论. 我正在用C实现嵌入式应用程序,其中我使用了一个包含结构的链表: struct my { uint16_t x; uint16_t y; char *text; struct my *next; struct my *prev; }; 总 ..
发布时间:2020-06-30 22:30:29 其他开发

Misra 2012背后的基本原理不允许在不同的指针之间进行强制转换

我目前正在从事一个项目,该项目要求代码与Misra 2012兼容.在整个项目中,我们有很多要求的错误警告,告诉我们我们不能将一种类型的指针转​​换为另一种类型的指针.像void *memcpy(void *to, const void *from, size_t n)这样简单的事情会产生两个Misra Required警告,因为to和from都需要分别类型转换为void *和const void ..
发布时间:2020-06-30 22:30:27 其他开发