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

FreeRTOS 隊列 信號量 互斥量

FreeRTOS高級篇6---FreeRTOS信號量分析

FreeRTOS系列第20篇---FreeRTOS信號量API函數(shù)

在Arduino IDE中使用FreeRTOS信號量

freeRTOS中最常用到的信號量有哪些

評論