我正在接手一个使用 TI C2000 的旧项目。编译一切正常,设置断点,单步调试也没有问题。
直到今天我发现了一个奇怪的问题:我定义了一个 unsigned char
类型的变量,但是在进行简单计算时却出现了错误。我设置了断点,并发现编译器将其转换为了 16 位变量。
但 8 位数组却可以正常编译为 8 位。
如果在软件中将其视为 16 位,则一切都正常。但我以前从未遇到过此类问题。
源代码在这里:
//check CRC
unsigned char buf[4];
unsigned char crc;
buf[0] = commandWord >> 8;
buf[1] = commandWord & 0xff;
buf[2] = data[0] >> 8;
buf[3] = data[0] & 0xff;
crc = crc8(buf, 4);
if (0xf000U == (safetyWord & 0xf000U)) {
if ((crc & 0x00ff) == (safetyWord & 0x00ff)) {
ret = TLE_SUCCESS;
} else {
ret = -1;
}
} else {
ret = -1;
}
我不得不使用 crc & 0x00ff
才能使软件正常工作。