在通過FoxICE For ARM仿真器單步調(diào)試 ARM 目標(biāo)板時,調(diào)試器報告 “ Can't Step ”或者 Can't set point ”錯誤。一般情況下,在調(diào)試 ROM 內(nèi)的代碼時,比較容易發(fā)生這個錯誤。
ARM7 、 ARM9 / ARM9E 系列的內(nèi)核的 EmbeddedICE 模塊,包含兩套觀察點單元的控制寄存器,用于設(shè)置硬件斷點、軟件斷點。
設(shè)置一個硬件斷點,需要使用一個觀察點單元,不需要修改斷點處的代碼,適合在 ROM 中的代碼上設(shè)置斷點。
設(shè)置軟件斷點,全部軟件斷點使用一個觀察點單元,但需要修改斷點處的代碼,適合在 RAM 中的代碼上設(shè)置斷點。設(shè)置一個觀察點,需要使用一個觀察點單元。
在調(diào)試 ARM7 系列的處理器,如果在調(diào)試器中設(shè)置了異常矢量捕獲,需要使用觀察點單元。ARM9 / ARM9E 系列的處理器,有專門的硬件支持異常矢量捕獲,不需要使用觀察點單元。
由于單步調(diào)試時,實際上是需要在下一條指令上設(shè)置斷點,在調(diào)試結(jié)束后,再自動撤銷此斷點。用戶在遇到 “ Can't Step ”或者 Can't set point ”錯誤時,需要盡量釋放其他斷點、觀察點;對于 ARM7 系列處理器,可能還需要需要取消全部的異常矢量捕獲。在確保有一個空閑的觀察點單元的情況下,用戶便可以單步調(diào)試 ROM 中的代碼。