This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
我们使用的是 TMS320f28379D 评估板。 我在将 lacal 16位数组拼写为32位变量时遇到问题。
unsigned short int arr[5]={0x1234、0xabcd、0x12ab、0x5577、0xaa55};
unsigned int b;
b =*(unsigned int*)&arr[0];
我希望 b 中的值为0xabcd1234。 但它从之前的存储器字中获取、b 的值为0x1234FFFF。 在表达式窗口 (*(unsigned int*)&arr[0])中,它显示为预期(0xabcd1234)。
在 C2000编译器中、int 类型为16位宽。 所以我不知道这是怎么的...
[引用 user="Subash Sundaresan"] b 的值为0x1234FFF[/引用]
(笑声) 情况。 对于32位宽整数值、请使用 long 类型。
但更好的解决方案是使用标准头文件 stdint.h 中提供的固定宽度类型 在本例中、您将使用 uint16_t 和 uint32_t 请从您首选的 C 编程语言书籍、网站等了解有关 stdint.h 的更多信息。
另一个细节需要注意。 阵列的对齐可能错误。 回想一下、C28x CPU 将存储器寻址为16位字、而不是8位字节。 16位宽元素的数组可以从奇数或偶数字地址开始。 所有32位宽数据类型(长整型、浮点型)都必须与偶数字地址对齐。 如果数组从奇数地址开始,则此代码...
b =*(uint32_t *)&arr[0];
(笑声) 不奏效。 为避免此问题,请使用#pragma DATA_ALIGN 在偶数字边界上对齐数组...
#pragma DATA_ALIGN (arr、2) uint16_t arr[5]={0x1234、0xabcd、0x12ab、0x5577、0xaa55};
请在 C28x 编译器手册中搜索 DATA_ALIGN。
谢谢、此致、
乔治