我正在使用at91sam4e16e並在bootloader上工作。引導區域定義爲0x400000,應用程序區域定義爲0x420000。如何在使用jtag編程sam4e時防止啓動區域
我已經將bootloader代碼下載到該區域並使用0x420000鏈接地址編譯應用程序代碼。現在我想使用Jtag將該應用程序下載到0x420000,但是當我下載它時,所有內存都將被擦除,只有應用程序保留。
在avr中,我可以阻止調試器選項中的引導區域;如何在sam4e中做同樣的事情?
關於, shreyas。
我正在使用at91sam4e16e並在bootloader上工作。引導區域定義爲0x400000,應用程序區域定義爲0x420000。如何在使用jtag編程sam4e時防止啓動區域
我已經將bootloader代碼下載到該區域並使用0x420000鏈接地址編譯應用程序代碼。現在我想使用Jtag將該應用程序下載到0x420000,但是當我下載它時,所有內存都將被擦除,只有應用程序保留。
在avr中,我可以阻止調試器選項中的引導區域;如何在sam4e中做同樣的事情?
關於, shreyas。
轉到項目選項。
在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;
}
此宏文件跳過引導程序,但你也可以通過使用不同的地址使進入bootloader的宏文件復位。
編輯:捆綁引導程序:
這已經有一段時間,因爲我已經這樣做了,所以希望我記得一切。
您需要將您的啓動加載程序.bin
文件添加到Linker -> Input -> Raw binary image
。另外定義符號bootloader
和部分.bootloader
。 (即使使用絕對位置,我認爲對齊也需要指定。)
將您的bootloader
符號添加到上面的Keep symbols:
框中。這應該確保始終包含引導加載程序。
在你的連接文件中添加一行
place at address mem:0x00000000 { section .bootloader };
放置在特定地址的bootloader(改變地址來匹配您的引導程序地址)。
我能夠使用調試器 - >安裝宏來更改開始位置。但使用鏈接器 - >輸入對生成的二進制文件沒有任何影響。爲什麼這樣? –
@ shreyas_patel21看我的編輯。 – user694733