[英]time() ok when debugging (JTAG), not-ok when running on-chip. How to time with an embedded proc?
[英]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.