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