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.

[参考译文] AM6442:有关 TI ARM 编译器中#pragma pack 的查询

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/991680/am6442-query-regarding-pragma-pack-in-ti-arm-compiler

器件型号:AM6442

代表客户发布此信息:

ARM 优化 C / C +编译器 v20.2.0.LTS 用户指南"5.11.24 pack Pragma"在 R5F 中被称为并定义如下。
■定义
・test.h
定义 XXX 16

#pragma pack (8)
typedef struct test_TG{
   uint16 aaa;
   int16  bbb;
   浮动32 CCC;
   float32 ddd[XXX];
   Int16  eee;
   int16  fff;
} test_Pack;
#pragma pack ()

・test.c
volatile test_Pack test __attribute__(section("test_section"));

编译通过了此定义(无错误、无警告)、但当我检查映射文件时、它似乎未与8个字节对齐。
我认为除了定义之外还需要设置吗?

■映射文件
70080088 测试<-大小为0x4C (76)。 pragma pack、假设为0x50 (80)
700800d4 dmy0

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

    目前、请忽略#pragma pack。  您希望解决什么问题?  您希望结构测试具有哪些属性?

    谢谢、此致、

    乔治

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

    目的是始终将结构与 typedef test_Pack (例如:test) 地址对齐、以在8字节边界对齐。 目的是在从这些结构读取数据时最大限度地减小缓存的影响。 该 pragma 是否应与定义它们的所有结构一起使用、而不是围绕拼写错误使用?  

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

    请勿使用#pragma pack。  将 aligned 属性应用于 typedef ...

    typedef struct test_tg {
        Uint16  aaa;
        int16   bbb;
        float32 ccc;
        float32 ddd[XXX];
        int16   eee;
        int16   fff;
    } TEST_PACK __attribute__((aligned(8)));

    谢谢、此致、

    乔治