澄清' 过度转移价值'皮棉警告 -
初始参数如下,
*#define SCC_BUFFERSIZE 0x80*
*uint16 DeviceConfigMsg[10];*
另请参阅下面的编码部分
**DeviceConfigMsg[0] = SCC_BUFFER_SIZE;*
*DeviceConfigMsg[1] = SCC_R_OK;*
*DeviceConfigMsg[2] = SCC_BUFFERSIZE & 0xFF;*
*DeviceConfigMsg[3] = (SCC_BUFFERSIZE>>8) & 0xFF;**
执行代码时,我收到最后一行的lint警告
****DeviceConfigMsg[3] = (SCC_BUFFERSIZE>>8) & 0xFF****
如下。
警告572:prio2:移位值过大(精度8右移8)
我知道0x80<< 8 = 0总是当前,但我现在不能明确指定零,因为宏 SCC_BUFFERSIZE 的值可能会稍后更改。 所以请让我知道如何解决这个lint错误。 如果您需要我的任何其他意见,请告诉我。 我正在使用GHS编译器。
提前致谢,
JEEE
答案 0 :(得分:1)
我认为你只需要压制这个:
DeviceConfigMsg[3] = (SCC_BUFFERSIZE>>8) & 0xFF; //lint !e572
这是一个' bug'在价值追踪系统中。
根据文档
,以下两个应工作#define SCC_BUFFERSIZE (0x0080)
const uint16 SCC_BUFFERSIZE = 0x80;
因为这让Lint知道SCC_BUFFERSIZE最多可以达到16位,并且应该乐意将其移动仅8位。
不幸的是,实际上都没有效果。
因为它们是常量Lint似乎计算出实际值,缩小它们,然后发出警告。
如果您删除了' const'从常量它工作正常:
uint16 SCC_BUFFERSIZE = 0x80;
因为它假定它们可以是任何有效的uint16。
这会使代码变得更糟,因此在这种情况下抑制是更好的解决方法。