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.

[参考译文] 编译器/TMS320F28377S:Code Composer Studio™︎论坛

Guru**** 2482225 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/822919/compiler-tms320f28377s-code-composer-studio-forum

器件型号:TMS320F28377S

工具/软件:TI C/C++编译器

您好!

我需要将数据从结构复制到 char 数组。  

我使用了以下代码。  


typedef 结构体 TPR_MM1

  最大浮动;
  最小浮动;  
  浮点 val;
}TPR_MM1;

TPR_MM1 tpmm、tptest;

memcpy ((unsigned char *) conf_data、(unsigned char *)&tpmm、sizeof (TPR_mm));         //将结构复制到 char 数组

 memcpy ((unsigned char *)&tptest、(unsigned char *) copy_data、sizeof (TPR_MM1));       //将字符数组复制到 结构。

但它在观察窗口中显示了奇怪的数据。 经过一些研究后、我发现结构声明中需要属性 packed。  

typedef 结构体 TPR_MM1

  最大浮动;
  最小浮动;  
  浮点 val;
}TPR_MM1 __attribute__((((packed);

但它有一些用处。 此外、在编译器中还会出现"属性打包不适用于此处"之类的问题

首先、当我在第一个 memcpy 之后检查观察窗口时、字符数组中的数据会很奇怪、如。 每个元素为1个字节、但观察窗口在每个元素中显示两个字节信息  

字节顺序。  

char 数组如何在具有字节对齐存储器的每个元素中存储16位值。 我怀疑问题是 char 表示为16位的字。  

请帮助我理解并解决此问题。  

此致、

Stalin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在 C28x 上、存储器的最小可寻址单元是一个16位宽字。  因此、C 类型 char 不是8位宽、而是16位宽。   不支持 GCC 类型属性 packed。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的乔治:

    感谢您的快速回复。 我知道 char 取16位。 在这种情况下,如何将具有 float 或 int 属性的结构复制到 char 数组中?

    我需要这样做、才能将数据存储在 EEPROM 中作为字符数组、并检索分配给 struct 的字符数组。 如何做到这一点?  

    此致、

    Stalin  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的乔治:  

    您能否在这种情况下进行更新?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    关于此代码...

    [引用 user="ysn"]

    memcpy ((unsigned char *) conf_data、(unsigned char *)&tpmm、sizeof (TPR_mm));         //将结构复制到 char 数组

     memcpy ((unsigned char *)&tptest、(unsigned char *) copy_data、sizeof (TPR_MM1));       //将字符数组复制到 结构。

    [/报价]

    我假设有两个拼写错误。  第一个 memcpy 应该是...

    memcpy ((unsigned char *) copy_data、(unsigned char *)&tpmm、sizeof (TPR_MM1)); 

    第一个参数应为 copy_data、而不是 conf_data。  第三个参数是 TPR_MM1的大小、而不是 TPR_MM 的大小   

    第二个 memcpy 完成后、tpmm 和 tptest 是否具有相同的值?   

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    第二个 memcpy 完成后、tpmm 和 tptest 是否具有相同的值?   

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Gearoge、

    我的问题不是 memcpy 或 typo。 实际上、这是因为我的 EEPROM 驱动程序只需要 char (8位)。 编译器中的 char 为(16位)。

    我已修改 EEPROM 驱动程序以获取16位值并存储在连续存储器中。 然后问题得到解决。

    感谢您的支持和跟进。  

    此致、
    Stalin Yanneboina