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.

[参考译文] 编译器:使用Group : table时出现链接器指令段放置问题

Guru**** 2529560 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/568650/compiler-linker-directive-section-placement-problem-using-group-table

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

(TMS570LC4,CCS v 5.5)

在链接程序指令文件中使用:

  矢量(X)          :起源= 0x0万长度= 0x0.004万 vfill = 0xFFFFFFFF
  表(R)            :原始=0x0.004万长度=0x0.002万 vfill =0xFFFFFFFF
  FLASHBOOT (RX)       :原始=0x0.006万长度=0x0007FFA0 vfill = 0xFFFFFFFF

...

  组:>表
   {
       代码
       编码长度
   }

  applEntry   :{}> APPL_entry,           类型= NoLoad

  codecrc   :{}>表,           类型= DSECT
  codelength :{}>表,           类型= DSECT


问题是链接程序将codecrc和codelength放在同一个地址上:

(.map文件)

codecrc 0万 0000004万 0000万 DSECT

编码长度

* 0万 0000004万 0000万 DSECT

是否有方法将offet放置为类似:

代码长度:{}>表+其它内容?

e2e.ti.com/.../TMS570_5F00_link.rar

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

    [报价用户="Simon Lapointe"]

      codecrc   :{}>表,           类型= DSECT
      codelength :{}>表,           类型= DSECT


    问题是链接程序将codecrc和codelength放在同一个地址上:

    [/引述]

    链接程序特别允许对DSECT输出部分执行此操作。  有关  完整的详细信息,请参阅Wiki文章链接器特殊部分类型。  

    请描述您要解决的首要问题。  DSECT不太可能是这样做的权利。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,谢谢,根据这篇文章,我发现这个解决方案并不是那么优雅:

    codecrc :{}>表, 类型= DSECT
    codelength:run = 0x0.0044万,type = DSECT

    它暂时有效,但它有点硬编码。 有没有方法在上一个上添加偏移,什么是同步轴?

    关于总体情况,它是在bootloader和bootloader更新程序的上下文中。 这些位置位于活动区段代码或要写入的代码内,具体取决于您在闪存方案中的位置。 但你说得对,我想应该有更干净的方法来做同样的事情。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用user="Simon Lapointe)]关于总体情况,它是在bootloader和bootloader更新程序的上下文中。 这些位置位于活动区段代码或要写入的代码内,具体取决于您在闪存方案中的位置。 但您说得对,我想它应该有更干净的方法来做同样的事情。[/QUOT]

    很抱歉,但我不明白。  所以我不能给你任何更好的建议。  尽管我仍然确信DSECT是错误的。

    Simon Lapointe 说:
    是否有方法可以在上一个值上添加偏移,什么是同步?[/QUOT]

    我不愿意帮助您使错误的解决方案更好地运行。  尽管如此,请考虑以下几点。

    您可以创建#define符号和简单表达式,就像在C中一样。 类似如下的内容...

    #定义基0x40...
    
    表(R):origin =基准长度=0x0.002万 vfill = 0xFFFFFFFF
    ...
    codecrc :{}>表,type = DSECT
    codelength:run = base+4,type = DSECT 

    谢谢,此致,

    -George

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

    我忽略了你的第一个帖子中需要讨论的内容。

    [报价用户="Simon Lapointe"]

    组:>表
       {
           代码
           编码长度
       }

      applEntry   :{}> APPL_entry,           类型= NoLoad

      codecrc   :{}>表,           类型= DSECT
      codelength :{}>表,           类型= DSECT

    [/引述]

    输出部分codecrc和codelength创建两次。  入组后,DSECT再入组。  这是允许的,但很奇怪。  我不确定这种情况会发生什么。  我希望第二个部分的长度为零。  是这样吗?

    谢谢,此致,

    -George

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

    你说的对,我有一个解析器可以读取.out文件,它检测到它们被创建了2次,第一次是零,第二次是好的。

    您是否有避免 此问题的建议?

    几天后,我会再向您解释整个流程。

    非常感谢。

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

    Simon Lapointe 说:
    您是否有 避免此问题的建议?[/QUOT]

    为每个输出部分指定不同的名称。  

    谢谢,此致,

    -George