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.

[参考译文] 编译器/TM4C1237H6PZ:Linker 16.9 .................4 LTS内存填充问题

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/615122/compiler-tm4c1237h6pz-linker-16-9-4-lts-issue-with-memory-filling

零件号:TM4C1237H6PZ

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

大家好,支持!

我的客户在编译器的16.9 版本4 LTS中遇到链接器问题。

基本上,它不喜欢链接程序命令文件中的内存填充选项,该选项由以下行表示

 Flash (RX)   :origin = flash_start,length = start(CRCD)-flash_start,fill = 0xFFFFFFFF

如果已删除填充选项,则一切正常。 您能帮我解决问题吗?


这是输出控制台中显示的链接命令。

'构建目标:455.529万_NCC.Out '
'调用:ARM链接器'
“c:/ti/ccsv7/tools/compiler/ti-CGT-arm_mp.4.LTS/bin/armcl" 16.9 -mv7m4 --code_state=16 --float_support=fpv4spd16 -me -O2 --define=cc="cc"--define=part _tm4c1237H6Pz=16 2.1 5.2 5.3 6.1 6.2 6.5 8.1 8.5 8.6 8.11 8.12 2.3 ,5.4 ,6.4 ,8.2 ,8.8 ,,,,,di=10b -fabb=d= stack_size=0 -i"C:/ti/ccsv7/tools/compiler/ti-CGT-arm_cms.4.ls/lib" 16.9 -I:C:/ti/TivaWare_C_Serie-cm.lin/driverlib/cc/Debug" 2.1 -I:/projects/BIC 58.0181万 - cosmotas/2 - cm/lib_lip/lip_lip_lip/lin-55b.cm/rew_lip_lip_lip_lip/reb.ip_lip_lip_lip_lip-f.ip/b.cm/b.ip_lip_lip_lip_lip-f.ip_ip_ip-f.ip_ip_.ip_ip_ip-f.ip_.ip_.ip_.ip_c.ip_ip_ip_.ip_.ip_库3.156 -库-f.ip/b.ip/ip/ip_c.ip_c.ip_lip_.ip_.ip_lip_.ip_.ip_c.ip_.ip_. 16.9  
链接>
 

编译器的版本17.6 .........0 STS (或15.X:X)不会发生这种情况。

'构建目标:455.529万_NCC.Out '
'调用:ARM链接器'
“c:/ti/ccsv7/tools/compiler/ti-CGT-arm_mp.0.sts/bin/armcl" 17.6 -mv7m4 --code_state=16 --float_support=fpv4spd16 -me -O2 --define=cc="cc"--define=part _tm4c1237H6Pz=16 --diag_diag_diag_diag_diag_diag_diag_diag_diag_diag-fab_-fab_-flous-flous-y,m=-from-fab_-from-2b -from_diag_diag_diag_diag_diag_diag_-yb -yb -yb -yb -yb -yb -b -from_diag_diag_diag_diag_diag_diag_diab_diab_fab_-from-fab_fab_-fab_-from-from-from-b -from_diag_diab 2.1 2.3 5.2 5.3 5.4 6.1 6.2 6.4 6.5 8.1 8.2 8.5 8.6 8.8 8.11 8.12 stack_size=0 -i"C:/ti/ccsv7/tools/compiler/ti-CGT-arm_cms.0.sts/lib" 17.6 -i"C:/ti/TivaWare_C_Serie-cm.lin/driverlib/cs/Debug" 2.1 -i"C:/projects/bics/bc:3.156 17.6 cosmot/crnc/lib_lip_lip_lip/fulb.cm/re_lip_lip-f.cm/f.ip_lip_lip_lip_f.crs/b.crs/ip_lip-f.crs/ip_lip_lip-f.crs/ip_lip_lip-f.crs/ip_lip-f.crs/ip_lip_lip-f.crs/ip_lip_c.crm.crm.crm.crm.crm.crm.crm./f_-f_-f./f./ip_c_cip_c_c_cip_c.crm.crs/ip_-f.crm.cr  
链接>
'完成构建目标:455.529万_NCC.Out '
''
"C:/ti/ccsv7/utils/tiobj2bin/tiobj2bin""455.529万_NCC.ut""455.529万_NCC.bin""C:/ti/Ccsv7/tools/compiler/ti-CGT-arm_STS.0.sts/bin/armofd" 17.6 :C:17.6 /ti/ccsvc/mksvc/mbin/jutilti/crs/xf/reach/crs/j/crs/j/ft/crs/f_7/cm/j/f_7/cm/crs/f_7/f_/crf_/crf_/crs/j/crs/j/ft/j/f_/crs/crs/j/crs/
"C:/ti/ccsv7/tools/compiler/ti-CGT-arm_NCC.0.0.sts/bin/armdi" 17.6 "455.529万_NCC.ut""455.529万_NCC.lst"
将455.529万_NCC.OUT分解为455.529万_NCC.lst
"C:/ti/ccsv7/tools/compiler/ti-CGT-arm_NCC.0.STS/bin/armnm" 17.6 -o="455.529万_NCC.sym""455.529万_NCC.out
''

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

您能为我提供一些解决问题的信息和技巧吗?
顺便说一句,我还想使用链接器用特定模式(例如0xFEFEFEFEFEFE)填充堆栈。 有可能吗?


这是链接器命令文件,供您参考

/************************************************************************
 *
 *用于德州仪器(TI) TM4C1237H6PZ的默认链接器命令文件
 *
 *这源自TivaWare库的修订版1.0691万。
 *
 ***************** /

--retain=g_pfnVectors

#defueFLASH_start 0x0万
#defueFLASH_SIZE  0x4万
#defeeFLASH_END  (FLASH_START + FLASH_SIZE -1)
#defueRAM_START  0x2000万
#defineRAM_SIZE   0x0.8万
#defineRAM_END   (RAM_START + RAM_SIZE -1)
#defueROM_start  0x100万
#defueROM_end   0x1.0087万FF
#defineROM_size   (ROM_end - ROM_start + 1)


#defineVESTA_SIZE  (0x0.8万 - CRCDATA SIZE)
#defineCRCDATA大小 (大小(CRCDATA)

内存

  CDATA (R)  :原点= 0x3FFFC,长度= 0x0.0004万,填充= 0xFFFFFFFF
  Flash (RX)   :origin = flash_start,length = start(CRCD)-flash_start,fill = 0xFFFFFFFF

  SRAM (rwx)   :origin = RAM_START,length = 0x0.0007万F00,vfill = 0x0万
  持久性(RW):原点= 0x2.0007万F00,长度= 0x0.01万
}

/*以下命令行选项作为CCS项目的一部分进行设置。   */
/*如果您使用命令行进行构建,或出于某种原因希望  */
/*在此处定义它们,您可以根据需要取消注释和修改这些行。   */
/*如果您使用CCS进行构建,最好制作任何这样的*/
/*在CCS项目中进行修改,并将此文件保留为单独文件。        */
/*                                      */
/*--heap_size=0                               */
/*--stack_size=256                              */
/*--library=rtsv7M4_T_le_eabi.lib                      */

/*内存中的部分分配*/

章节

  intvecs: > 0x0万
  text : >闪烁
  const : > flash
  .cinit : >闪烁
  .Pinit : >闪光
  init_array:>闪存
  crcval1: >crcdc.

  //.vtable: >0x2000万
  .stack :  > RAM_START /* Fill = 0xFEFEFEFEFEFE */
  //.vtable: > SRAM
  sysmem:>  SRAM (高){__SYSMEM_START =.;}
  数据 :  > SRAM (高)
  .bss  :  > SRAM (高)
  .persistent:> persistent, type=NOINIT
}

__stack_size =__SYSMEM_START - RAM_START;

__XX =__SYSMEM_START;
__stack_top =__SYSMEM_START - 0x08;
__stack_end =__stack_top + 0x04;

__CRCDATH_START = FLASH_END+1-CRCDATH_SIZE;
__rom_start = rom_start;
__ROM_END = ROM_END;
__rom_size = rom_size;
__CRCVAL1_START =启动(CRCDATE);
__persistent_start = start (持久性);
__flash_start =启动(flash);
__flash_size =启动(CRCD)-flash_start;
__flash_end =__flash_start +__flash_size - 1;
__RAM_START =启动(SRAM);
__RAM_SIZE = RAM_SIZE;
__RAM_END =__RAM_START +__RAM_SIZE -1;

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

    我认为链接程序永远不会结束。  是这样吗?

    要理解此问题,我需要重现它。  然后我可以将其移交给链接器专家进行深入分析。  要复制它,我需要一个测试用例。  对于链接器问题,这意味着我需要链接器看到的所有内容。  这是作为CCS项目组织的吗?  如果是,请按照项目 共享一文中的说明打包项目,并将生成的.zip文件附加到下一篇文章。

    谢谢,此致,

    -George

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

    e2e.ti.com/.../0871.Test.zipGeorge

    这是一个示例项目,其中16.9 4 LTS挂起链接,而17.6 0 STS工作。

    顺便说一下,是否有规则来说明内存中输出部分的顺序? 链接程序命令文件中的顺序似乎与它无关。 不是吗?

    他们希望实现的目标是将系统部分(sysmem,数据和BSS)分配到RAM的底部(高地址),并将所有剩余的RAM用作堆栈区域。 如何知道系统使用的最低地址?

    另请查找附件

    谢谢。

    Alberto

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    缺省情况下,链接程序按降序排列部分,以尝试获得最佳打包。 如果较大的部分之间存在对齐间隙,则可能会将较小的部分挤压到该间隙中。

    考虑在要推送到较高地址的部分上使用高链接程序命令文件说明符。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您提交测试案例。  我可以重现该问题。  我在 SDOWP系统中提交了CodeGen-3591以获得此地址。  欢迎您使用我签名中下面的SDOWP链接进行关注。

    谢谢,此致,

    -George

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

    很抱歉回复太晚,但客户和我自己在过去几周都没有回复。
    我无法在SDOWP下找到CodeGen-3591文件,您能突出显示我可以下载该文件的位置吗?
    谢谢,此致,
    Alberto
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,这份报告没有在外部发布;我刚刚发布过,几个小时后就会显示出来。 CodeGen-3591在ARM编译器版本16.9 .6.LTS和17.6 .0.STS或更高版本中已修复。