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.

[参考译文] 编译器/TMS570LS0432:在一组书帖上使用palign

Guru**** 2587365 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/586661/compiler-tms570ls0432-using-palign-on-a-group-of-sections

部件号:TMS570LS0432

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

链接器palign指令是否可以在一组节上使用?

本文档描述了组对齐的处理:

可以使用绑定,对齐或命名内存以与单个相同的方式分配组
输出部分。

...

使用组选项时,可以将绑定,对齐或分配到命名内存中
仅为组指定。 不能对使用绑定,命名内存或对齐
组中的部分。

我看不到它专门描述了一个组的"与填充对齐"的地方。  我曾假设palign指令是适用的,但在我对TI 17.3 v.0.STS和TI v.8的测试中5.2 ,我在链接器.cmd文件中使用以下内容时没有看到我定义的组的任何填充:

章节

   mysolosection0:> FLASH0,palign (8),crc_table (crcTable,算法=tms570_CRC64_iso)

   组(组1){
      我的部分*
   }> FLASH0,palign (8),crc_table (crcTable,算法=tms570_CRC64_iso)
}

具体地说,我在.map文件中看到了以下内容:

  输出                                 属性/
书帖  页面   原点     长度      输入书帖
-----------------  --------   --------   --------
我的部分*
*         0万   0000002万   0000.0005万     
                 0万20   000000012万00001    sections.obj0.0001万 sections.obj (mysection1:Retain)
                 0万21   000000012.1万00001    sections.obj0.0001万 sections.obj (mysection2:Retain)
                 0万22   000000012.2万00001    sections.obj0.0001万 sections.obj (mysection3:Retain)
                 0万23   000000012.3万00001    sections.obj0.0001万 sections.obj (mysection4:Retain)
                 0万24   000000012.4万00001    sections.obj0.0001万 sections.obj (mysection5:Retain)

mysolosection0
*         0万   0000002.8万   0000.0008万     
                 0万28   000000012.8万00001    sections.obj0.0001万 sections.obj (mysolosection0:Retain)
                 0万29   000000072.9万00007    --hole0.0007万 --hole --[填充=0]
...

链接器生成的CRC表

crcTable @ 0.0003万c8记录:2,大小/记录:24,表大小:56
   mysection*:algorm=tms570_CRC64_ISO(ID=10),load addr=0.002万,size=0.0005万,crc=8d8d8da38e0.0003万
   mysolosection0:算法=tms570_CRC64_ISO(ID=10),加载addr=0.0028万,大小=0.0008万,CRC=8e00000000000003

首先,我希望CRC表中的每个条目的大小是64位的倍数,以便在我们的代码中计算CRC64,其次,有明确定义的孔覆盖任何所需的填充。

--谢谢

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

    感谢您通知我们该问题,并提交一个简明的测试案例。  我可以再现同样的结果。  我在 SDOWP系统中提交了CodeGen-2181以对此进行调查。  欢迎您使用我签名中下面的SDOWP链接进行关注。

    谢谢,此致,

    -George

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

    1138,

    PA浪 形可应用于组。 如果删除mysolosection0上的palign (8),则会发现其起始地址将保持为0x0.0028万,但其大小将变为1。 您在地图文件中看不到任何孔,因为palign应用于组,而不是组内的部分。 如果要对齐每个mysection*,则需要对每个部分(而不是组)进行palign (8)。

    谢谢!
    Dunni

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

    感谢您跟进我的报告! 您所描述的正是我期望看到的行为,也正是我们要使CRC代码正常工作所需的行为。

    换言之,我不希望每个mysection *都单独对齐或填充。 我只希望将这些部分的整套组合成一个组,以便对齐和填充。

    不幸的是,正如我在上文所述,这不是我所看到的。 暂时忽略了没有——————————————————————— 在Group group1的映射文件中,您还可以看到在映射文件的输出部分中,"mysection*"的长度为5,在映射文件的CRC表部分中,大小为5。

    --谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CodeGen-2181将此问题列为"这不是错误。PAGign on Group按预期工作。"

    我相信我的上述测试案例表明,这一集团并不起作用。 您能否提供一个测试案例,表明一个组的工作原理是什么?

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

    您好1138:

    输出部分是您可能要使用的部分,而不是组。 尝试将mysection*收集到输出部分,然后在输出部分应用palign (8)。 例如,

    章节

       mysolosection0:> FLASH0,palign (8),crc_table (crcTable,算法=tms570_CRC64_iso)

       mysection :{*(mysection*)}> FLASH0,palign (8),crc_table (crcTable,算法=tms570_CRC64_iso)
    }

    谢谢!
    Dunni

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    太棒了,谢谢,看起来这正是我们当前需要的,而不是使用组。

    我们已经讨论了我们可能需要更严格控制某些部分的顺序的可能性,这可能会导致我们重新审视集团支持的状态。

    从流程角度来看,我通常认为您有兴趣评估是否在集团工作,以防需要将其作为已知问题进行跟踪或仅更新文档。

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

    1138,

    对组的palign (8)导致组的大小为8的倍数。 但是,它不会更改组中包含的单个输入部分的大小。

    在您的示例中,如果您删除mysolosection0上的palign (8),但在Group上保留palign (8),则您将看到其mysolosection0的起始地址将保持0x0.0028万,但其大小将更改为1。  

    因此,我现在的结论是,小组的工作与预期的一样。

    谢谢!
    Dunni

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

    恐怕我不明白。 为什么我们谈论mysolosection0? 我看不出它如何与palign是否在组上工作有关。mysolosection0不是组组组1的一部分。

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

    您好1138:

    我应该首先提到组输出部分是严格的逻辑实体,不在地图文件中表示。 使用初始链接程序命令文件和映射文件,mysection*是包含 mysection[1-5]输入部分的输出部分的名称。 输出部分mysection *包含在Group group1中。 在您的示例中,palign (8)向group1引入了填充。 但是,映射文件中不表示组。 您可以对组和输出部分应用palign。对输出部分的palign将更改其大小。对组的palign将为组添加填充。 但是,它不会更改组中包含的输出部分的大小。 如果要向输出部分添加填充,则必须将palign直接应用到输出部分。

    我在您的示例中提到mysolosection0,只是为了显示填充确实正在添加到组中,并且此填充会影响mysolosection0的起始地址。 或者,尝试为FLASH0设置填充值,然后地图文件将显示组上填充的孔。

    关于您最初对代码中计算CRC64的担忧,您是否遇到过任何问题? 我不认为你会考虑最后8个字节如果"不可见组"加零。

    我希望这一解释对您有所帮助。 如果您需要更多信息,请告诉我。

    谢谢!
    Dunni