工具与软件:
尊敬的 Champ:
我要求为我的客户提供服务。
参考这篇文章、
由于链接器命令文件 已 创建了一个名为.TI.ramfuncs 的输出节、因此用户 必须 使用手动执行闪存到 RAM 的复制 memcpy 在应用程序中 、Ramfuncs 段中任何函数被调用前的代码。
但从我们的测试中、我们看到#pragma CODE_SECTION (".TI.ramfunc")也具有相同的作用、那就是为 加载到闪存并从 RAM 执行的符号分配空间。
通过尝试 注释掉 应用程序代码中的 memcpy、只需在 ADCC1_ISR 之前保留#pragma CODE_SECTION (ADCC1_ISR、".TI.ramfunc")行 、并在一个地址加载、然后从链接器命令文件中的不同地址运行、如下所示。 在编译的.map 文件中、ADCC1_isr.obj 生于 闪存的加载地址、但仍然映射到 RAM (不使用 memcpy 线)来执行闪存到 RAM 复制。
/* In a C file */
// memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize); // comment out the memcpy
#pragma CODE_SECTION(ADCC1_ISR, ".TI.ramfunc")
__interrupt void ADCC1_ISR( void )
{
...
}
/* In a linker command file */
.TI.ramfunc : LOAD = FLASH_BANK0_SEC1|FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4,
RUN = RAMLS0_1_2_3,
LOAD_START(RamfuncsLoadStart),
LOAD_SIZE(RamfuncsLoadSize),
LOAD_END(RamfuncsLoadEnd),
RUN_START(RamfuncsRunStart),
RUN_SIZE(RamfuncsRunSize),
RUN_END(RamfuncsRunEnd),
ALIGN(4)
1.专家能否澄清#pragma CODE_SECTION (".TI.ramfunc")是否 执行与 memcpy 完全相同的操作来将符号加载到闪存中并从 RAM 执行? 因为看到该符号的.obj 也 映射到 RAM 并从 RAM 执行该符号。
2.如果没有,请解释两个区别是什么?
3.这两个必须绑定并一起使用,让符号从 outpst 节".TI.ramfunc"执行?
如果您能提供任何见解、我将不胜感激。
谢谢。此致、
Johnny