中文字幕无码不卡一区二区三区_少妇被又大又粗又爽毛片久久黑人_91精品国产在热久久无毒不卡_久久久久久亚洲综合网站

技術(shù)熱線: 4007-888-234

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

提供開發(fā)工具、應(yīng)用測(cè)試 完善的開發(fā)代碼案例庫(kù)分享

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

技術(shù)支持

單片機(jī)與嵌入式系統(tǒng)中的并發(fā)和中斷

更新時(shí)間: 2019-10-18

在本文中,我們將介紹并發(fā)的概念以及許多單片機(jī)提供的用于處理并發(fā)的機(jī)制,專業(yè)術(shù)語(yǔ)稱為“中斷”。下面我們將介紹這些概念的基本定義,并思考它們與單片機(jī)代碼之間的關(guān)系。

一、什么是并發(fā)?

以生活中的示例來(lái)解釋并發(fā)性。通常,當(dāng)你上床睡覺(jué)時(shí),你希望在特定時(shí)間醒來(lái)。你在這里有兩個(gè)目標(biāo):上床睡覺(jué)以便休息,同時(shí)也要確保在起床時(shí)間別又睡著了。

introduction.jpg

確保你不會(huì)錯(cuò)過(guò)起床時(shí)間的一種方法是保持清醒狀態(tài)并觀看時(shí)鐘,但這將使你無(wú)法上床睡覺(jué)。為了解決這個(gè)問(wèn)題,我們通常使用鬧鐘在特定時(shí)間喚醒我們,這樣我們就可以專注于睡眠并且仍然達(dá)到喚醒的目標(biāo)。

并發(fā)是我們用于描述場(chǎng)景的術(shù)語(yǔ),當(dāng)你有兩個(gè)或兩個(gè)以上的流程同時(shí)參加,但在任何時(shí)間點(diǎn)只能物理處理一個(gè)流程。

在上面的示例中,需要注意的兩個(gè)過(guò)程是睡眠和跟蹤時(shí)間(因此我們?cè)谒璧臅r(shí)間醒來(lái))。同一個(gè)人在同一時(shí)間不可能同時(shí)做這兩個(gè)事情。

通常,我們只對(duì)與我們正在參與的流程相關(guān)的特定事件感興趣。正如你在上面注意到的,從時(shí)間角度來(lái)看,我們關(guān)心的唯一事件是是否該醒了。解決并發(fā)的典型方法是讓另一個(gè)物理資源(鬧鐘或人)監(jiān)視我們感興趣的事件,然后提醒(或中斷)該事件已發(fā)生的事實(shí),以便我們可以進(jìn)行處理。

二、單片機(jī)和網(wǎng)絡(luò)物理系統(tǒng)中的并發(fā)

單片機(jī)和網(wǎng)絡(luò)物理系統(tǒng)通常必須處理并發(fā)性。實(shí)際應(yīng)用中的一個(gè)例子是微波爐。該設(shè)備需要能夠處理食物加熱過(guò)程中按下按鈕或檢測(cè)你何時(shí)打開門。按下暫?;蛉∠粹o或打開門會(huì)使食物停止加熱。

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

三、更高級(jí)別的中斷和并發(fā)程序概述

單片機(jī)上的中斷的工作方式與前面討論的睡眠和鬧鐘示例相同。

你可以編寫一個(gè)配置外設(shè)以監(jiān)視某個(gè)事件并在該事件發(fā)生時(shí)中斷CPU的程序,例如,當(dāng)GPIO輸入值從0到1時(shí)。在程序運(yùn)行時(shí),CPU執(zhí)行你的程序段。主程序。當(dāng)你正在等待的事件發(fā)生時(shí),外圍設(shè)備會(huì)向CPU發(fā)出事件已發(fā)生的信號(hào)。如果一切配置正確,CPU將停止在主程序中執(zhí)行的操作,執(zhí)行一個(gè)稱為中斷服務(wù)程序(ISR)或中斷處理程序的特殊功能,然后返回主程序以從中斷處繼續(xù)執(zhí)行。完成時(shí)。

你必須將ISR編寫為代碼的一部分。假設(shè)你正在使用C編寫程序,這意味著你必須在將作為單片機(jī)將運(yùn)行的可執(zhí)行文件的一部分構(gòu)建的源代碼中的某個(gè)地方聲明和定義它。

但是,你自己不會(huì)呼叫ISR。所有單片機(jī)開發(fā)工具都有一種特定的方式讓你告訴C編譯器某個(gè)功能是一個(gè)ISR,以及它與哪個(gè)特定中斷相關(guān)聯(lián)。一旦正確完成此操作,當(dāng)發(fā)生特定中斷時(shí),CPU將自動(dòng)跳轉(zhuǎn)至該功能并執(zhí)行。

C代碼中斷示例

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

下圖詳細(xì)介紹了用C語(yǔ)言編寫的具有ISR的代碼如何操作,以幫助提供一種思考并發(fā)程序的好方法,假定所有中斷配置均正確完成。

introduction-to.jpg

1.CPU在main函數(shù)的while循環(huán)中執(zhí)行代碼。
2.事件(從1變?yōu)?)發(fā)生在為中斷配置的引腳上。
3.CPU在while循環(huán)中停止執(zhí)行代碼,并執(zhí)行中斷服務(wù)程序。
4.完成中斷服務(wù)程序執(zhí)行后,CPU從中斷處重新開始執(zhí)行主循環(huán)。
5.CPU在while循環(huán)中執(zhí)行代碼。
6.事件再次發(fā)生。
7.CPU在while循環(huán)中停止執(zhí)行代碼,并執(zhí)行中斷服務(wù)程序。
8.完成中斷服務(wù)程序執(zhí)行后,CPU從中斷處重新開始執(zhí)行主循環(huán)。

404
返回首頁(yè) |  返回上一頁(yè)
聊城市| 方山县| 清流县| 林芝县| 昭平县| 西乌珠穆沁旗| 三门县| 黔东| 洮南市| 陈巴尔虎旗| 板桥市| 荔波县| 临漳县| 锡林郭勒盟| 乌鲁木齐县| 长葛市| 维西| 新邵县| 东海县| 浦东新区| 南开区| 阿瓦提县| 迁西县| 沅陵县| 噶尔县| 土默特左旗| 郓城县| 河曲县| 龙江县| 蒙阴县| 麻江县| 长宁县| 六盘水市| 沁水县| 上饶县| 西乌珠穆沁旗| 正定县| 上蔡县| 建平县| 安吉县| 新安县|