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.

[参考译文] Compiler/CC3220SF-LAUNCHXL:从固定宽度字段填充结构

Guru**** 2609955 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/637740/compiler-cc3220sf-launchxl-populate-a-structure-from-fixed-width-fields

部件号:CC3220SF-LAUNCHXL

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

我有一个这样的结构:

typedef结构
{
_u32时间;// 4字节
_u32 cnt;// 4.
_i16温度;// 2.
_U16幽默;// 2.
_U16 batt;// 2.
_u8 RSSI;// 1
}录制_t;

我想将它转换成4+4+2+2+1=13字节的阵列,以将它存储在闪存中,并轻松检索它。 示例:

record_t record;
record.Time=1510054330;
record.cnt=1.2345万;
//填充其他字段

_u8 *raw =&record;

WriteToFlash (地址,原始,13);

//

ReadFromFlash (其他地址, &raw,13);
//现在raw包含新数据

//如何将内容分配给记录变量? 

我担心数据类型中的任何填充或对齐。 当然,我可以手动操作,逐字段操作,但如果有直接(和可靠)的方法,那就更好了。

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

    使用sizeof(),它将告诉您包括填充在内的确切大小。 然后根据该情况分配阵列。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Memcopy()应该可以传输数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于字段是按降序排列的,因此不会有任何填充,除非可能是在结构的末尾。
    声明原始数据数组时,请确保正确对齐它。 您可以这样做:
    \#pragma DATA_ALIGN (ting_AT_address,__alignof__(record_t))
    unsigned char thing_AT_address[N];