gpt4 book ai didi

c - 如何删除固件中按位运算的 MISRA C 错误/警告?

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:17 25 4
gpt4 key购买 nike

我在 Code Composer Studio 中使用 MISRA C 2004 标准.在外围设备初始化期间,我总是遇到有关按位运算的错误。

在编译器的.h文件中,定义是这样的。

#define SFR_8BIT(addr)  extern volatile unsigned char addr

SFR_8BIT(REG1);

#define REG2 REG1

现在在我的代码中,如果我使用

REG2 |= 0x01;

MISRA C 弹出这些错误:

  1. Bitwise operators shall not be applied to operands whose underlying type is signed - #1393-D (MISRA-C:2004 10.1/R)

  2. The value of an expression of integer type shall not be implicitly converted to a different underlying type if it is not a conversion to a integer type of the same signedness.

我不想更改编译器 .h 文件,我想消除这些警告。

最佳答案

据推测,您的 char 是 8 位而 int 是(至少)16。这意味着 unsigned char 的所有值都可以表示为(带符号的)int。这反过来意味着在您的表达式 REG2 |= 0x01; 中,您的 unsigned char 将被提升为 int,然后 OR 操作执行,然后将结果转换回 unsigned char

如果我没记错的话,将常量更改为 unsigned char 应该可以防止:

REG2 |= (unsigned char)0x01;

或:

unsigned char one = (unsigned char)0x01;

REG2 |= one;

关于c - 如何删除固件中按位运算的 MISRA C 错误/警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10039075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com