Arm 使用jtag编程sam4e时如何防止启动区域
我正在使用at91sam4e16e和引导加载程序。启动区域定义为0x400000,应用程序区域定义为0x420000以后 我已将引导加载程序代码下载到该区域,并使用0x420000链接地址编译了应用程序代码。现在我想使用Jtag将该应用程序下载到0x420000,但当我下载它时,所有内存都被擦除,只剩下应用程序 在avr中,我可以在调试器选项中阻止启动区域;如何在sam4e中实现同样的功能 问候,, shreyas.转到项目选项 在Arm 使用jtag编程sam4e时如何防止启动区域,arm,bootloader,iar,Arm,Bootloader,Iar,我正在使用at91sam4e16e和引导加载程序。启动区域定义为0x400000,应用程序区域定义为0x420000以后 我已将引导加载程序代码下载到该区域,并使用0x420000链接地址编译了应用程序代码。现在我想使用Jtag将该应用程序下载到0x420000,但当我下载它时,所有内存都被擦除,只剩下应用程序 在avr中,我可以在调试器选项中阻止启动区域;如何在sam4e中实现同样的功能 问候,, shreyas.转到项目选项 在Debugger->Images中,您可以下载额外的图像 请注意
Debugger->Images
中,您可以下载额外的图像
请注意,我只在启用了Debug info only
-选项的情况下使用了此选项,但我已将引导加载程序与我的应用程序捆绑在一起,因此情况有所不同。(您可以在Linker->Input
选项卡中绑定引导加载程序。)
我还有一个问题,因为应用程序不在正常的起始位置,所以我必须手动初始化程序计数器和堆栈指针寄存器。您可以通过在Debugger->Setup
中定义宏文件来完成此操作
宏文件可能如下所示(请注意,这是针对不同的MCU的,因此您可能有不同的寄存器/地址):
此宏文件在使用调试器重置时跳过引导加载程序,但您也可以使用不同的地址创建宏文件,该文件在重置时进入引导加载程序
编辑:绑定引导加载程序:
我已经有一段时间没有这样做了,所以希望我能记住一切
您需要将引导加载程序.bin
文件添加到链接器->输入->原始二进制图像中。还定义符号引导加载程序
,以及节.bootloader
。(我认为对齐也需要指定,即使使用绝对位置。)
将您的bootloader
符号添加到上面的Keep symbols:
框中。这应该确保始终包含引导加载程序
在链接器文件中,添加行
place at address mem:0x00000000 { section .bootloader };
将引导加载程序放置在特定地址(更改地址以匹配引导加载程序地址)。我可以使用调试器->设置宏更改启动位置。但是使用linker->input对生成的二进制文件没有任何影响。为什么会这样?
place at address mem:0x00000000 { section .bootloader };