项目场景:
使用HAL库进行内部flash操作时,出现uint64_t类型数据左移溢出的警告
解决方案:
在操作前添加强制类型转换,进行强制扩展
例如:
wdata = data[i*8]<<56;
wdata |= data[i*8+1]<<48;
wdata |= data[i*8+2]<<40;
wdata |= data[i*8+3]<<32;
wdata |= data[i*8+4]<<24;
wdata |= data[i*8+5]<<16;
wdata |= data[i*8+6]<<8;
wdata |= data[i*8+7];
修改为:
wdata = (unsigned long long int)data[i*8]<<56;
wdata |= (unsigned long long int)data[i*8+1]<<48;
wdata |= (unsigned long long int)data[i*8+2]<<40;
wdata |= (unsigned long long int)data[i*8+3]<<32;
wdata |= (unsigned long long int)data[i*8+4]<<24;
wdata |= (unsigned long long int)data[i*8+5]<<16;
wdata |= (unsigned long long int)data[i*8+6]<<8;
wdata |= (unsigned long long int)data[i*8+7];
原因分析:
STM32是32位系统,默认支持32位的扩展。所以在做超过32位的扩展时,需要添加
(unsigned long long int)
进行强制扩展