在使用基于Eclipse的IDE調試嵌入式系統時,毫無疑問,讀者在調試透視圖中遇到了重置和重新啟動按鈕。從高層次來看,這兩個選項可能看起來相同,但在嵌入式開發人員何時應該使用重啟而不是重置方面存在重要差異。讓我們看看如何在標準應用程序中以及在使用引導加載程序時使用它們。
首先,讓我們討論基礎知識和可能顯而易見的問題。按下復位按鈕會使程序在“開機復位”時復位到應用程序條目。當按下重置按鈕時,開發人員會發現自己處于處理器重置處理程序中。然后,開發人員可以單步執行所有代碼,包括低級初始化。在應用程序進入 main 之前通常會發生很多事情。
如果開發人員不關心 main 之前發生的事情,只是想重新啟動應用程序并返回到 main,他們可以按下重新啟動按鈕。重啟是一種組合操作。結果與開發人員按下復位鍵然后使用位于 main 第一行的斷點進行操作相同。重新啟動有時被定義為從入口點開始的應用程序。(請注意,這與開機入口點不同)。
其次,對于在內存中使用單個應用程序的開發人員來說,重置和重啟似乎幾乎相同,但如果開發人員有一個引導加載程序和一個應用程序,那就是有趣的地方。在引導加載程序開發期間,嵌入式開發人員可以使用調試器命令直接訪問應用程序代碼空間。這些命令可能類似于以下內容:
set $sp = *0x280000
set $pc = *0x280004
set {int}0xe000ed08 = 0x280000
這些告訴調試器在啟動時將堆棧指針、程序計數器和中斷向量表設置到內存中第一個位置以外的位置。當執行這些命令時,開發人員需要注意一些有趣且有用的事情。重置按鈕仍按預期運行。按下它將返回到復位入口點,這將是引導加載程序復位向量。但是,如果開發人員按下重新啟動按鈕,他們不會在運行后重置。相反,他們會發現自己處于應用程序代碼的重置處理程序中!
僅在單個應用程序空間中工作的開發人員幾乎不會注意到重置和重新啟動之間的任何區別。事實上,他們大多傾向于重啟。在具有引導加載程序的環境中工作的嵌入式開發人員仍然傾向于重新啟動以調試和使用他們的應用程序,但重置也將為他們提供一種進入引導加載程序和調試組合引導加載程序/應用程序的方法。