統測
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; }
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 主程式阻塞 — 執行到 while(Count==0),因條件成立進入原地循環。
- 2 觸發中斷 — 發生外部 Int3 事件,CPU 強制保存當前狀態並跳轉。
- 3 執行 ISR — 進入 Int3_IO 程式執行 Count++,將數值由 0 變為 1。
- 4 條件失效 — 中斷結束返回主程式,while 判斷 1==0 為假。
- 5 程式續行 — 成功跳出迴圈,執行後續的 Count++ 與 return 語句。
↓
↓
↓
↓
🔄 延伸學習:在嵌入式開發中,通常需加上 volatile 關鍵字確保編譯器不會過度優化該變數。