Embedded 使用USB引导加载程序时如何设置ARM用户应用程序的启动地址?

Embedded 使用USB引导加载程序时如何设置ARM用户应用程序的启动地址?,embedded,arm,bootloader,cortex-m3,Embedded,Arm,Bootloader,Cortex M3,刚从易趣上买了一个ARM Cortex-M3。它基本上是一个突破板 然而,根据它附带的少量文档,我已经确定它有一个类似于NXP的AppNote所描述的USB引导加载程序 这两个文档(应用说明和董事会文档)都表示要构建用户程序,以使其起始地址为0x2000。因为USB引导加载程序已经在0x0,占用8K 这两个文档还显示了如何在Keil uVision中实现这一点的屏幕截图(参见应用说明的第14页),不过我计划使用GNU工具链(Yagarto+Eclipse+OpenOCD) 在使用GNU工具链进行

刚从易趣上买了一个ARM Cortex-M3。它基本上是一个突破板

然而,根据它附带的少量文档,我已经确定它有一个类似于NXP的AppNote所描述的USB引导加载程序

这两个文档(应用说明和董事会文档)都表示要构建用户程序,以使其起始地址为0x2000。因为USB引导加载程序已经在0x0,占用8K

这两个文档还显示了如何在Keil uVision中实现这一点的屏幕截图(参见应用说明的第14页),不过我计划使用GNU工具链(Yagarto+Eclipse+OpenOCD)


在使用GNU工具链进行编译时,如何指定0x2000的起始地址,以便它能与USB引导加载程序正常工作?

我有很多基于arm的示例:

查找或创建自己的链接器脚本。其中,rom的ORIGIN=0x00000000将其更改为0x2000,例如:

MEMORY
{
   rom : ORIGIN = 0x00002000, LENGTH = 0x6000
   ram : ORIGIN = 0x40000000, LENGTH = 0x2000
}
SECTIONS
{
   .text : { *(.text*) } > rom
   .bss  : { *(.bss*) } > ram
}
您可能需要一个带有.data的

   .data  : { *(.data*) } > ram AT >rom
或者类似的。取决于你的程序和启动代码等等


如果您已经有一个为0x00000000构建的工作系统,那么请找到正在使用的linkerscript并制作一份副本,然后将其更改为0x2000并指定该linker脚本。

请告诉我您对该板的看法,我自己可能有一个/几个。谢谢,这让我走上了正确的道路;找到一个与NXP辅助引导加载程序一起工作的“hello world”示例: