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.

[参考译文] CCS/TMS320F28379D:拼写错误时出现问题

Guru**** 2020320 points
Other Parts Discussed in Thread: TMS320F28379D
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/922741/ccs-tms320f28379d-issue-when-typecasting

器件型号:TMS320F28379D

工具/软件: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。

    谢谢、此致、

    乔治