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:.const_cla 段的链接器问题

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/672117/compiler-tms320f28377s-linker-issue-with-const_cla-section

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

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

您好!

我使用 C:\ti\c2000Ware_1_00_03_00\device_support\f2837xs\common\cmd\2837xS_flash_cla_lnk_cpu1.cmd

它可以使用 cla_iir2.2z_cpu01示例进行编译。

如果我将2837xS_FLASH_CLA_lnk_CPU1.cmd 复制或链接到我自己的项目、我会得到错误

"J:/workspace/firmware/duc/device_support/f2837xs/common/cmd/2837xS_FLASH_CLA_lnk_cpu1.cmd "、第165行:警告#10097:
  未找到存储器范围:FLASHB 位于第1页
"J:/workspace/firmware/duc/device_support/f2837xs/common/cmd/2837xS_FLASH_CLA_lnk_cpu1.cmd、第165行:错误#10265:
  没有用于放置".const_cla"的有效存储器范围(NULL)
"J:/workspace/firmware/duc/device_support/f2837xs/common/cmd/2837xS_FLASH_CLA_lnk_cpu1.cmd、第165行:错误#10099-D:
  程序将不能放入可用的内存中。  负载放置方式
  ".const_cla"大小为0x2的段的对齐/分块失败、第1页

作为一种权变措施、在我自己的链接器命令文件中、我将所有内容全部放置到 PAGE = 0、所有内容看起来都正常:

存储器

第0页:

   RAM4CLADATA    :origin = 0x008000,length = 0x000800 // LS0 */

   FLASHE2J       :origin = 0x088000,length = 0x030000// 固件*/


部分

   暂存区    :> RAM4CLADATA,   PAGE = 0
   .bss_cla       :> RAM4CLADATA,   PAGE = 0
   /*如果 PAGE = 1、则连接器错误、因此 RAM4CLADATA 移至 PAGE = 0 */
   .const_CLA     :负载= FLASHE2J、
                     运行= RAM4CLADATA、
                     run_start (_cla_cons_run_start)、
                     load_start (_cla_cons_load_start)、
                     load_size (_cla_cons_load_size)、
                     PAGE = 0

这与中的建议类似

为什么2837xS_FLASH_CLA_lnk_CPU1.cmd 在任何情况下都不起作用?

使用 PAGE 0时是否有问题?

谢谢、

弗兰克

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

    您好、Frank、

    您是否在项目中使用了其他链接器命令文件? 还是仅2837xS_FLASH_CLA_lnk_CPU1.cmd?

    如果您使用的是2837xS_FLASH_CLA_lnk_CPU1.cmd、则应确保 CLA_C=1在您的链接器设置中被预先定义、如示例所示。

    使用 PAGE 0时没有问题。 我认为这只是项目中链接器文件的一个小错误。

    希望这对您有所帮助。

    此致、

    SAL

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

    感谢您的快速回复。 我首先尝试了我自己的链接器文件(从示例派生而来)、然后尝试了示例文件2837xS_FLASH_CLA_lnk_CPU1.cmd 来验证我得到的错误。 是的、我在定义 CLA_C=1的情况下获得上面注释的错误。 如果 CLA_C=1、我得到

    警告#10247-D:创建不带段的输出段".bss_cla"
    规格
    警告#10247-D:创建不带段的输出段".const_cla"
    规格
    警告#10247-D:创建不带段的输出段".scratchpad"
    规格

    如前所述、我的文件在 PAGE = 0时工作、但是、最好知道2837xS_FLASH_CLA_lnk_CPU1.cmd 不工作的原因。

    谢谢、此致
    弗兰克
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为问题可能是、存储器加载到何处以及从何处运行需要位于同一页上。

    两者都需要为 PAGE 0或两个 PAGE 1。

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

    您好 Sal、

    很抱歉耽误你的回答。

    [引用 user="Sal Pezzino">我认为问题可能是存储器加载到何处以及从何处运行时需要位于同一页上。

    两者都需要为 PAGE 0或两个 PAGE 1。

    SAL

    [/报价]

    这并不解释为什么2837xS_FLASH_CLA_lnk_CPU1.cmd 与 CLA_iir2p2z_cpu01一同工作示例:在这里、CLA 加载(FLASHB、第0页)和运行(RAMLS1、第1页)部分位于不同的部分上。

    这是仅允许 TI 员工使用的功能吗? ;-)

    此致、

    弗兰克

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

    我对这种混乱表示歉意。 我弄错了。 该页面必须仅与代码运行的位置一致。 因此、原始链接器是可以的。

    我不确定是什么导致了链接您的项目的问题。

    可以给我提供更多信息吗? 您正在使用的确切链接器命令。 以及来自控制台的确切错误消息。

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

    e2e.ti.com/.../5554.epwm_5F00_up_5F00_aq_5F00_cpu01.zipHiSal、

    该问题可按如下方式重现:

    -将例如 ePWM_UP_AQ_CPU1示例导入 CCS、复制到工作区选项

    -编辑 CPU1_FLASH 编译的工程选项:

     -将2837xS_Generic_flash_lnk.cmd 替换为

      2837xS_FLASH_CLA_lnk_CPU1.cmd

     -在链接器中预定义 CLA_C=1

     -在编译器选项中添加 CLA 支持= cla1

     -添加一个填充.cla_const、.cla_bss 的*。cla

    -尝试构建 CPU1_FLASH 配置

    这将生成以下错误消息。 在所附的文件中、您可以找到修改后的工程以及我自己的链接器命令文件、该文件在 page=0时成功、并在 page=1时产生相同的错误。 (顺便说一下、我认为使用 CLA_C #define 没有优势、所以我没有。)

    此致、

    弗兰克

    ****为项目 ePWM_UP_AQ_cpu01构建配置 CPU1_FLASH ****

    "C:\\ti\\ccsv7\\utils\\bin\\gmake"-k all

    '构建目标:ePWM_UP_AQ_cpu01.out'

    '调用:C2000链接器'

    "c:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/bin/cl2000 /ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/lib /ti/c2000/C2000Ware_1_00_03_00/device_support/f2837xs/common/cmd -v28 -ml -mt --cla_support=cla1 -float_support=fpu32 -g -define=cpU1 -define=flash -display_error_number -diag_warning=225 -diag_suppress=10063 -z -m"epwm_up_isr_cpu01.map-display_express-f2837xi_intrack_s.html"-display_code_display_excla_express-f28xine_ines"-=cla-cs_code.html"-display_guid_guid_ine_display_guid_inese-from-ine_display_ine_display_guide-f28pinese-inese-inese-inese-inese-intrad.cs_guide-inese-f28pf-inese-inese-inese-intrad.cla1.at_guide-inese-inese-inese-inese-inese-f28pf-nat_guide-inese-inese-ines./ti/c2000/C2000Ware_1_00_03_00/device_support/f2837xs/headers/cmd /ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/include  

    "C:/ti/c2000/C2000Ware_1_00_03_00/device_support/f2837xs/common/cmd/2837xS_FLASH_CLA_lnk_cpu1.cmd "、第165行:警告#10097:

     未找到存储器范围:FLASHB 位于第1页

    "C:/ti/c2000/C2000Ware_1_00_03_00/device_support/f2837xs/common/cmd/2837xS_FLASH_CLA_lnk_cpu1.cmd "、第165行:错误#10265:

     没有用于放置".const_cla"的有效存储器范围(NULL)

    "C:/ti/c2000/C2000Ware_1_00_03_00/device_support/f2837xs/common/cmd/2837xS_FLASH_CLA_lnk_cpu1.cmd "、第165行:错误#10099-D:

     程序将不能放入可用的内存中。  负载放置方式

     ".const_cla"大小为0x2的段的对齐/分块失败、第1页

    错误#10010:链接期间遇到错误;"ePWM_UP_AQ_cpu01.out"不存在

     已构建

    >>编译失败

    Makefile:146:目标'ePWM_UP_AQ_cpu01.out'的配方失败

    gmake:***[ePWM_UP_AQ_cpu01.out]错误1

    gmake:目标"全部"不会由于错误而重新生成。

    ****构建完成****

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

    我在你的指示之后再次记录了你的问题,我将在下星期一查找原因并答复你。

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

    我们已在您的示例中再现了您的问题。 谢谢你。

    问题如 Sal 所述、首先、段加载到其中并从中运行的存储器都需要位于同一页上。 这意味着 C2000Ware 中的链接器命令文件存在问题。 我们将解决此问题。

    CLA 示例未演示此问题的原因是.CLA 文件中没有 CLA 常量。 因此、未看到该问题、因为没有任何内容链接到.const_cla 存储器段。

    此致、
    Emma