请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320C5515 工具/软件:TI C/C++编译器
您好!
我想将某些函数的运行时执行从 RTS 库重新定位到闪存中。
这样做的原因是在 RAM 中节省了空间、使它们当前从 RAM 中执行。
我可以将整个用于 C5515的 RTS 库重新定位到闪存以执行、但完成此操作后、它会使我的应用崩溃(目前尚不清楚这是为什么)。
因此、我希望能够从闪存中的 RTS 库中以及 RAM 中的其他库中重新定位某些函数。
我无法找到在链接器文件中的特定段中指定库文件的某些函数的语法、这是否可行?
下面是我们用于项目的当前链接器脚本。
您将看到文件的一些.text 段被指定从 RAM 运行、而其他段被指定从闪存运行。
我们希望将 rts*.lib (.text)中的特定函数重定位到闪存、而将其他函数重定位到 RAM。
/*定义电路板的存储器映射 */
存储器
{
//双存取 RAM 从0x00 - 0xFFFF
//单次访问 RAM 从0x10000 - 0x4FFFF
存储器
{
//双存取 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
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
*此部分用于加载到闪存中的 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
.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节。
*
(SPRU376A)、第3.4.4节。
*
.sysmem: 块(0x10) {}>堆
.stack: 块(0x10)
start (_stack_start)、
结束(_stack_end)
{}> DARAM
start (_stack_start)、
结束(_stack_end)
{}> DARAM
.sysstack: 块(0x10)
start (_sysstack_start)、
结束(_sysstack_end)
{}> DARAM
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
.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
}
{
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
}