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.

[参考译文] TMS320F280025C:IQMath 代码未与闪存链接器命令文件一同运行。

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1010271/tms320f280025c-iqmath-code-not-running-with-flash-linker-command-file

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

我有一个使用 IQmath 库中函数的项目。 当我使用 RAM 配置时、项目运行不会出现问题。 我使用了 C2000Ware 目录中的"28002x_IQmath_lnk_CProj.cmd"。 我知道这个链接器文件映射了 RAM 执行的代码。 下一步、我将链接器文件替换为 也来自 C2000Ware 目录的"28002x_launchxl_demo_flash_lnk.cmd"。 请注意、我将 LAUNCH-F280025C 板用作硬件。 项目构建和编译成功。 如果我对使用 IQmath 库的代码段进行注释、则代码执行不会出现任何问题。 但是、如果我再次上传包含 IQmath 代码的代码、则 CPU 会进入某个陷阱。 我认为  与 IQmath 段相关的"28002x_launchxl_demo_flash_lnk.cmd"文件中存在导致处理器陷阱的问题。 请指导解决此问题。 如果有人可以共享 F280025C 的闪存链接命令文件、该文件成功执行 IQmath 库函数、则会非常有用。

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

    阿萨德

    您可以将 IQMath 段放入闪存中、然后再试一次吗?

    在 28002x_launchxl_demo_flash_lnk.cmd 文件中、  

    /*分配 IQ 数学区域:*/
    //IQmath:> RAMLS4567
    //IQmathTables:> RAMLS4567

    /*分配 IQ 数学区域:*/
    IQMath:> FLASH_BANK0_SEC1,PAGE = 0,ALIGN (4)/*数学代码*/
    IQmathTables:> FLASH_BANK0_sec2,PAGE = 0,ALIGN (4)

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

    非常感谢您的快速回复。  这可以解决该问题。

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

    可能有一个问题。  在链接器文件中,.text 为   flash_BANK0_SEC1, flash_BANK0_sec2已分配给其他 指针,例如.text 和.cinit。 我们可以为 IQmathTables 分配相同的段吗?  

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

    阿萨德  

    如果闪存扇区有空间、您可以分配。 如果没有足够的空间、链接器将抛出错误。 因此、如果您没有看到任何链接器错误、就可以了。

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

    我收到.text 段的错误、如下所示:  
    错误#10099-D:程序将无法放入可用存储器、或者该段包含需要无法为此段生成的 trampoline 的调用站点。 对齐/分块放置在".text"大小为0x3938PAGE 0的位置失败。 可用存储器范围:
    FLASH_BANK0_SEC2大小:0x1000未使用:0x0最大孔:0x0
    FLASH_BANK0_SEC3大小:0x1000未使用:0x0最大孔:0x0
    FLASH_BANK0_SEC4大小:0x1000未使用:0x176最大孔:0x176
    FLASH_BANK0_SEC5大小:0x1000未使用:0x1000最大孔:0x1000  
    请指导我如何扩展.text 段以适应我的代码。 我看到  FLASH_BANK0_SEC6_7被分配给.const。 我已经尝试将 FLASH_BANK0_SEC8和 FLASH_BANK0_SEC9追加到.text 段、但错误仍然相同。 很抱歉、我不熟悉链接器文件的概念。 请提出解决问题的方法。

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

    阿萨德

    请查看此链接、其中包含链接器命令文件的详细信息:

    http://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html

    您可以参阅"在多个存储器范围内拆分输出段"一节。 它说明了如何在各个扇区中拆分段。

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

    Santosh、

      将 IQmath 和 IQmathTables 分配到闪存已修复了控制器陷阱问题。 但是、我注意到我的代码执行时间显著增加。 从 RAM 运行代码需要7个 u 秒。 将 IQmath 段移动到闪存后、程序执行时间增加到12 u-s。 可能有某种方法可以将 IQmath 段保留在 RAM 中以加快代码执行速度。 有什么想法吗?

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

    阿萨德

    IQMathTables 在 ROM 中可用、因此我们可以使用它。

     您能否在链接器 cmd 文件中尝试这样做

    在 存储 器区域中、在第0页中添加以下内容

    /* IQTABLES 是引导 ROM 的一部分。
    引导 ROM 在程序或中均可用
    数据空间、因此可以在第0页第1页上定义
    *
    IQTABLES:origin = 0x3F1402,length = 0x0166D

    在段区域中:
    IQMath:> FLASH_BANK0_SEC1,PAGE = 0,ALIGN (4)/*数学代码*/

    IQmathTables :>IQTABLES,PAGE = 0,TYPE = NOLOAD

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

    尊敬的 Santosh:

    我一定会尝试您的建议、并向您提供有关结果的最新信息。 在执行此操作之前、我希望您澄清与链接器命令文件相关的一点。 示例链接器脚本文件仅为代码分配五个扇区、即  
    ".text       :>> FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4 | FLASH_BANK0_SEC5"

    我遇到了一些问题、因为我的代码不适合上述分配。 对我来说有效的解决方案是将两个闪存扇区合并为一个大单元。 以下修改允许我的项目成功编译和链接:

     .text       :>> FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4 | FLASH_BANK0_SEC5_6 | FLASH_BANK0_SEC7

    其中 FLASH_BANK0SEC5_6定义为  :origin = 0x085000、length = 0x002000

    那么、我有一个非常基本的问题:如果我将所有可用的闪存扇区组合成一个单元并将其分配给.text、是可以的吗?
    在执行此操作时是否存在性能折衷?  

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

    阿萨德

    是的、可以将闪存扇区组合在一起而不会出现任何问题。