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.

[参考译文] 编译器/TMS320C5515:C5515将函数从 LIB 文件定位到链接器中的特定段

Guru**** 2527060 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/788663/compiler-tms320c5515-c5515-locating-functions-from-lib-files-to-specific-sections-in-linker

器件型号:TMS320C5515

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

您好!

我想将某些函数的运行时执行从 RTS 库重新定位到闪存中。

这样做的原因是在 RAM 中节省了空间、使它们当前从 RAM 中执行。

我可以将整个用于 C5515的 RTS 库重新定位到闪存以执行、但完成此操作后、它会使我的应用崩溃(目前尚不清楚这是为什么)。

因此、我希望能够从闪存中的 RTS 库中以及 RAM 中的其他库中重新定位某些函数。

我无法找到在链接器文件中的特定段中指定库文件的某些函数的语法、这是否可行?

下面是我们用于项目的当前链接器脚本。

您将看到文件的一些.text 段被指定从 RAM 运行、而其他段被指定从闪存运行。

我们希望将 rts*.lib (.text)中的特定函数重定位到闪存、而将其他函数重定位到 RAM。

/*定义电路板的存储器映射 */
存储器

 //双存取 RAM 从0x00 - 0xFFFF
 //单次访问 RAM 从0x10000 - 0x4FFFF

  MMR   (RWIX):origin = 0x000000、length = 0x0000C0 /* MMRs */
  堆: origin = 0xC0、length = 0x5000
  CINIT: origin = 0x50C0、length = 0x4100
  DARAM: origin = 0x91C0、length = 0xD650
  Saram:     origin = 0x016810、len = 0x0372E0
  INFO: origin = 0x04DAF0、len = 0x210
  VEC:       origin = 0x04DD00、len = 0x000300 //中断矢量表*/
  //这可以用于变量,而不是可执行代码!
  TI_bootloader_reserved:origin = 0x04E000、len = 0x002000
  /*
   *此部分用于加载到闪存中的 RAM 代码段。
   *
  FLASH_bootloader_reserved:origin = 0x800000、len = 0xE000
  Flash_parameters:origin = 0x80E000、len = 0x2000
  FLASH_CODE:origin = 0x810000、     len = 0x1E0000
  FLASH_FS:  origin = 0x9F0000、     len = 0x210000
  FPGA:      origin = 0xC00000、     len = 0x200000
  显示:   origin = 0xE00000、     len = 0x100000
  TI_bootloader_ROM:origin = 0xFE0000、 len = 0x020000

/*定义所有使用的段   */
部分

 /*我们希望.info 位于.bin 文件的开头*/
 .info:{}>信息
 //.USB_datalogger_struct:{}> TI_bootloader_reserved
 .USB_datalogger_struct:{}> SARAM
 .datalogger_struct:{}> TI_bootloader_reserved
 setup_table:{}> TI_bootloader_reserved
 .Begin_Sector_ram_array:{}> TI_bootloader_reserved
   VECTORS    :>VEC   ALIGN = 256
/* 注意:.stack、.sysstack 和.bss 应位于 DARAM 中。 请参阅《编程人员指南》
 (SPRU376A)、第3.4.4节。
*
   .sysmem:     块(0x10)   {}>堆
   .stack:   块(0x10)
    start (_stack_start)、
    结束(_stack_end)
       {}> DARAM
   .sysstack:   块(0x10)
    start (_sysstack_start)、
    结束(_sysstack_end)
       {}> DARAM
   .bss: 块(0x1000){}> SARAM
   .const:   block (0x10000)   {}> flash_code
   .cinit:   block (0x10000) {}> CINIT
 .switch:  block (0x10)   {}> flash_code
 .text{}> flash_code
 .ramcode:块(0x02)
 {
  rts*。lib (.text)、
  main.obj (.text)、
  Util.obj (.text)、
  CSL_USB.obj (.text)、
  communication_task.obj (.text)、
  Timer_interrupt_hua.obj (.text)、
  schedulerHuge.obj (.text)、
  FI.obj (.text)、
  M28W320FCB_ram_code.obj (.text)、
  SST39VF3201C_ram_code.obj (.text)、
  FLASH_hardware_interface.obj (.text)
 }> SARAM