2014-06-17 60 views
1

我正在使用at91sam4e16e並在bootloader上工作。引導區域定義爲0x400000,應用程序區域定義爲0x420000。如何在使用jtag編程sam4e時防止啓動區域

我已經將bootloader代碼下載到該區域並使用0x420000鏈接地址編譯應用程序代碼。現在我想使用Jtag將該應用程序下載到0x420000,但是當我下載它時,所有內存都將被擦除,只有應用程序保留。

在avr中,我可以阻止調試器選項中的引導區域;如何在sam4e中做同樣的事情?

關於, shreyas。

回答

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; 
} 

此宏文件跳過引導程序,但你也可以通過使用不同的地址使進入bootloader的宏文件復位。

編輯:捆綁引導程序:

這已經有一段時間,因爲我已經這樣做了,所以希望我記得一切。

您需要將您的啓動加載程序.bin文件添加到Linker -> Input -> Raw binary image。另外定義符號bootloader和部分.bootloader。 (即使使用絕對位置,我認爲對齊也需要指定。)

將您的bootloader符號添加到上面的Keep symbols:框中。這應該確保始終包含引導加載程序。

在你的連接文件中添加一行

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

放置在特定地址的bootloader(改變地址來匹配您的引導程序地址)。

+0

我能夠使用調試器 - >安裝宏來更改開始位置。但使用鏈接器 - >輸入對生成的二進制文件沒有任何影響。爲什麼這樣? –

+0

@ shreyas_patel21看我的編輯。 – user694733

相關問題