小编Joe*_*mel的帖子

在Hex文字后保护"U"后缀

我和我的同事之间U就十六进制表示的文字后缀有一些争论.请注意,这不是关于此后缀的含义或其后果的问题.我在这里找到了几个主题,但我没有找到我的问题的答案.

一些背景资料:

我们试图达成一套我们都同意的规则,从那时起就将它作为我们的风格.我们有一份2004年Misra C规则的副本,并决定将其作为起点.我们对完全符合Misra C标准不感兴趣; 我们正在挑选我们认为最能提高效率和稳健性的规则.

上述准则第10.6条规定:

"U"后缀应适用于所有无符号类型的常量.

我个人认为这是一个很好的规则.它只需要很少的努力,看起来比显式转换更好,并且更明确地显示了常量的意图.对我来说,将它用于所有未签名的内容是有意义的,而不仅仅是数字,因为通过允许异常来执行规则不会发生,特别是对于常用的常量表示.

但是,我的同事认为十六进制表示不需要后缀.主要是因为我们几乎只使用它来设置微控制器寄存器,并且在将寄存器设置为十六进制常量时,符号性无关紧要.

我的问题

我的问题不在于谁是对还是错.它是关于确定是否存在后缀的缺失或存在改变操作结果的情况.有没有这样的情况,还是一致性问题?

编辑:澄清; 特别是关于通过为它们分配十六进制值来设置微控制器寄存器.是否会出现后缀可能会产生影响的情况?我觉得不会.例如,飞思卡尔处理器专家将所有寄存器分配生成为无符号.

c microcontroller

6
推荐指数
1
解决办法
1694
查看次数

代码有效,但抛出不兼容的指针类型警告

在学习C代码时尝试一下,我想测试一下.它按预期工作,但抛出警告

警告1来自不兼容指针类型的分配[默认启用]

代码很简单.我在这里所做的就是在atmega2560上切换PIN B7.我有一个LED挂钩,我可以看到它闪烁,所以我知道它按预期工作.

任何人都可以解释为什么我看到这个错误,即使它按预期执行?代码如下:

#include <avr/io.h>
#include <util/delay.h>

void main(void) {
    int *ptr;
    ptr = &PORTB; // This line throws the warning

    DDRB = (1 << 7);

    while(1) {
        *ptr = (1 << 7);
        _delay_ms(1000);

        *ptr = (0 << 7);
        _delay_ms(1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

PORTB是一个8位寄存器,每个引脚有一位用于控制该引脚是高电平还是低电平.

现在,我很高兴它有效.但这些警告让我烦恼.

c pointers casting avr 8-bit

4
推荐指数
2
解决办法
1153
查看次数

标签 统计

c ×2

8-bit ×1

avr ×1

casting ×1

microcontroller ×1

pointers ×1