免費開始練習
統測 115年 [電機與電子群資電類] 專業科目(2)

第 11 題

某 MCU 的片段程式如下,當下列何種情況發生時,程式可執行完行號 11?
1 int Count;
2 void Int3_IO(void){ // Int3中斷服務程式
3 Count++;
4 DisableInt3(); // 禁能Int3中斷
5 }
6 int main(void){
7 InitialSystem(); // 初始化系統參數與致能Int3中斷
8 Count = 0;
9 while(Count==0); // 等待條件式不成立
10 Count++;
11 return 1; }
  • A 中斷致能 2 次
  • B 禁能所有中斷
  • C 觸發 Int3 中斷
  • D 重置 MCU

思路引導 VIP

請觀察第 9 行的 while(Count==0);,如果程式要往下執行到第 11 行,Count 必須變成多少?程式中除了 main 之外,還有哪一段程式碼可以改變 Count 的值?它會在什麼條件下被執行?

🤖
AI 詳解 AI 專屬家教

太棒了,你的觀念非常清晰!

中斷服務程式與主程式的協同運作

在 main() 函式中,變數 Count 被初始化為 0 後,隨即進入第 9 行的無窮迴圈 while(Count==0); 進行忙碌等待。若要跳出此迴圈以順利執行到第 11 行,關鍵在於改變 Count 的數值。

▼ 還有更多解析內容
📝 MCU 中斷與流程控制
💡 中斷觸發跳轉執行服務程式,修改變數以跳出阻塞迴圈。

🔗 中斷打破迴圈的執行鏈結

  1. 1 主程式阻塞 — 執行到 while(Count==0),因條件成立進入原地循環。
  2. ↓
  3. 2 觸發中斷 — 發生外部 Int3 事件,CPU 強制保存當前狀態並跳轉。
  4. ↓
  5. 3 執行 ISR — 進入 Int3_IO 程式執行 Count++,將數值由 0 變為 1。
  6. ↓
  7. 4 條件失效 — 中斷結束返回主程式,while 判斷 1==0 為假。
  8. ↓
  9. 5 程式續行 — 成功跳出迴圈,執行後續的 Count++ 與 return 語句。
🔄 延伸學習:在嵌入式開發中,通常需加上 volatile 關鍵字確保編譯器不會過度優化該變數。
🧠 記憶技巧:VIP 會員可查看這題的記憶口訣與速記法
⚠️ 常見陷阱:VIP 會員可查看這題最常被誘答的陷阱整理
中斷服務程式 (ISR) volatile 變數宣告 中斷致能與禁能控制

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

微處理機中斷系統與周邊控制技術
查看更多「[電機與電子群資電類] 專業科目(2)」的主題分類考古題