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.

[参考译文] TDA4VM:__ attribute ___未应用于存储器段中的所有变量。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1442886/tda4vm-__attribute__-not-applied-to-all-variables-in-a-memory-section

器件型号:TDA4VM

工具与软件:

尊敬的 TI 支持部门:

我使用 TDA4VM 处理以太网应用/引导加载程序、

我们在内存段中遇到了 Eth 变量的128字节对齐/分配问题

链接器部分

Eth_Mem 4.30def:  

无法正常工作用例:

段变量:  

仅分配和对齐了第一个变量  

工作用例:

部分变量

所有变量已分配且对齐128 (0x80)、如果每个变量使用单独的段 Start/Stop (启动/停止)。

编译器:  TI_RT2.1.3 Arm_Clang_Compiler_

编译器选项:  

问)它是编译器还是编译器选项存在问题?

此致、

Hari

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

    您好!

    ]如果为每个变量使用了单独的节"开始/停止"、则分配并对齐了所有变量128 (0x80)。

    可以、您必须为每个变量使用1287字节对齐宏、因为它使用"__attribute__"而不是"#pragma SECTION"。

    q)编译器或编译器选项是否有问题?

    这不是问题、对每个变量的选项进行使用。

    此致、
    Sudheer

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

    尊敬的 Sudheer:

    是的、我们使用的是  __属性___  选项仅如下"_attribute__((aligned (128)、section ("ETH_DATA_NO_INIT_UNSPECIFTE_SECTION_128"))。"

    您能告诉我、有什么适用的选项吗 "每个变量"

    此致、

    Hari

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

    您好!

    [报价 userid="592034" url="~/support/processors-group/processors/f/processors-forum/1442886/tda4vm-__attribute__-not-applied-to-all-variables-in-a-memory-section/5535022 #5535022"]

    是的、我们使用的是  __属性___  选项仅如下"_attribute__((aligned (128)、section ("ETH_DATA_NO_INIT_UNSPECIFTE_SECTION_128"))。"

    您能告诉我、有什么适用的选项吗 "每个变量"

    [报价]

    我的意思是、由于__ attribute ____用于段映射、因此不能将多个变量一起使用。

    如果是#pragma、则可以从头应用到尾 、即同时应用多个变量。

    此致、
    Sudheer

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

    尊敬的 Sudheer:

    我尝试了不同的#pragma 选项、没有什么适合我的。

    在 TI MCAL 演示中、以下方法正在使用

    我尝试了同样的选项,这在我的情况下是不起作用的。

    根据 MCAL 演示链接器调整了我们的链接器脚本。

    MCAL.c 和,h 文件在我们的应用程序和附加文件中是相同的 Eth_Cfg。

    e2e.ti.com/.../TDA4_5F00_TI.zip

    您能告诉我、我需要注意的区别是什么。

    此致、

    Hari

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

    您好!

    在 TI MCAL 演示中、以下方法使用

    __attribute__应该起作用、如上所述、它假定要为每个变量使用。

    我尝试了同样的选项、但该选项在我的情况下无效。

    我可以看到、您曾提到、如果您在第一个注释中为每个变量添加、它是有效的。 这与您的第一个评论是矛盾的。

    此外、您需要128字节对齐、这不是标准数据类型。

    请按照您在工作场景的第一条评论中提到的方式使用。

    此致、
    Sudheer

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

    尊敬的 Sudheer:

    是的、__ attribute __仅在每个变量具有如下所示的 START 和 STOP 段时有效。

    上面是 TI MCAL Eth 驱动程序使用 EB Tresos 生成的修改代码。

    实际生成的代码如下所示、其中一个 START 和 STOP 部分用于多个变量、如下所示  

    并且不适用于__ attribute __案例、且仅适用于第一个变量。

    *修改对 MCAL 驱动程序生成的/静态代码无效。   

    不确定上述 TI MCAL Eth 示例是如何处理的。

    *为了测试目的,我直接使用了 MCAL 示例中的 Eth_Mem 文件,在我的案例中不起作用。

    此致、

    Hari

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

    您好!

    抱歉、我这边有测试。

    您无需为每个变量设置启动和停止。
    我已经测试了所有变量按顺序排列。 (默认 TI SDK)



    将段映射到链接器文件中不同的地址之后。


    仅供参考、已在链接器文件中进行更改。


    此致、
    Sudheer

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

    尊敬的 Sudheer:

    是的、正如您在上面评论和测试的那样、TI MCAL 示例运作良好。

    在本例中、MemMap.h 文件和编译器选项两个不同。

    我已经附加了我们的 MemMap.h 文件和编译器选项。

    请替换并测试您的现有文件。

    我试过了、但没有工作。

    此致、

    Harie2e.ti.com/.../7115.TDA4_5F00_TI.zip

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

    您好!

    您能否像在 TI MCAL 中一样使用 MemMap.h 进行一次交付和检查?
    这可能不是编译器选项的问题。

    您是否还可以通过从编译器选项中删除以下内容进行检查?
    -- unused_section_elimination=off

    此致、
    Sudheer

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

    您好!

    已尝试这两个要点、仍然是相同的问题。

    是否可以有一个短的调试会话?

    此致、

    Hari

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

    您好!

    在构建 eth_app 时、您是否面临任何链接器问题?

    它是分配有__attribute__的宏(ETH_VAR_NO_INIT_128)。
    如果在变量初始化时使用__attribute__定义宏、则宏将按属性置于 section 中。

    请在未放置在已定义段中的变量之前检查宏的值。

    此致、
    Sudheer

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

    您好!

    构建 TI eth_app 时没有问题、它会按预期运行。

    同一个宏不起作用、在我们的情况下、无法确定我在哪里做错了。

    是否有确定问题的可行方法?

    此致、

    Hari  

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

    您好!

    [报价 userid="592034" url="~/support/processors-group/processors/f/processors-forum/1442886/tda4vm-__attribute__-not-applied-to-all-variables-in-a-memory-section/5548345 #5548345"]

    同一个宏不起作用、在我们的情况下、无法确定我在哪里做错了。

    是否有确定问题的可行方法?

    [报价]

    如上所述、在 ETH_STOP_SEC_VAR 之后、"ETH_VAR_NO_INIT_128"宏的值在您的案例中并不存在、即宏可能未定义。

    此致、
    Sudheer

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

    尊敬的 Sudheer:

    在编译中有一个观察结果、

    测试目的我在 如下所示的 Eth_Cfg .c 文件中修改了一个变量并进行了编译。

    var (uint64、ETH_VAR_NO_INIT_128) VAR_Ctrl_ Eth_Ring 0_VR0[16U] Cq_Egress_;

    var (uint64、ETH_var) Var_Ctrl_0_Var0[16U] Eth_Ring Cq_Egress_;

    编译 eth_test_app 示例时出错。

    同样、我也使用应用进行过尝试、编译时也没有出现任何编译错误。

     在的预处理期间似乎是这样  var (uint64、 ETH_VAR_NO_INIT_128) VAR_Ctrl_ Eth_Ring 0_VR0[16U] Cq_Egress_;

    var (uint64、 ETH_VAR_NO_INIT_128) 不考虑在内。

    不知道我在这里缺少什么。

    此致、

    Hari

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

    您好!

    [报价 userid="592034" url="~/support/processors-group/processors/f/processors-forum/1442886/tda4vm-__attribute__-not-applied-to-all-variables-in-a-memory-section/5556509 #5556509"]

    同样、我也使用应用进行过尝试、编译时也没有出现任何编译错误。

     在的预处理期间似乎是这样  var (uint64、 ETH_VAR_NO_INIT_128) VAR_Ctrl_ Eth_Ring 0_VR0[16U] Cq_Egress_;

    var (uint64、 ETH_VAR_NO_INIT_128) 不考虑在内。

    [报价]

    同样,我也在上面解释,通过评估的时间  var (uint64、 ETH_VAR_NO_INIT_128) VAR_Ctrl_ Eth_Ring 0_VR0[16U] Cq_Egress_;、  可能是" ETH_VAR_INIT_128"   未定义。

    请检查的侧边代码  ETH_VAR_INIT_128   mem_map.h 文件中下载。

    此致、
    Sudheer

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

     您好!

    • 如果 " ETH_VAR_INIT_128"   未定义、我应该会得到的编译错误  var (uint64、 ETH_VAR_NO_INIT_128) VAR_Ctrl_ Eth_Ring Cq_Egress_ 0[16U]。
    • 马科" ETH_VAR_INIT_128"  在 Eth_MemMap.h 文件中定义如下
    • #define ETH_VAR_NO_INIT_128 \
      __attribute__(((aligned (128)、section ("ETH_DATA_NO_INIT_UNSPECIFTED_SECTION_128")))
    • 我已修改  var (uint64、 ETH_VAR_NO_INIT_128) VAR_Ctrl_ Eth_Ring Cq_Egress_ 0[16U]  最终目的  var (uint64、ETH_var ) Var_Ctrl_0_Var0[16U] Eth_Ring Cq_Egress_。  在本例中、它至少应该会出现编译错误。
    • 根据我的理解  ETH_VAR_INIT_128  在编译期间正在丢弃/不考虑。

    是否可以有一个短的调试会话?

    此致、

    Hari

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

    您好!

    [报价 userid="592034" url="~/support/processors-group/processors/f/processors-forum/1442886/tda4vm-__attribute__-not-applied-to-all-variables-in-a-memory-section/5558628 #5558628"]
    • 如果 " ETH_VAR_INIT_128"   未定义、我应该会得到的编译错误  var (uint64、 ETH_VAR_NO_INIT_128) VAR_Ctrl_ Eth_Ring Cq_Egress_ 0[16U]。
    • 马科" ETH_VAR_INIT_128"  在 Eth_MemMap.h 文件中定义如下
    • #define ETH_VAR_NO_INIT_128 \
      __attribute__(((aligned (128)、section ("ETH_DATA_NO_INIT_UNSPECIFTED_SECTION_128")))
    • 我已修改  var (uint64、 ETH_VAR_NO_INIT_128) VAR_Ctrl_ Eth_Ring Cq_Egress_ 0[16U]  最终目的  var (uint64、ETH_var ) Var_Ctrl_0_Var0[16U] Eth_Ring Cq_Egress_。  在本例中、它至少应该会出现编译错误。
    • 根据我的理解  ETH_VAR_INIT_128  在编译期间正在丢弃/不考虑。
    [报价]

    您可以打印的值  ETH_VAR_INIT_128  在起始和结束宏中、检查值是否为__attribute__?
    请参考下面的来在编译时使用#pragma message".

    "https://stackoverflow.com/questions/1562074/how-do-i-show-the-value-of-a-define-at-compile-time 来检查宏的值


    此致、
    Sudheer

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

    尊敬的 Sudheer:

    感谢您的支持!

    我们通过不同于 TI mcal 示例的方式解决了问题。

    您可以关闭此票证。

    在 TI Clang 编译器中观察到一个问题、它是否与编译器的支持渠道相同?

    此致、

    Hari Krishna Kaki

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

    您好!

    [报价 userid="592034" url="~/support/processors-group/processors/f/processors-forum/1442886/tda4vm-__attribute__-not-applied-to-all-variables-in-a-memory-section/5573948 #5573948"]

    感谢您的支持!

    我们通过不同于 TI mcal 示例的方式解决了问题。

    您可以关闭此票证。

    [报价]

    感谢您的更新。

    在 TI clang 编译器中发现问题、编译器是否使用同一个支持通道?

    否编译器是不同的论坛。 请创建一个新票证、其中包含您遇到的 TI Clang 编译器问题/预期的特性的信息。

    此致、
    Sudheer

x 出现错误。请重试或与管理员联系。