CH32v20x单片机risc-v内核uint64_t类型移位后变量为0解决办法
CH32v20x单片机编写程序时遇到uint64_t 变量移位后为0。
uint64_t temp1 = 0;
uint64_t temp2 = 0;
temp1 = (pData[0]<<24)|(pData[1]<<16)|(pData[2]<<8)|pData[3];
myResControlBoard.rcSetRes = temp1<<32;
temp2 = (pData[4]<<24)|(pData[5]<<16)|(pData[6]<<8)|pData[7];
myResControlBoard.rcSetRes |= temp2;
CH32v20x默认支持32位的扩展。所以在做超过32位的扩展时,需要添加(unsigned long long int)
进行强制扩展 。
下面程序可以正常运行
temp1 = (pData[0]<<24)|(pData[1]<<16)|(pData[2]<<8)|pData[3];
myResControlBoard.rcSetRes = (unsigned long long int)temp1<<32;
temp2 = (pData[4]<<24)|(pData[5]<<16)|(pData[6]<<8)|pData[7];
myResControlBoard.rcSetRes |= temp2;