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.

[参考译文] c29-CGT:管理由编译器创建的常量的限制

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1614317/c29-cgt-limitation-in-the-management-of-constants-created-by-the-compiler

器件型号:C29-CGT

大家好!

编译器会针对以下情况创建类似的常量:

  • 跳转表=>位于“.rodata 段。 “
  • switch table =>位于“.rodata..Lswitch.table 部分。 “
  • string =>位于“.rodata.str1 段。 .1“

客户认为与这些常数相关存在一些限制。

首先、当使用“#pragma CLANG section rodata=“.rodata 时。 “"对于“对于函数、编译器创建的“.rodata"不“不使用“.rodata 段。 “。 这是一个巨大的限制、因为它不允许像对“.text"段“段那样将这些输入段映射到链接器命令文件中的适当输出段。

以下是该代码的“#pragma 部分“示例:

#pragma CLANG section text=“.text.PROJ_ON SEC_CODE_LOCAL_CPU1“ rodata=“.rodata.PROJ_ON SEC_CODE_LOCAL_CPU1“ bss=“.bss.PROJ_ON、PROJ_ON SEC_CODE_LOCAL_CPU1“ data=“.data.PROJ_ON CODE_LOCAL_CPU1“


如果上述问题无法解决:对于跳转表、段的名称不包含关键字、例如开关表的“.Lswitch.table"或“或字符串的“str1",“,这、这使得这些输入段在文件级别或独立于文件进行映射变得不可能、因为必须独立考虑每个函数

您能针对上述问题提出解决方法吗? 此外、是否还有其他方案会在列出的 3 个方案(跳转表,交换表,字符串)上出现相同问题?


此致、
François μ s。

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

    请参阅 此论坛主题。  它抱怨 tiarmclang 上存在同样的问题。  虽然投诉仅限于字符串、但跳转表和切换表的问题是相同的。  注意:已提出问题、并介绍了一种解决方法。  我希望此解决方法对您来说很实用。

    谢谢。此致、

    -乔治

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

    您好、Mock 先生、

    我是客户。

    解决方法可以用于字符串和  switch 表、但它完全不适用于 跳转表、因为在这种情况下、没有表明我们正在处理跳转表的关键字。

    此外、使用此变通办法非常痛苦、因为我们可能有数百个文件需要逐一处理。

    AUTOSAR/MemMap 的一个目标是通过在组件开发期间指定段、然后按照每个组件(而不是每个文件)将这些组件段映射到工程段组件来避免这种情况发生。 此外、使用 MemMap 段可以在定义项目段时提供通用链接器脚本、避免工程对链接器命令文件进行任何进一步更新(始终存在问题风险)。

    您正在谈论的是一个已解决但尚未解决的问题

    1/它并不涵盖所有用例(可能还有其他用例我还没有遇到)

    2 尽管近两年前已经建立,但它尚未被列为优先事项。  在编译函数时、对编译器进行快速修改以考虑编译器创建的所有常量的“#pragma section rodata“的希望并没有真正让人安心

    此致

    Ronan Danioux

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

    您好、Danioux 先生、

    感谢您的反馈。 我将把它带到编译器研发  


    此致、
    François μ s。