我有以下代码行:
uint32_t address = 0x40000000U;
这在使用au-misra2.lnt
配置文件时会出现以下 3 个 PC-Lint 错误:
"*** LINT: "D:\_SVN\LPC1788-32 Dev Kit\Bootloader--4\Loadware\source\led.c"(7, 35) Note 960: Violates MISRA 2004 Required Rule 10.1, Implicit conversion of integer to smaller type"
"*** LINT: "D:\_SVN\LPC1788-32 Dev Kit\Bootloader--4\Loadware\source\led.c"(7, 35) Info 712: Loss of precision (initialization) (unsigned long to unsigned int)"
"*** LINT: "D:\_SVN\LPC1788-32 Dev Kit\Bootloader--4\Loadware\source\led.c"(7, 35) Warning 569: Loss of information (initialization) (31 bits to 16 bits)"
更改为:
uint32_t address = (uint32_t)0x40000000U;
导致赋值为 0。
为什么会发生这种情况?它适用于 32 位 Cortex-M3 处理器,因此应该将 unsigned int.. 分配给 unsigned int - 我不明白为什么它是不可接受的。
有没有人有任何想法?