微控製器和嵌入式係統中的並發和中斷
發布時間:2023-04-21 責任編輯:lina
【導讀】tongchang,womenzhiduiyuwomenzhengzaichulideguochengxiangguandetedingshijianganxingqu。zhengruninzaishangmianzhuyidaode,congshijiandejiaodulaikan,womenguanxindeshijianshishifougaiqichuangle。chulibingfadedianxingfangfashiranglingyigewuliziyuan(鬧鍾或人)監視我們感興趣的事件,然後提醒(或打斷)我們事件已經發生的事實,以便我們可以處理它。
本文是探討並發和中斷概念的係列文章中的篇。本係列的大部分內容將直接處理微控製器和 GPIO 中斷。
在初的這篇文章中,我們將討論這些概念的基本定義,並考慮它們與為微控製器編寫代碼的相關性。
什麼是並發?
讓我們用一個我們都熟悉的例子來談談並發。通常,當您上床睡覺時,您想在特定時間醒來。你在這裏有兩個目標:上床睡覺,這樣你就可以休息,但也要確保你不會睡到你想要的起床時間。
確(que)保(bao)您(nin)不(bu)會(hui)錯(cuo)過(guo)起(qi)床(chuang)時(shi)間(jian)的(de)一(yi)種(zhong)方(fang)法(fa)是(shi)保(bao)持(chi)清(qing)醒(xing)並(bing)看(kan)時(shi)鍾(zhong),但(dan)這(zhe)會(hui)破(po)壞(huai)您(nin)想(xiang)要(yao)上(shang)床(chuang)睡(shui)覺(jiao)的(de)目(mu)的(de)。為(wei)了(le)幫(bang)助(zhu)補(bu)救(jiu)這(zhe)個(ge)問(wen)題(ti),我(wo)們(men)通(tong)常(chang)使(shi)用(yong)鬧(nao)鍾(zhong)(一個設備或受信任的人,到那時已經醒了)在特定時間叫醒我們,這樣我們就可以專注於睡眠,同時仍然實現我們的目標時間。
並發性是我們用來描述您同時處理兩個或多個進程但在任何時間點隻能物理處理其中一個進程的能力的場景。
在上麵的示例中,要注意的兩個過程是睡眠和跟蹤時間(因此我們會在所需時間醒來)。同一個人同時做這兩件事在物理上是不可能的。
tongchang,womenzhiduiyuwomenzhengzaichulideguochengxiangguandetedingshijianganxingqu。zhengruninzaishangmianzhuyidaode,congshijiandejiaodulaikan,womenguanxindeshijianshishifougaiqichuangle。chulibingfadedianxingfangfashiranglingyigewuliziyuan(鬧鍾或人)監視我們感興趣的事件,然後提醒(或打斷)我們事件已經發生的事實,以便我們可以處理它。
圖 1 顯示了這方麵的時間線圖解。
圖 1.上床睡覺並讓鬧鍾在特定時間叫醒您的時間線圖示。
嵌入式和網絡物理係統中的並發
嵌入式和網絡物理係統通常必須處理並發性。
這zhe個ge概gai念nian的de一yi個ge例li子zi是shi微wei波bo爐lu。該gai設she備bei需xu要yao能neng夠gou處chu理li按an鈕niu按an下xia或huo檢jian測ce您nin在zai食shi物wu加jia熱re時shi打da開kai門men的de時shi間jian。按an下xia暫zan停ting或huo取qu消xiao按an鈕niu或huo打da開kai門men將jiang導dao致zhi食shi物wu停ting止zhi加jia熱re。
微控製器——您通常將其編程為係統“大腦”的計算機——在設計時就考慮到了並發性。
除了通用 CPU 之外,它們還包含許多用於與外界交互的專用硬件設備(稱為外圍設備),因此您可以連接諸如按鈕和顯示器之類的東西以及實現係統所需的其他外部硬件。通常,這些外設具有中斷機製,因此 CPU 可以要求它們監視特定事件,然後在該事件發生時中斷 CPU。
中斷和並發程序的概述
微控製器上的中斷就像我之前討論的睡眠和鬧鍾示例一樣工作。
您可以編寫一個程序,將外設配置為監視某個事件並在該事件發生時中斷 CPU——例如,當 GPIO 輸入值從 0 變為 1 時。當您的程序運行時,CPU 會執行您的程序片段主程序。當您等待的事件發生時,外圍設備向 CPU 發出事件已經發生的信號。如果一切配置正確,CPU 將停止它在主程序中所做的任何事情,執行一個稱為中斷服務例程 (ISR) 或中斷處理程序的特殊函數,然後返回主程序從中斷的地方繼續當它完成時。
您必須將 ISR 編寫為代碼的一部分。假設您正在使用 C 編寫程序,這意味著您必須在源代碼中的某處聲明和定義它,該源代碼將作為微控製器將運行的可執行文件的一部分構建。
但是,您永遠不會自己調用 ISR。所有微控製器開發工具都有一種特定的方式讓您告訴 C 編譯器某個函數是 ISR 以及它與哪個特定中斷相關聯。正確完成此操作後,當特定中斷發生時,CPU 將自動跳轉到該函數並執行它。
C 代碼中的中斷示例
由於中斷的工作方式,一開始在編程中處理並發似乎有點不直觀。
下圖展示了用 C 語言編寫的具有 ISR 的代碼將如何運行,以幫助提供一種思考並發程序的好方法。它假定所有中斷配置都已正確完成。
圖 2.帶有中斷的 C 代碼
CPU 在 main 函數的 while 循環中執行代碼。
感興趣的事件(從 1 變為 0)發生在為中斷配置的引腳上。
CPU停止執行while循環中的代碼,轉而執行中斷服務程序。
中斷服務程序執行完畢後,CPU 從中斷處繼續執行主循環。
CPU 正在 while 循環中執行代碼。
感興趣的事件再次發生。
CPU停止執行while循環中的代碼,轉而執行中斷服務程序。
中斷服務程序執行完畢後,CPU 從中斷處繼續執行主循環。
外圍設備和 GPIO 的中斷
本係列的大部分內容都集中在微控製器的並發和中斷概念上。接下來,我們將討論GPIO 中斷及其工作原理。
免責聲明:本文為轉載文章,轉載此文目的在於傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯係小編進行處理。
推薦閱讀:
海康威視發布2022年ESG報告:科技為善,助力可持續的美好未來
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
- 從機械執行到智能互動:移遠Q-Robotbox助力具身智能加速落地
- 品英Pickering將亮相2026航空電子國際論壇,展示航電與電池測試前沿方案
- 模擬芯片設計師的噩夢:晶體管差1毫伏就廢了,溫度升1度特性全飄
- 3A大電流僅需3x1.6mm?意法半導體DCP3603重新定義電源設計
- 芯科科技Tech Talks與藍牙亞洲大會聯動,線上線下賦能物聯網創新
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall



