<abbr id="kc8ii"><menu id="kc8ii"></menu></abbr>
  • <input id="kc8ii"><tbody id="kc8ii"></tbody></input><table id="kc8ii"><source id="kc8ii"></source></table><kbd id="kc8ii"></kbd>
    <center id="kc8ii"><table id="kc8ii"></table></center>
  • <input id="kc8ii"></input>
    <abbr id="kc8ii"></abbr>
  • <abbr id="kc8ii"></abbr>
  • <center id="kc8ii"><table id="kc8ii"></table></center>
    <abbr id="kc8ii"></abbr>
    你的位置:首頁 > 互連技術 > 正文

    微控制器和嵌入式系統中的并發和中斷

    發布時間:2023-04-21 責任編輯:lina

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


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

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

    什么是并發?

    讓我們用一個我們都熟悉的例子來談談并發。通常,當您上床睡覺時,您想在特定時間醒來。你在這里有兩個目標:上床睡覺,這樣你就可以休息,但也要確保你不會睡到你想要的起床時間。 

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

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

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

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

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


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


    嵌入式和網絡物理系統中的并發 

    嵌入式和網絡物理系統通常必須處理并發性。 

    這個概念的一個例子是微波爐。該設備需要能夠處理按鈕按下或檢測您在食物加熱時打開門的時間。按下暫停或取消按鈕或打開門將導致食物停止加熱。 

    微控制器——您通常將其編程為系統“大腦”的計算機——在設計時就考慮到了并發性。

    除了通用 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報告:科技為善,助力可持續的美好未來

    如何設計簡單的電壓控制雙向電流源

    運算放大器的8種應用電路,您都了解嗎?

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

    輕量級的電源系統,該如何設計?


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

    關閉

    ?

    關閉

    AV无码一区二区大桥未久| 最近最新中文字幕完整版| 色综合中文字幕| 少妇伦子伦精品无码STYLES | 亚洲日产无码中文字幕| 中文无码喷潮在线播放| 亚洲2022国产成人精品无码区| а中文在线天堂| 国产成人一区二区三中文| 精品久久久久久无码专区| 红桃AV一区二区三区在线无码AV| 色欲狠狠躁天天躁无码中文字幕 | 极品粉嫩嫩模大尺度无码视频| 日韩精品无码一区二区中文字幕| 国产网红无码精品视频| 亚洲AV综合色区无码一区 | 亚洲VA中文字幕不卡无码| 亚洲乱码中文字幕手机在线| 亚洲av综合avav中文| 人妻系列无码专区久久五月天 | 国产精品VA在线观看无码不卡| 中文字幕人妻无码专区| 四虎影视无码永久免费| 再看日本中文字幕在线观看 | 在线观看免费无码专区| 在线中文字幕精品第5页| 亚洲制服中文字幕第一区| 中文字幕 亚洲 有码 在线| 亚洲成a人在线看天堂无码| 国产成人无码a区在线视频| 国产精品无码免费播放| AV无码免费永久在线观看| 办公室丝袜激情无码播放 | 丰满白嫩人妻中出无码| 777久久精品一区二区三区无码| heyzo高无码国产精品| 国产a级理论片无码老男人| 18禁网站免费无遮挡无码中文| AV成人午夜无码一区二区| 无码人妻丰满熟妇区五十路| 日本公妇在线观看中文版|