1、信號(hào)量用于控制對(duì)共享資源的訪問
舉一個(gè)很常見的例子,某個(gè)停車場(chǎng)有100個(gè)停車位,這 100 個(gè)停車位大家都可以用,對(duì)于大家來說這 100 個(gè)停車位就是共享資源。假設(shè)現(xiàn)在這個(gè)停車場(chǎng)正常運(yùn)行,你要把車停到這個(gè)這個(gè)停車場(chǎng)肯定要先看一下現(xiàn)在停了多少車了?還有沒有停車位?當(dāng)前停車數(shù)量就是一個(gè)信號(hào)量,具體的停車數(shù)量就是這個(gè)信號(hào)量值,當(dāng)這個(gè)值到 100 的時(shí)候說明停車場(chǎng)滿了。停車場(chǎng)滿的時(shí)你可以等一會(huì)看看有沒有其他的車開出停車場(chǎng),當(dāng)有車開出停車場(chǎng)的時(shí)候停車數(shù)量就會(huì)減一,也就是說信號(hào)量減一,此時(shí)你就可以把車停進(jìn)去了,你把車停進(jìn)去以后停車數(shù)量就會(huì)加一,也就是信號(hào)量加一。這就是一個(gè)典型的使用信號(hào)量進(jìn)行共享資源管理的案例,在這個(gè)案例中使用的就是計(jì)數(shù)型信號(hào)量。
再看另外一個(gè)案例:使用公共電話,我們知道一次只能一個(gè)人使用電話,這個(gè)時(shí)候公共電話就只可能有兩個(gè)狀態(tài):使用或未使用,如果用電話的這兩個(gè)狀態(tài)作為信號(hào)量的話,那么這個(gè)就是二值信號(hào)量。
信號(hào)量用于控制共享資源訪問的場(chǎng)景相當(dāng)于一個(gè)上鎖機(jī)制,代碼只有獲得了這個(gè)鎖的鑰匙才能夠執(zhí)行。
2、信號(hào)量的用于任務(wù)同步
任務(wù)與任務(wù)或中斷與任務(wù)之間的同步。
在執(zhí)行中斷服務(wù)函數(shù)的時(shí)候可以通過向任務(wù)發(fā)送信號(hào)量來通知任務(wù)它所期待的事件發(fā)生了,當(dāng)退出中斷服務(wù)函數(shù)以后在任務(wù)調(diào)度器的調(diào)度下同步的任務(wù)就會(huì)執(zhí)行。
在編寫中斷服務(wù)函數(shù)的時(shí)候我們都知道一定要快進(jìn)快出,中斷服務(wù)函數(shù)里面不能放太多的代碼,否則的話會(huì)影響的中斷的實(shí)時(shí)性。裸機(jī)編寫中斷服務(wù)函數(shù)的時(shí)候一般都只是在中斷服務(wù)函數(shù)中打個(gè)標(biāo)記,然后在其他的地方根據(jù)標(biāo)記來做具體的處理過程。在使用 RTOS 系統(tǒng)的時(shí)候我們就可以借助信號(hào)量完成此功能,當(dāng)中斷發(fā)生的時(shí)候就釋放信號(hào)量,中斷服務(wù)函數(shù)不做具體的處理。具體的處理過程做成一個(gè)任務(wù),這個(gè)任務(wù)會(huì)獲取信號(hào)量,如果獲取到信號(hào)量就說明中斷發(fā)生了,那么就開始完成相應(yīng)的處理,這樣做的好處就是中斷執(zhí)行時(shí)間非常短。
-
嵌入式
+關(guān)注
關(guān)注
5045文章
18816瀏覽量
298460 -
信號(hào)
+關(guān)注
關(guān)注
11文章
2739瀏覽量
76174 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
483瀏覽量
61724
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論