剛入門做嵌入式開發時,很多人經常糾結:
- 用定時器采集傳感器數據,是直接 while 循環里輪詢標志位,還是寫個中斷函數?
- 串口收發數據時,是用while(!(USART_SR&RXNE))這種老老實實輪詢,還是開個中斷來接收?
- 項目調試時發現,輪詢方式代碼好像更直觀,但 CPU 占用高得嚇人;而中斷看起來更“智能”,但又怕響應不及時。
這種困惑可以說是嵌入式開發的經典問題。今天,我們就來系統梳理一下中斷 vs 輪詢的區別、優缺點和應用場景,讓你寫項目時不再糾結。
一、輪詢的本質:CPU 一直在問“好了沒?”
所謂輪詢,就是 CPU 主動不斷查詢外設狀態寄存器。
例子:
如果我們要檢測一個按鍵輸入,代碼可能是:
- while(1){
- if(GPIOx->IDR&PIN_MASK){
- // 按鍵按下,執行操作
- }
- }
特點:
- 簡單、直觀,好寫好調試;
- 但 CPU 一直在跑循環,占用率極高;
- 一旦有多個任務,就容易顧此失彼。
二、中斷的本質:外設主動“通知 CPU”
中斷的思路是,CPU 不再傻傻問“好了沒”,而是外設自己準備好數據時,主動打斷 CPU 的當前任務,讓 CPU 去執行中斷服務程序。
例子:
- voidEXTI0_IRQHandler(void){
- if(EXTI->PR&(1<<0)){
- EXTI->PR|=(1<<0);// 清中斷標志
- // 按鍵按下,執行操作
- }
- }
特點:
- CPU 不用浪費時間等待;
- 響應更實時;
- 但中斷嵌套過多時,容易造成優先級沖突和響應延遲。
三、效率對比:什么時候輪詢更好,什么時候中斷更好?
1. 輪詢的優勢場景
- 任務非常簡單:比如檢測一個 LED 狀態,CPU 沒有別的事干。
- 高頻率、低延遲需求:有些場合下,輪詢比中斷更快,因為不需要保存/恢復上下文。比如極簡 bit-banging 通信。
- 調試階段:初學時,輪詢邏輯更直觀,不容易出錯。
2. 中斷的優勢場景
- 多任務并行:比如 ADC 連續采樣、UART 通信、外部輸入信號,這些外設無法預知何時到來,中斷能讓 CPU 高效切換。
- 低功耗應用:MCU 可以進入休眠狀態,等中斷喚醒,而不是一直空跑。
- 實時響應需求:外設狀態一旦變化,立刻觸發 ISR,避免輪詢的延遲。
四、實戰案例
案例 1:串口接收
- 輪詢方式:CPU 在循環中不斷檢測RXNE標志,CPU 占用率高,接收速率高時容易漏數據。
- 中斷方式:每來一個字節觸發一次中斷,CPU 只在需要時處理,效率更高。
【配圖建議:串口數據流對比圖,輪詢方式 CPU 一直忙,中斷方式 CPU 空閑→數據來才處理】
案例 2:按鍵輸入
- 輪詢方式:需要在主循環不斷檢測 GPIO 狀態,不適合低功耗。
- 中斷方式:用外部中斷(EXTI)檢測電平變化,CPU 平時休眠,按鍵按下時自動喚醒,非常適合電池供電設備。
案例 3:高速采樣任務
五、開發者常見誤區
誤區 3:中斷一定比輪詢好錯。中斷也有開銷,尤其是上下文保存和恢復。低延遲場景下,簡單輪詢反而更快。
誤區 2:輪詢就是“落后”的方式錯。對于某些短小的邏輯,輪詢更容易實現,也不會帶來復雜的中斷優先級問題。
誤區 3:所有任務都用中斷處理錯。中斷太多會導致優先級沖突,難以維護。復雜系統一般會用中斷 + RTOS 任務配合,而不是全靠 ISR。
六、總結:怎么選?
- 項目小、邏輯簡單→ 用輪詢就行,別折騰太復雜;
- 多任務并行、功耗敏感→ 中斷更合適;
- 高頻采樣、大數據吞吐→ DMA + 定時器觸發,才是終極方案;
- 調試階段→ 可以先用輪詢,邏輯清楚后再改成中斷。
一句話總結:中斷不是萬能的,輪詢也不是落后的,兩者都有存在價值。關鍵是根據項目場景來選。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
嵌入式
+關注
關注
5198文章
20442瀏覽量
333963 -
外設驅動器
+關注
關注
0文章
5瀏覽量
3547
發布評論請先 登錄
相關推薦
熱點推薦
什么叫嵌入式軟件
時,主程序就須處理更復雜的任務管理,這時主程序已成為一個簡單的嵌入式操作系統。如果上面的包裝系統采用中斷驅動系統,一旦發生錯誤,就會有一個錯誤中斷請求執行錯誤響應程序,錯誤響應程序會處
發表于 04-20 08:45
嵌入式系統的軟件部分
嵌入式系統軟件組成如下: ?。?)高端嵌入式系統的軟件組成 1)應用程序 2)應用程序接口函數庫 3)文件系統、圖形用戶界面、網絡協議棧 4)操作系統 5)引導加載程序、驅動
發表于 06-20 15:51
嵌入式系統外設的使用
目前發展最快的互聯網方向,其中非常多的思想值得發揚到嵌入式上,我將其中的精華部分總結出來,歡迎大家指正。嵌入式系統作為最基礎的系統,通常一個系統的開發會涉及到數個、數十個外設的使用。然而使用這些
發表于 08-24 07:53
嵌入式系統軟件驅動篇
計算機三級知識點總結四這個是一個計算機三級嵌入式的復習重點,個人總結,希望對考前幾天復習的老鐵們有用。但記得,刷題才是根本,看了重點需要配套刷題!??!嵌入式系統軟件驅動篇嵌入式系統的軟
發表于 12-23 06:50
Altera FPGA全國嵌入式創新開發實踐
Altera FPGA全國嵌入式創新開發實踐:Altera FPGA全國嵌入式創新開發實踐(2008.10.30)
發表于 12-27 16:15
?22次下載
淺談嵌入式MCU的中斷處理
眾所周知,一方面,MCU在嵌入式系統中的廣泛使用的一個重要原因就是其相對于MPU和通用CPU的時效性優勢。而低延遲的外設中斷和中斷嵌套正是MCU實時性的最大保障。
發表于 05-18 10:23
?9827次閱讀
安全基礎--19--嵌入式基礎之系統軟件
1、嵌入式系統的軟件結構簡單的輪詢結構:在低端嵌入式系統中,處理器的處理能力較低,存儲器容量很小,系統功能簡單,通常只實現一些簡單的控制操作。這種嵌入式系統不需要操作系統支持,應用軟件
發表于 10-20 20:05
?1次下載
嵌入式系統的外設器件選擇
作者:DigiKey Editor 嵌入式系統除了最重要的為處理器選擇之外,配合的相關外設器件也是嵌入式系統的重要組成部分,包括內存、時鐘(振蕩器)、定時器、通信接口、輸入/輸出、模擬數字轉換等器件
中斷還是輪詢?嵌入式外設驅動的最佳實踐!
評論