【发布时间】:2019-01-11 22:29:52
【问题描述】:
我正在接管一个使用 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 才能使软件正常工作。
【问题讨论】:
-
我看不出代码有什么问题,但您确实需要包含一个最小的、完整的、可编译的示例。代码 sn-p 中没有定义安全词。您使用的是什么编译器和选项?
-
检查无符号字符的大小。如果它不是您的代码所期望的 8 位,则可能会发生这种情况。可能是16位。不寻常,但合法。
-
您确定
crc8返回unsigned char吗?也许它返回一个char或signed char,这是让事情变得无聊的转换。 -
众所周知,DSP 内核向不同的鼓手进军。这个页面还不错:e2e.ti.com/support/microcontrollers/c2000/f/171/t/…