为什么将8位变量编译为16位变量?

时间:2019-01-11 22:29:53

标签: c compiler-construction

我正在使用TI C2000接管一个旧项目。编译了所有好的设置断点,没有问题。

直到今天我发现一个奇怪的问题:我定义了一个unsigned char变量,但是可以正确地进行简单计算。我设置了一个断点,发现编译器将其设置为16位变量。

但是8位数组被编译为8位没问题。

以下是此屏幕截图: enter image description here

如果我在软件中将其视为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才能使软件正常工作。

1 个答案:

答案 0 :(得分:3)

On this platform 1个字节是16位,所以unsigned char是16位类型。 buf是由四个16位值组成的数组。