C2000 DSP 是现代化蝎子粑粑独一份的 16 位字节,所以内存寻址时和通常的 CHAR_BIT == 8 不同。这在协议层到数据零拷贝强转时需要格外注意。过去处理过,今天遇到又忘了,得重新手测。记录一下吧。 U32 实际内存排布 C2000 0x87654321 4321 8765 通常的8位小端 0x87654321 21 43 65 87 浮点值 实际内存排布 内存排布对应U32 C2000 123.456 E979 42F6 0x42F6E979 通常的8位小端 123.456 79 E9 F6 42 0x42F6E979 另外其对于取址对齐有很高的要求,32位数据要求地址也是 2 byte 对齐,例子如下。Cuint16_t buffer[8]; uint32_t t32; /* 以下两个实际上都会以 [0][1] 取内存转为 u32 */ // 在通常的CPU中,以下会以 [1][2] 取内存转 u32 t32 = *(uint32_t *)(& buffer[1]); // 在通常的CPU中,以下是 [0][1] 正确零拷贝取法 t32 = *(uint32_t *)(& buffer[0]); /* 以下两个则会以 [2][3] 取内存转为 u32 */ t32 = *(uint32_t *)(& buffer[3]); t32 = *(uint32_t *)(& buffer[2]);
C2000 的特殊内存排布
C2000 DSP 是现代化蝎子粑粑独一份的 16 位字节,所以内存寻址时和通常的 CHAR_BIT == 8 不同。
这在协议层到数据零拷贝强转时需要格外注意。过去处理过,今天遇到又忘了,得重新手测。记录一下吧。
另外其对于取址对齐有很高的要求,32位数据要求地址也是 2 byte 对齐,例子如下。