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.

[参考译文] 编译器/TMS320F28386D:hex2000输出文件地址不适合对齐128位

Guru**** 2459240 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/964813/compiler-tms320f28386d-hex2000-output-file-address-not-fit-alignment-128-bits

器件型号:TMS320F28386D

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

您好!

我使用 hex2000将.out 转换为.b00。

hex2000.exe 路径为"C:\ti\ccs930\ccs\tools\compiler\ti-cgt-C2000_18.12.5.LTS \bin"

这是我的命令: hex2000.exe "inputFileName"-boot -sci8 -b

我通过 在2838x_flash_lnk_cpu1.cmd 中的 align (8)设置所有闪存。

附加我的 CPU1.cmd 文件

e2e.ti.com/.../2838x_5F00_flash_5F00_lnk_5F00_cpu1_5F00_toTi.txt

但是、在 hex2000输出文件中、我的第一个块从地址0x88008开始、大小为0xFFFE。

第2个块从地址0x98006 (0x88008 + 0xFFFE)开始、不适合 128位对齐。

这会导致我的引导加载程序无法使用 FLASHAPI 在0x98006上写入数据。

我如何才能算出它?

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

    感谢您将此问题通知我们。  我可以重现问题行为。  我已开始内部讨论接下来应该发生什么。  请耐心等待。

    谢谢、此致、

    乔治

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

    尊敬的 乔治:

    您能否在解决此问题后立即提供特殊的固定测试版本 hex2000?

    谢谢你。

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

    [报价用户="Frederick LIN"]您能否在解决此问题后立即提供一个特殊的固定测试版本 hex2000?

    我相信我们可以找到一种可行的解决方法。  如果可以、这意味着您可以立即解决这个问题。

    为了帮助我找到该解决方法、请提交链接器映射文件。 请将其附加到您的下一个帖子。  因此论坛接受它、请将文件扩展名.txt 添加到其中。

    谢谢、此致、

    乔治

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

    尊敬的 乔治:

    机密注意事项、我可以通过电子邮件或私人邮件发送地图文件吗?

    我们认为 论坛 过于公开。

    如果可以、您更喜欢 使用哪种电子邮件或私人邮件?

    谢谢、此致

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

    请通过私人消息向我发送地图文件。  将鼠标悬停在我的屏幕名称或头像上。 将弹出一个框。 单击 发送私人邮件。 在出现的消息撰写界面中,使用回形针图标附加地图文件。 因此论坛将接受它、添加文件扩展名.txt

    谢谢、此致、

    乔治

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

    尊敬的 乔治:

    我已经为 .cmd 和.map 发送了一条专用消息。

    谢谢你

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

    感谢您提交链接器命令文件和链接器映射文件。  这使我能够制定一种变通办法。  我相信这种变通办法将使您能够避免这一问题。  但是、由于我没有任何东西、我对它的测试能力有限。  我可能错过了一些东西。

    对于正在阅读此主题的其他人... 请了解此处描述的变通办法对于该客户的链接器命令文件非常具体。

    请阅读文章 链接器命令文件入门的前半部分、了解一些背景信息。

    当十六进制实用程序为引导加载布置已初始化的段时、如果段大于0xFFe 字、则将其拆分。  如果要拆分的段具有对齐要求、则拆分第二部分的地址也应以相同的方式对齐。  错误是第二个对齐被忽略。  权变措施是使用链接器的一种称为段拆分的功能、以防止十六进制实用程序看到任何大于0xFFe 字的段。

    所有更改都在链接器命令文件中实现。  十六进制实用程序调用完全相同。

    在您的特定程序中、只有.text 段大于0xfffe 字。  因此、这是必须尽早拆分的唯一部分。  为此、需要拆分 分配.text 的存储器范围。  这会影响分配给相同存储器范围的所有其他段。

    这是内存范围...

    FLASHEN1:origin = 0x088008、length = 0x037FB8 //片上闪存*
    

    将其更改为一组连续的内存范围,并跨越相同的内存范围...

    OCF1 :origin = 0x088008、length = 0x00FFF8
    OCF2 :origin = 0x098000、length = 0x00FFF8
    OCF3 :origin = 0x0A7FF8,length = 0x00FFF8
    OCF4 :origin = 0x0B7FF0,length = 0x007FD0
    

    OCF 表示片上闪存。  选择0xFF8字的长度是因为它是最大的数字、小于0xFFe 字、这会导致下一个范围从8字对齐的地址开始。   

    下面是如何拆分.text。。。

    .text:>> OCFS2 | OCFS2 | OCF3 | OCF4、align (8)
    

    运算符>>是用于拆分输出段的语法。  当输出段对于第一个存储器范围太大时、它将被拆分并继续分配到第二个存储器范围。  拆分始终发生在输入段边界上。  因此、绝不会拆分单个函数。   

    分配给 FLASHEN1的所有其他输出段都必须更改为类似于...的内容。

    .cinit:> OCF1 | OCF2 | OCFS2 | OCFS2 | OCFS2、align (8)
    

    请注意这是如何使用>而不是>>的。  因此、不会发生段拆分。  输出段被分配到可以完全包含它的那组存储器范围的第一个。

    对于具有不同的加载和运行分配的输出段,更改类似于...

    ramfuncs:load = OCF1 | OCFS2 | OCF3 | OCF4,
    run = CPU1RAMGS7BGS9,
    load_start (RamfuncsLoadStart),
    load_size (RamfuncsLoadSize),
    load_end (RamfuncsLoadEnd),
    run_start (RamfuncsRunStart)、
    run_size (RamfuncsRunSize)、
    run_end (RamfuncsRunEnd)、
    align (8)
    

    请告诉我此变通办法是否可以避免该问题。

    谢谢、此致、

    乔治

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

    尊敬的 乔治:

    很不错!!

    我可以  通过 FlashAPI 成功刻录 CPU1和 CPU2并按 预期运行。

    您是否会修复 hex2000中的大小拆分错误?  

    修复 hex2000并发布新版本后、我可以单击"已解决"吗?

    谢谢、此致、

    弗雷德里克

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

    [引用 USER="Frederick LIN]您是否会修复 hex2000中的大小拆分错误?  [/报价]

    我提交 了 EXT_EP-10175 以解决此问题。  欢迎您通过该链接访问该链接。

    [引用 user="Frederick LIN"]在修复 hex2000并发布新版本后,我能否单击“Resolved”?

    通过提交问题、现在可以将问题交给工程团队来解决。  因此、该线程标记为"TI 认为已解决"。  从支持的角度来看、该螺纹已关闭、无需采取进一步的操作。 将线程标记为 TI 认为已解决是传达此问题的一种方式。 请注意、我们绝不认为问题已整体解决。

    谢谢、此致、

    乔治