一、问题描述
使用U盘更新程序,设置好起始地址后,在编译时出现如下问题:
"configPkg/linker.cmd", line 147: warning #10096-D: specified address lies outside memory map
error #10264: DEFAULT memory range overlaps existing memory range FLASH
error #10264: DEFAULT memory range overlaps existing memory range SRAM
error #10010: errors encountered during linking; "empty_EK_TM4C129EXL_TI.out" not built
经查看是因为linker.cmd文件中:
SECTIONS
{
.bootVecs: type = DSECT
.vecs: load > 0x20000000
.resetVecs: load > 0x0
xdc.meta: type = COPY
}
红色位置出现问题。
二、我在${project}.cmd中设置的起始地址是0x00010000,
这样.resetVecs: load > 0x0确实不在所设定的范围内,
linker.cmd文件是编译后生成的,编译的时候会清除,然后再生成
~~~~~~~~~~~~有大神遇到过么?应该怎么做?~~~~~~~~~~
Susan Yang:
resetVecs: load > 0x00008000 //此地址应与 EK_TM4C1294XL.cmd 中的 APP_BASE 一致
您可以参考文档
https://www.ti.com.cn/cn/lit/an/zhca656/zhca656.pdf
,
xianshemg zhao:
您好,Susan Yang:
首先,谢谢您!
Debug/configPkg/linker.cmd 这个文件,编译后好像是自动生成的,我把您说的参数修改后,执行编译命令,这个文件还是会变为原来的参数,怎样防止这个文件自动生成?
,
Susan Yang:
这个就是自动生成的,没有办法修改
您是否有修改EK_TM4C1294XL.cmd 中的 APP_BASE?
,
xianshemg zhao:
您好,EK_TM4C1294XL.cmd 中的 APP_BASE修改过,修改内容如下:
#define APP_BASE 0x00010000
MEMORY{ FLASH (RX) : origin = APP_BASE, length = 0x000F0000 SRAM (RWX) : origin = 0x20000000, length = 0x00040000}
/* Section allocation in memory */
SECTIONS{ .text : > FLASH .const : > FLASH .cinit : > FLASH .pinit : > FLASH .init_array : > FLASH
.data : > SRAM .bss : > SRAM .sysmem : > SRAM .stack : > SRAM}
我使用的是Resource Explorer中的empty_EK_TM4C129EXL_TI例程。
,
Susan Yang:
请您参考该贴的解决方案
https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_CCS_1025584
打开 app.cfg 文件,进入 XDCtools => System => Program 并选择 Properties Tab . 这有一个下拉菜单调用 sectMap,打开,然后下拉 .resetVecs 并在 loadAddress 中填充 cmd 文件中的 APP_BASE。
,
xianshemg zhao:
再次感谢您:
Susan Yang 。
根据您的回答,问题已经解决了,不胜感激!!!~~~~~~~~~~
,
Susan Yang:
很高兴您能解决问题