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

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

【教程】STM32 FreeRTOS實時系統(tǒng)移植系列7:FreeRTOS 事件標(biāo)志組

2021-08-30 10:30 作者:華清遠(yuǎn)見研發(fā)中心  | 我要投稿

1.寫在前面:

本文章為《STM32MP157開發(fā)教程之FreeRTOS操作系統(tǒng)篇》系列中的一篇,筆者使用的開發(fā)平臺為華清遠(yuǎn)見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事件標(biāo)志組

2.1事件標(biāo)志組簡介

從前幾章中我們知道可以用信號量實現(xiàn)同步,但信號量只能實現(xiàn)與單個任務(wù)或中斷之間的同步,當(dāng)某個任務(wù)需要與多個任務(wù)或事件進行同步時,這時候我們可以使用事件標(biāo)志組。

講到事件標(biāo)志組,首先要提到事件位,事件位用來表明某個事件是否發(fā)生,通常用作事件標(biāo)志。比如:從中斷中接收指令需要處理時將某個位(標(biāo)志)置1,當(dāng)處理結(jié)束以后就講這個位(標(biāo)志)置0。

一個事件組就是一組的事件位,事件組中的事件位通過位編號來訪問。

2.2事件標(biāo)志組函數(shù)

2.2.1 創(chuàng)建事件標(biāo)志組

創(chuàng)建事件標(biāo)志組的函數(shù)有兩個,分別如下:

xEventGroupCreate(),此函數(shù)用于動態(tài)創(chuàng)建事件標(biāo)志組,所需要的內(nèi)存通過動態(tài)內(nèi)存管理方法分配,事件標(biāo)志組可用的bits數(shù)取決于宏configUSE_16_BIT_TICKS,當(dāng)此宏為1時,事件標(biāo)志組有8個可用位,當(dāng)為0時有24個可用位。其函數(shù)原型如下:

EventGroupHandle_t xEventGroupCreate( void )

參數(shù):無

返回值:

NULL:事件標(biāo)志組創(chuàng)建失敗。

其他值:創(chuàng)建成功的事件標(biāo)志組句柄。

xEventGroupCreateStatic(),此函數(shù)也用于創(chuàng)建事件標(biāo)志組,所需要的內(nèi)存通過用戶自行分配,其函數(shù)原型如下:

EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer )

參數(shù):

pxEventGroupBuffer: 指向一個StaticEventGroup_t類型的變量,用來保存件標(biāo)志組結(jié)構(gòu)體。

返回值:

NULL:事件標(biāo)志組創(chuàng)建失敗。

其他值:創(chuàng)建成功的事件標(biāo)志組句柄。

2.2.2 設(shè)置事件位

設(shè)置事件位包括置1與清零操作,F(xiàn)reeRTOS提供了四個函數(shù)可以設(shè)置事件標(biāo)志組的事件位,分別如下:

在任務(wù)級中將指定事件位清零函數(shù)xEventGroupClearBits(),其函數(shù)原型如下:

EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup,

Const EventBits_t uxBitsToClear)

參數(shù):

xEventGroup: 要操作的事件標(biāo)志組句柄。

uxBitsToClear: 要清除的事件位。

返回值:

任何值: 將指定事件位清零之前的事件組值。

中斷級清零函數(shù)
xEventGroupClearBitsFromISR(),此函數(shù)為xEventGroupClearBits()的中斷版本,只能用于中斷服務(wù)函數(shù)中,其函數(shù)原型如下:

BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup,

const EventBits_t uxBitsToSet )

參數(shù):

xEventGroup: 要操作的事件標(biāo)志組句柄。

uxBitsToSet: 要清除的事件位。

返回值:

pdPASS: 事件位清零成功。

pdFAISE: 事件位清零失敗。

置1函數(shù)xEventGroupSetBits(),此函數(shù)可在任務(wù)級中將指定事件位置1,其函數(shù)原型如下:

EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup,

Const EventBits_t uxBitsToSet)

參數(shù):

xEventGroup: 要操作的事件標(biāo)志組句柄。

uxBitsToSet: 指定要置1的事件位。

返回值:

任何值: 將指定事件位置1后的事件組值。

中斷xEventGroupSetBitsFromISR(),此函數(shù)為xEventGroupSetBits()的中斷版本,只能用于中斷服務(wù)函數(shù)中,其函數(shù)原型如下:

BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup,

const EventBits_t uxBitsToSet

BaseType_t* pxHigherPriorityTaskWoken)

參數(shù):

xEventGroup: 要操作的事件標(biāo)志組句柄。

uxBitsToSet: 指定要置1的事件位。

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

返回值:

pdPASS: 事件位置1成功。

pdFAISE: 事件位置1失敗。

2.2.3 獲取事件標(biāo)志組值

FreeRTOS中提供了可以查詢事件標(biāo)志組值的API函數(shù),分別如下:

xEventGroupGetBits(),此函數(shù)用于任務(wù)中獲取當(dāng)前事件標(biāo)志組的值,即各個事件位的值,此函數(shù)是個宏,其函數(shù)原型如下:

EventBits_t xEventGroupGetBits( EventGroupHandle_t xEventGroup )

參數(shù):

xEventGroup: 要獲取的事件標(biāo)志組的句柄。

返回值:

任何值: 當(dāng)前事件標(biāo)志組的值。

xEventGroupGetBitsFromISR(),此函數(shù)用于在中斷服務(wù)函數(shù)中獲取當(dāng)前事件標(biāo)志組的值,為函數(shù)xEventGroupGetBits()的中斷版本,此函數(shù)也是個宏,其函數(shù)原型如下:

BaseType_t xEventGroupGetBitsFromISR ( EventGroupHandle_t xEventGroup);

參數(shù):

xEventGroup: 要獲取的事件標(biāo)志組的句柄。

返回值:

任何值: 當(dāng)前事件標(biāo)志組的值。

2.2.4 等待指定是事件位

當(dāng)某個任務(wù)需要與多個事件進行同步時,那么它就需要等待并判斷多個事件位,此時可以調(diào)用函數(shù)xEventGroupWaitBits()完成功能。調(diào)用此函數(shù)以后如果等待的事件位還沒有準(zhǔn)備好的話進入阻塞狀態(tài),直到等待的事件位準(zhǔn)備好或者阻塞時間到達,其函數(shù)原型如下

EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,

const EventBits_t uxBitsToWaitFord,

const BaseType_t xClearOnExit,

const BaseType_t xWaitForAllBits,

const TickType_t xTicksToWait )

參數(shù):

xEventGroup: 指定要等待的事件標(biāo)志組。

uxBitsToWaitFord: 指定要等待的事件位。

xClearOnExit: 此參數(shù)要是為pdTRUE的話,那么在退出此函數(shù)之前由參數(shù)

uxBitsToWaitFor所設(shè)置的這些事件位就會清零。如果設(shè)置位pdFALSE

的話這些事件位就不會改變。

xWaitForAllBits: 此參數(shù)如果設(shè)置為 pdTRUE 的話,當(dāng) uxBitsToWaitFord 所設(shè)置的

這些事件位都置 1,或者指定的阻塞時間到的時候函數(shù)

xEventGroupWaitBits()才會返回。當(dāng)此函數(shù)為 pdFALSE 的話,只要

uxBitsToWaitFor 所設(shè)置的這些事件位其中的任意一個置1,或者指

定 的 阻 塞 時 間到 的 話 函 數(shù)xEventGroupWaitBits()就會返回。

返回值:

任何值: 返回當(dāng)所等待的事件位置 1 以后的事件標(biāo)志組的值,或者阻塞時間到。根

據(jù)這個值我們就知道哪些事件位置 1 了。如果函數(shù)因為阻塞時間到而返回的

話這個返回值就不代表任何的含義。

2.3操作實驗

2.3.1實驗設(shè)計

本次設(shè)計通過檢測三個按鍵狀態(tài),設(shè)置事件組中不同事件位,當(dāng)全設(shè)置1之后,所有事件位清零,翻轉(zhuǎn)LED電平。

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

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

StartTask02(): 等待事件組的所有事件位,若不全為1,則進入阻塞狀態(tài),當(dāng)全設(shè)置為1時,通過翻轉(zhuǎn)LED1電平表示。

StartDefaultTask(): 檢測按鍵狀態(tài),當(dāng)不同按鍵按下時,設(shè)置事件組對應(yīng)事件位。

2.3.2實驗過程與分析

首先,根據(jù)之前幾章內(nèi)容配置好CubeMX,按照上一節(jié)配置“FREERTOS”,完成后生成代碼。 在StartDefaultTask() 與StartTask02()中添加代碼如下。



另外,首先在主函數(shù)中調(diào)用xEventGroupCreate()函數(shù)創(chuàng)建事件標(biāo)志組,獲得事件標(biāo)志組句柄。

當(dāng)KEY1、KEY2、KEY3分別按下時,調(diào)用xEventGroupSetBits()函數(shù)分別將事件標(biāo)志組的bit0、bit1、bit2置1,函數(shù)xEventGroupWaitBits()同時等待標(biāo)志組的bit0、bit1、bit2,當(dāng)這三個事件位都置為1時,才會執(zhí)行任務(wù)中的其他程序。另外調(diào)用函數(shù)xEventGroupGetBits()可以查詢標(biāo)志組EventGroupHandler的值變化,結(jié)果如下所示。


零基礎(chǔ)玩轉(zhuǎn)stm32mp157:ARM Cortex-M4裸機開發(fā)篇(連載中)

硬件平臺:華清遠(yuǎn)見FS-MP1A開發(fā)板(STM32MP157)

部分開發(fā)教程下載:加QQ群459754978,群文件里有。

淘寶購買鏈接:https://item.taobao.com/item.htm?id=622457259672

手機淘寶分享碼:復(fù)制本行文字打開手淘?T4FPXn3YYJ2?


【教程】STM32 FreeRTOS實時系統(tǒng)移植系列7:FreeRTOS 事件標(biāo)志組的評論 (共 條)

分享到微博請遵守國家法律
泽州县| 凤翔县| 临安市| 陕西省| 武功县| 玛纳斯县| 额尔古纳市| 屏南县| 闵行区| 行唐县| 阜新| 江达县| 江安县| 江油市| 龙门县| 吉首市| 孝昌县| 乐平市| 唐河县| 双鸭山市| 高青县| 沙坪坝区| 许昌县| 灵璧县| 濮阳市| 东丰县| 白河县| 柘城县| 翼城县| 个旧市| 南木林县| 永城市| 南丹县| 平遥县| 通海县| 嘉荫县| 潮安县| 义乌市| 西丰县| 福泉市| 浑源县|