繁体   English   中英

使用jtag编程sam4e时如何防止启动区域

[英]how to prevent boot region when program the sam4e using jtag

我正在使用at91sam4e16e并正在使用引导程序。 引导区域定义为0x400000,应用程序区域定义为0x420000起。

我已将Bootloader代码下载到该区域,并使用0x420000链接地址编译了应用程序代码。 现在我想使用Jtag将该应用程序下载到0x420000,但是当我下载它时,所有内存都将被擦除,仅剩下应用程序。

在AVR中,我可以在调试器选项中阻止引导区; 如何在sam4e中做同样的事情?

问候,shreyas。

转到项目选项。

Debugger -> Images您可以下载额外的图像。

请注意,我仅在启用了“ Debug info only -option的情况下使用此功能,但是我将Bootloader与我的应用程序捆绑在一起,因此情况有些不同。 (您可以在引导程序Linker -> Input选项卡中捆绑引导程序。)

我还遇到一个问题,因为应用程序不在正常的起始位置,所以我必须初始化程序计数器,并手动堆栈指针寄存器。 您可以通过在Debugger -> Setup定义一个宏文件来实现。

宏文件可能如下所示(请注意,这是针对不同的MCU的,因此您可能具有不同的寄存器/地址):

execUserReset() 
{
    // Set the stack pointer
    MSP = *(int*)0x00008000; 
    // Set the program counter
    PC = *(int*)0x00008004; 
}

使用调试器重置时,此宏文件会跳过引导程序,但是您也可以使宏文件在重置时通过使用不同的地址进入引导程序。

编辑:捆绑引导程序:

自从我这样做已经有一段时间了,所以希望我能记住一切。

您需要将Bootloader .bin文件添加到Linker -> Input -> Raw binary image 还定义符号bootloader.bootloader部分。 (我认为即使您使用绝对放置,也需要指定对齐方式。)

在上方的“ Keep symbols:框中添加您的bootloader符号。 这应确保始终包含引导加载程序。

在链接器文件中,添加行

place at address mem:0x00000000 { section .bootloader };

将引导加载程序放置在特定地址(更改地址以匹配您的引导加载程序地址)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM