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/AM5726:存储器对齐错误

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/771857/ccs-am5726-wrong-memory-alignment

器件型号:AM5726

工具/软件:Code Composer Studio

您好!

以下问题是与上一个帖子相关的结果之一、在该帖子中、通过 DMA 与 UART FIFO 进行的数据传输无法正常工作。

e2e.ti.com/.../754190

UART DMA 传输无法按预期工作的一个问题是、 接收数据并保存正在传输的数据的缓冲区不是128[字节]对齐、尽管我们添加 了_属性_(对齐(128)))指令、如下图所示。

情况如下:

1) 1)结构 SafeCardOutputBuffer 是 C++类的成员变量。
2) 2)结构 SafetyCardOutputBuffer 未对齐128[byte]。
3) 3)正在系统堆上创建类的实例、如下所示:
    UartCyclicChannel* cUartCyclicChannel ={NULL};
    cUartCyclicChannel =新的 UartCyclicChannel (0);
4) 4)我将 CCS  版本7.4.0.00015与 GNU v6.3.1 (Linaro)编译器结合使用

如果您需要更多详细信息、请告诉我。

谢谢、

Andreas

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

    问题是这个新呼叫...

    [引用用户="Andreas Halbe"]     cUartCyclicChannel =新的 UartCyclicChannel (0);[/quot]

    我找不到任何明确说明由新返回的存储器地址对齐的文档。  但它不太可能是128字节。  它可能是最大内置类型的最大对齐方式、即8字节。   

    我建议您实现一个内存分配例程、此例程返回与128字节对齐的内存地址、并调用它而不是新的。

    谢谢、此致、

    乔治

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

    客户不想对齐整个类,他们只想对齐作为类实例一部分的成员变量。 因此__attribute__关键字不起作用。 为什么是这样? 您对此有更深入的了解吗?

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

    建立结构内部字段对齐的唯一方法是首先将整个结构对齐到相同对齐。  一般情况下都是如此。  例如、假设结构包含类型为 double 的字段。  该类型要求对齐8字节。  因此、编译器必须将整个结构对齐到8字节。  然后、编译器会对齐结构中的 double 变量。

    您的客户具有类似的情况、但对齐约束为128字节。  虽然成本高昂、但将结构内部的字段对齐到128字节的唯一方法是首先将整个结构对齐到128字节。  由于 NEW 不会返回与128字节对齐的地址、因此必须实现和使用自定义分配例程。

    谢谢、此致、

    乔治