最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【教程】STM32 FreeRTOS實時系統(tǒng)移植系列2:FreeRTOS 互斥信號量

2021-08-23 09:08 作者:華清遠見研發(fā)中心  | 我要投稿

1.寫在前面:

?

本文章為《STM32MP157開發(fā)教程之FreeRTOS操作系統(tǒng)篇》系列中的一篇,筆者使用的開發(fā)平臺為華清遠見FS-MP1A開發(fā)板(STM32MP157開發(fā)板)。stm32mp157是ARM雙核,2個A7核,1個M4核,A7核上可以跑Linux操作系統(tǒng),M4核上可以跑FreeRTOS、RT-Thread等實時操作系統(tǒng),STM32MP157開發(fā)板所以既可以學(xué)嵌入式linux,也可以學(xué)stm32單片機。

針對FS-MP1A開發(fā)板,除了FreeRTOS操作系統(tǒng)篇外,還包括其他多系列教程,包括Cortex-A7開發(fā)篇、Cortex-M4開發(fā)篇、擴展板驅(qū)動移植篇、Linux應(yīng)用開發(fā)篇、Linux系統(tǒng)移植篇、Linux驅(qū)動開發(fā)篇、硬件設(shè)計篇、人工智能機器視覺篇、Qt應(yīng)用編程篇、Qt綜合項目實戰(zhàn)篇等。歡迎關(guān)注,更多stm32mp157開發(fā)教程及視頻,可加技術(shù)交流Q群459754978,感謝關(guān)注。

FS-MP1A開發(fā)板詳情介紹:https://item.taobao.com/item.htm?id=622457259672


2.FreeRTOS互斥信號量

2.1 互斥信號量簡介

互斥信號量可以作為一種特殊的二值信號量,優(yōu)先級繼承機制,保護臨界資源。

互斥信號量適合用于那些需要互斥訪問的應(yīng)用中。在互斥訪問中互斥信號量相當(dāng)于一個鑰匙,當(dāng)任務(wù)想要使用資源的時候就必須先獲得這個鑰匙,當(dāng)使用完資源以后就必須歸還這個鑰匙,這樣其他的任務(wù)就可以拿著這個鑰匙去使用資源。
互斥信號量使用和二值信號量相同的 API 操作函數(shù),所以互斥信號量也可以設(shè)置阻塞時間,不同于二值信號量的是互斥信號量具有優(yōu)先級繼承的特性。當(dāng)一個互斥信號量正在被一個低優(yōu)先級的任務(wù)使用,而此時有個高優(yōu)先級的任務(wù)也嘗試獲取這個互斥信號量的話就會被阻塞。不過這個高優(yōu)先級的任務(wù)會將低優(yōu)先級任務(wù)的優(yōu)先級提升到與自己相同的優(yōu)先級,這個過程就是優(yōu)先級繼承。優(yōu)先級繼承盡可能的降低了高優(yōu)先級任務(wù)處于阻塞態(tài)的時間,并且將已經(jīng)出現(xiàn)的“優(yōu)先級翻轉(zhuǎn)”的影響降到最低。

2.2 互斥信號量函數(shù)

2.2.1 創(chuàng)建信號量

在新版FreeRTOS中,一般使用xSemaphoreCreateMutex()函數(shù)動態(tài)創(chuàng)建互斥信號量,其所需要的內(nèi)存通過動態(tài)內(nèi)存管理方法分配。此函數(shù)是個宏,具體創(chuàng)建工程是由函數(shù)xQueueCreateMutex()完成。此函數(shù)原型如下:

SemaphoreHandle_t xSemaphoreCreateMutex(void)

參數(shù): 無

返回值:

NULL:互斥信號量創(chuàng)建失敗

其他值:創(chuàng)建成功的互斥信號量的句柄

2.2.2 釋放信號量

釋放信號量的函數(shù)與二值信號量相同,具體請參考FreeRTOS二值信號量章節(jié)。

2.2.3獲取信號量

獲取信號量的函數(shù)也有兩個,分別如下:

任務(wù)級信號量獲取函數(shù)xSemaphoreTake(),此函數(shù)也是個宏,可以獲取二值信號量、計數(shù)型信號量和互斥信號量,其函數(shù)原型如下:

BaseType_t xSemaphoreTake(SemaphoreHandle_t xSemaphore,

TickType_t xBlockTime)

參數(shù):

xSemaphore:要獲取的信號量句柄

xBlockTime:阻塞時間

返回值:

pdTRUE:獲取信號量成功

pdFALSE:超時,獲取信號量失敗

中斷級信號量獲取函數(shù) xSemaphoreTakeFromISR(),此函數(shù)也是個宏,只能獲取二值信號量和計數(shù)型信號量,其函數(shù)原型如下:

BaseType_t xSemaphoreTakeFromISR(SemaphoreHandle_t xSemaphore,

BaseType_t* pxHigherPriorityTaskWoken)

參數(shù):

xSemaphore:要獲取的信號量句柄

pxHigherPriorityTaskWoken:標(biāo)記退出此函數(shù)以后是否進行任務(wù)切換

返回值:

PdPASS:獲取信號量成功

pdFALSE:獲取信號量失敗


2.3操作實驗

2.3.1實驗設(shè)計

互斥信號量其實就是一個擁有優(yōu)先級繼承的二值信號量,互斥信號量適合用于那些需要互斥訪問的應(yīng)用中。在本節(jié)實驗中,分別控制LED1和LED2燈的亮滅來表示。

任務(wù)及其功能如下:

StartTask02(): 控制LED2熄滅,LED1點亮,延時2秒鐘。

StartDefaultTask(): 控制LED1熄滅,LED2點亮,延時1秒鐘。

2.3.2實驗過程與分析

首先,根據(jù)之前幾章內(nèi)容配置好CubeMX,按照上一節(jié)配置“FREERTOS”,完成后生成代碼。 在主函數(shù)中調(diào)用xSemaphoreCreateMutex()創(chuàng)建互斥信號量,在StartDefaultTask() 與StartTask02()中添加代碼如下。

可參考12.3.2章節(jié)進行導(dǎo)入已有工程,工程存放路徑【華清遠見-FS-MP1A開發(fā)資料\02-程序源碼\ARM體系結(jié)構(gòu)與接口技術(shù)\FreeRTOS\3_MP1A-FreeRTOS-Mutex】

此時會發(fā)現(xiàn),LED1點亮、LED2熄滅狀態(tài)下保持2秒,LED2點亮、LED1熄滅狀態(tài)下保持1秒,進行交替閃爍。


華清遠見教育科技有限公司

開發(fā)板、核心板、資源擴展板及配套海量資料

淘寶直銷店:https://shop273057902.taobao.com/
淘寶企業(yè)店:https://shop533757171.taobao.com/
微信公眾號:華清遠見IT開放實驗室
bilibili:https://space.bilibili.com/670826565
華清遠見官網(wǎng):http://www.fsdev.com.cn/
技術(shù)交流QQ群:459754978(免費提供下載資料)


【教程】STM32 FreeRTOS實時系統(tǒng)移植系列2:FreeRTOS 互斥信號量的評論 (共 條)

分享到微博請遵守國家法律
周口市| 苏尼特右旗| 呈贡县| 冀州市| 崇仁县| 宝应县| 浪卡子县| 松阳县| 太原市| 拜泉县| 从化市| 武鸣县| 谷城县| 黑水县| 余庆县| 湾仔区| 平谷区| 察哈| 台安县| 南岸区| 漠河县| 鄂州市| 建昌县| 潮州市| 莲花县| 曲靖市| 平谷区| 枝江市| 鄄城县| 常德市| 罗山县| 平塘县| 博罗县| 大安市| 定襄县| 西宁市| 大关县| 屯昌县| 柘城县| 靖安县| 台州市|