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.

[参考译文] TMS320F28377S:十六进制2000

Guru**** 2604705 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/679172/tms320f28377s-hex-2000

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

我正在尝试使用 hex2000将.out 文件转换为 Intel hex 格式。

选项脚本:

abc.out
-i
-o abc.hex
-fill 0xFFFF
-memwidth 16
-romwidth 16 

我得到的输出如下所示:

>>警告:080000h 上的'Dfu1ResetVector'部分位于未配置的存储器中(已跳过)
>>警告:080002h 上的'Dfu1RamFunc'部分落在未配置的存储器中(已跳过)
>>警告:080a74h 的'Dfu1Text'部分落在未配置的存储器中(已跳过)
>>警告:080b74h 的“Dfu1Econst”部分落在未配置的内存中(跳过)

我是否错过了选项脚本中的内容?

谢谢。

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

    我看不到这些选项的问题。 您列出了调用 hex2000时包含的所有内容? 您也不包含链接器命令文件? 我在使用闪存的 F28377S 示例上运行了这些选项、但没有看到任何警告。

    可能尝试使用较新编译器版本中的较新 hex2000、我使用 v18.1.0.LTS 进行了测试

    可以查看编译器用户指南中的 hex2000部分: http://www.ti.com/lit/spru513

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

    我在项目中有多个页面用于将 DFU 与应用分离、警告显示十六进制文件中不包含 DFU 段。

    我确实在链接器脚本中定义了这些存储器段

    MEMORY
    {
    PAGE 7:
    RAMLS0_5:origin = 0x008000,length = 0x003000
    RAMGS456:origin = 0x010000,length = 0x003000
    
    // Flash sector_A
    DFU1_RESET:origin = 0x080000,length = 0x000002
    DFU1_text:origin = 0x080002,length = 0x001FFE
    } 

    根据 spru513p 12.15

    未配置的内存错误:

    说明:COFF 文件包含一个段、其加载地址超出 ROMS 指令中定义的存储器范围。

    操作:更正由 ROMS 指令定义的 ROM 范围以覆盖所需的存储器范围、或修改段加载地址。 请记住、如果未使用 ROMS 指令、存储器范围默认为整个处理器地址空间。 因此、删除 ROMS 指令也可能是一种权变措施。

    为什么在我的选项文件中没有 ROMS 指令时仍会发生此类错误?

    谢谢。

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

    您会收到错误、因为您要将这些存储器设置为"page 7"。 F28377S 使用统一存储器、因此没有单独的页面。 据我所知、hex2000仅显示为"PAGE 0"、这就是您遇到错误的原因。 我使用本地示例确认了这一点、该示例使用的是"PAGE 0"、并将其更改为"PAGE 7"、从而导致未配置的存储器错误。

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

    我这么做的原因是、我希望为 DFU 和应用分配相同的 RAM 空间。

    当然、我可以在第0页中定义闪存段、在第7页中定义 RAM 段、但我不知道在另一页中的某个段运行时如何将.text 段加载到一页中的某个段中。

    这样的陈述肯定会失败。

    Dfu1RamFunc:
    {
    DfuFlash.obj (.text)
    F021_API_F2837xS_FPU32.lib (.text)
    }> DFU1_text、page = 0、load_start (_Dfu1LoadStart)、load_end (_Dfu1LoadEnd)、run = RAMLS0_5、 run_start (_dfu1RamStart)、page = 7 

    这个也不起作用。

    Dfu1RamFunc:
    {
    DfuFlash.obj (.text)
    F021_API_F2837xS_FPU32.lib (.text)
    }> DFU1_text、page = 0、load_start (_Dfu1LoadStart)、load_end (_Dfu1LoadEnd)
    
    Dfu1RamFunc:run = RA1RTS0_START (_RUN = RAP1LoadStart)、LoadStart (_Dfu7_RUN) 

    是否有任何关于如何完成此操作的建议?

    谢谢!

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

    你好

    没有单独的页面、因此您应该将所有存储器放在同一页上。

    请尝试以下类似操作、并查看其是否正常工作:

    Dfu1RamFunc :load = FLASHA,
    运行= RAMLS0_5
    RUN_START (_Dfu1RamStart)、
    load_start (_dfu1LoadStart)、
    load_size (_dfu1LoadSize)、
    PAGE = 0、
    {
    -l DfuFlash.obj (.text)
    l F021_API_F2837xS_FPU32.lib (.text)
    } 

    链接器详细信息也可在汇编工具指南 http://www.ti.com/lit/spru513中找到、以供参考 

    此致

    Chris

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

    我的问题是、DFU 仅在上电时运行、并检查应用映像是否正确、

    然后应用程序接管控制权并重新声明使用的所有内存 DFU (.text、.ebss、... RAM 中)。

    为此、我需要链接器来分配 DFU 和应用程序的代码、以便在同一 RAM 部分运行。

    如果我 将所有存储器放在同一页上、则无法将运行其代码的 DFU 使用的 RAM 分配给应用(重叠错误)。

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

    好的、因此您希望将它们(DFU 或 APP)分配给使用相同的 RAM。 您是否已按照上述方法尝试添加 Dfu1RamFunc、然后有第二个"ramfunc"链接器部分(具有加载、运行等功能、请参阅任何 C2000Ware 示例中的.TI.ramfunc)。 这应加载并运行 DFU、然后在进入应用程序后、从主应用程序闪存运行、然后调用"memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);"作为主应用程序的一部分、将应用程序中的项目复制到所需的 RAM。 我认为这应该起作用。

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

    如果两个段在同一 RAM 空间中"运行"、链接器会将它们分配到该段的不同片段中。

    为了重叠它们、我需要在相同的 RAM 空间上使用两个不同的段。 如果两个段都位于同一页中、则会出现重叠警告。

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

    没错、这就是它的工作方式。 链接器必须将数据分配给特定地址、并且无法分配空闲存储器。 不幸的是、我不相信您尝试做的事情是可能的。

    此致
    Chris