你的位置:首頁 > 互連技術(shù) > 正文

微控制器和嵌入式系統(tǒng)中的并發(fā)和中斷

發(fā)布時間:2023-04-21 責(zé)任編輯:lina

【導(dǎo)讀】通常,我們只對與我們正在處理的過程相關(guān)的特定事件感興趣。正如您在上面注意到的,從時間的角度來看,我們關(guān)心的事件是是否該起床了。處理并發(fā)的典型方法是讓另一個物理資源(鬧鐘或人)監(jiān)視我們感興趣的事件,然后提醒(或打斷)我們事件已經(jīng)發(fā)生的事實,以便我們可以處理它。


本文是探討并發(fā)和中斷概念的系列文章中的篇。本系列的大部分內(nèi)容將直接處理微控制器和 GPIO 中斷。

在初的這篇文章中,我們將討論這些概念的基本定義,并考慮它們與為微控制器編寫代碼的相關(guān)性。

什么是并發(fā)?

讓我們用一個我們都熟悉的例子來談?wù)劜l(fā)。通常,當(dāng)您上床睡覺時,您想在特定時間醒來。你在這里有兩個目標(biāo):上床睡覺,這樣你就可以休息,但也要確保你不會睡到你想要的起床時間。 

確保您不會錯過起床時間的一種方法是保持清醒并看時鐘,但這會破壞您想要上床睡覺的目的。為了幫助補救這個問題,我們通常使用鬧鐘(一個設(shè)備或受信任的人,到那時已經(jīng)醒了)在特定時間叫醒我們,這樣我們就可以專注于睡眠,同時仍然實現(xiàn)我們的目標(biāo)時間。

并發(fā)性是我們用來描述您同時處理兩個或多個進程但在任何時間點只能物理處理其中一個進程的能力的場景。 

在上面的示例中,要注意的兩個過程是睡眠和跟蹤時間(因此我們會在所需時間醒來)。同一個人同時做這兩件事在物理上是不可能的。 

通常,我們只對與我們正在處理的過程相關(guān)的特定事件感興趣。正如您在上面注意到的,從時間的角度來看,我們關(guān)心的事件是是否該起床了。處理并發(fā)的典型方法是讓另一個物理資源(鬧鐘或人)監(jiān)視我們感興趣的事件,然后提醒(或打斷)我們事件已經(jīng)發(fā)生的事實,以便我們可以處理它。

圖 1 顯示了這方面的時間線圖解。


微控制器和嵌入式系統(tǒng)中的并發(fā)和中斷
圖 1.上床睡覺并讓鬧鐘在特定時間叫醒您的時間線圖示。


嵌入式和網(wǎng)絡(luò)物理系統(tǒng)中的并發(fā) 

嵌入式和網(wǎng)絡(luò)物理系統(tǒng)通常必須處理并發(fā)性。 

這個概念的一個例子是微波爐。該設(shè)備需要能夠處理按鈕按下或檢測您在食物加熱時打開門的時間。按下暫?;蛉∠粹o或打開門將導(dǎo)致食物停止加熱。 

微控制器——您通常將其編程為系統(tǒng)“大腦”的計算機——在設(shè)計時就考慮到了并發(fā)性。

除了通用 CPU 之外,它們還包含許多用于與外界交互的專用硬件設(shè)備(稱為外圍設(shè)備),因此您可以連接諸如按鈕和顯示器之類的東西以及實現(xiàn)系統(tǒng)所需的其他外部硬件。通常,這些外設(shè)具有中斷機制,因此 CPU 可以要求它們監(jiān)視特定事件,然后在該事件發(fā)生時中斷 CPU。

中斷和并發(fā)程序的概述

微控制器上的中斷就像我之前討論的睡眠和鬧鐘示例一樣工作。 

您可以編寫一個程序,將外設(shè)配置為監(jiān)視某個事件并在該事件發(fā)生時中斷 CPU——例如,當(dāng) GPIO 輸入值從 0 變?yōu)?1 時。當(dāng)您的程序運行時,CPU 會執(zhí)行您的程序片段主程序。當(dāng)您等待的事件發(fā)生時,外圍設(shè)備向 CPU 發(fā)出事件已經(jīng)發(fā)生的信號。如果一切配置正確,CPU 將停止它在主程序中所做的任何事情,執(zhí)行一個稱為中斷服務(wù)例程 (ISR) 或中斷處理程序的特殊函數(shù),然后返回主程序從中斷的地方繼續(xù)當(dāng)它完成時。 

您必須將 ISR 編寫為代碼的一部分。假設(shè)您正在使用 C 編寫程序,這意味著您必須在源代碼中的某處聲明和定義它,該源代碼將作為微控制器將運行的可執(zhí)行文件的一部分構(gòu)建。

但是,您永遠不會自己調(diào)用 ISR。所有微控制器開發(fā)工具都有一種特定的方式讓您告訴 C 編譯器某個函數(shù)是 ISR 以及它與哪個特定中斷相關(guān)聯(lián)。正確完成此操作后,當(dāng)特定中斷發(fā)生時,CPU 將自動跳轉(zhuǎn)到該函數(shù)并執(zhí)行它。 

C 代碼中的中斷示例

由于中斷的工作方式,一開始在編程中處理并發(fā)似乎有點不直觀。

下圖展示了用 C 語言編寫的具有 ISR 的代碼將如何運行,以幫助提供一種思考并發(fā)程序的好方法。它假定所有中斷配置都已正確完成。


微控制器和嵌入式系統(tǒng)中的并發(fā)和中斷
圖 2.帶有中斷的 C 代碼


CPU 在 main 函數(shù)的 while 循環(huán)中執(zhí)行代碼。
感興趣的事件(從 1 變?yōu)?0)發(fā)生在為中斷配置的引腳上。
CPU停止執(zhí)行while循環(huán)中的代碼,轉(zhuǎn)而執(zhí)行中斷服務(wù)程序。
中斷服務(wù)程序執(zhí)行完畢后,CPU 從中斷處繼續(xù)執(zhí)行主循環(huán)。
CPU 正在 while 循環(huán)中執(zhí)行代碼。
感興趣的事件再次發(fā)生。
CPU停止執(zhí)行while循環(huán)中的代碼,轉(zhuǎn)而執(zhí)行中斷服務(wù)程序。
中斷服務(wù)程序執(zhí)行完畢后,CPU 從中斷處繼續(xù)執(zhí)行主循環(huán)。

外圍設(shè)備和 GPIO 的中斷

本系列的大部分內(nèi)容都集中在微控制器的并發(fā)和中斷概念上。接下來,我們將討論GPIO 中斷及其工作原理。 


免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理。


推薦閱讀:

??低暟l(fā)布2022年ESG報告:科技為善,助力可持續(xù)的美好未來

如何設(shè)計簡單的電壓控制雙向電流源

運算放大器的8種應(yīng)用電路,您都了解嗎?

打開信號繼電器的正確方式

輕量級的電源系統(tǒng),該如何設(shè)計?


特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
?

關(guān)閉

?

關(guān)閉