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

时间:2014-06-17 10:16:51

标签: arm bootloader iar

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

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

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

的问候, shreyas。

1 个答案:

答案 0 :(得分:1)

转到项目选项。

Debugger -> Images中,您可以下载额外的图片。

请注意,我只在启用Debug info only - 选项的情况下使用了此选项,但我已将bootloader与我的应用程序捆绑在一起,因此情况略有不同。 (您可以在Linker -> Input标签中捆绑引导加载程序。)

我还有一个问题,因为应用程序不在正常的起始位置,我不得不初始化程序计数器,并手动堆栈指针寄存器。您可以通过在Debugger -> Setup中定义宏文件来完成此操作。

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

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

这个宏文件在使用调试器复位时会跳过引导加载程序,但您也可以使用不同的地址制作在复位时进入引导加载程序的宏文件。

编辑:捆绑引导加载程序:

我已经做了一段时间了,所以希望我能记住一切。

您需要将引导加载程序.bin文件添加到Linker -> Input -> Raw binary image。同时定义符号bootloader和部分.bootloader。 (我认为即使您使用绝对位置,也需要指定对齐方式。)

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

在链接器文件中,添加行

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

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