俊賢 發問時間: 電腦與網際網路程式設計 · 1 0 年前

請問以下在8051 Keil C中的statement

請問以下在8051 Keil C中的statement ((VOID_FUNCTION) 0) (); 是執行reset嗎?為什麼?

typedef void (code *VOID_FUNCTION) (void);

........

.........

((VOID_FUNCTION) 0) (); // reset

1 個解答

評分
  • Dave
    Lv 7
    1 0 年前
    最佳解答

    因為它用一個 typedef 作一個 function pointer 的型態…

    接著,它把在程式碼位址 0 的地方東西當成一個 function,再呼叫它…

    因為在程式碼位址 0 的地方的程式碼就是程式一開始會跑的東西,結果就是程式全部重新重跑,記憶體會被重置 (一開始的 bootstrap 程式會被重新重跑),像是 reset 一樣…

    2007-03-20 15:24:48 補充:

    這跟硬體 reset 還是不是完全一樣:因為有一些 PORT 的 init 準位會跟用硬體 reset 時不一樣 (有一些 SFR 可能初始值也不一樣)…

還有問題?馬上發問,尋求解答。