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

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

FreeRTOS 筆記_任務(wù)計(jì)數(shù)信號(hào)量

2023-07-13 15:37 作者:自閉選手的Z23  | 我要投稿

????基于任務(wù)通知(Task Notifications) 的計(jì)數(shù)信號(hào)量是FreeRTOS 計(jì)數(shù)信號(hào)量的另一種實(shí)現(xiàn)方式,這種方式實(shí)現(xiàn)的計(jì)數(shù)信號(hào)量稱之為任務(wù)計(jì)數(shù)信號(hào)量。任務(wù)計(jì)數(shù)信號(hào)量效率更高, 需要的 RAM 空間更小。


1?任務(wù)通知介紹

????FreeRTOS 每個(gè)已經(jīng)創(chuàng)建的任務(wù)都有一個(gè)任務(wù)控制塊(task control block),任務(wù)控制塊就是一個(gè)結(jié)構(gòu)體變量,用于記錄任務(wù)的相關(guān)信息。

????結(jié)構(gòu)體變量中有一個(gè) 32 位的變量成員 ulNotifiedValue 是專門用于任務(wù)通知的。

????通過任務(wù)通知方式可以實(shí)現(xiàn)計(jì)數(shù)信號(hào)量,二值信號(hào)量,事件標(biāo)志組和消息郵箱(消息郵箱就是消息隊(duì)列長(zhǎng)度為 1 的情況)。使用方法與事件標(biāo)志組和信號(hào)量基本相同,只是換了不同的函數(shù)來實(shí)現(xiàn)。任務(wù)通知方式實(shí)現(xiàn)的計(jì)數(shù)信號(hào)量,二值信號(hào)量,事件標(biāo)志組和消息郵箱是通過修改變量ulNotifiedValue 實(shí)現(xiàn)的:

????◆ 設(shè)置接收任務(wù)控制塊中的變量 ulNotifiedValue 可以實(shí)現(xiàn)消息郵箱。

???? ◆ 如果接收任務(wù)控制塊中的變量 ulNotifiedValue 還沒有被其接收到,也可以用新數(shù)據(jù)覆蓋原有數(shù)據(jù) ,這就是覆蓋方式的消息郵箱。

???? ◆ 設(shè)置接收任務(wù)控制塊中的變量 ulNotifiedValue 的 bit0-bit31 數(shù)值可以實(shí)現(xiàn)事件標(biāo)志組。?

????◆ 設(shè)置接收任務(wù)控制塊中的變量 ulNotifiedValue 數(shù)值進(jìn)行加一或者減一操作可以實(shí)現(xiàn)計(jì)數(shù)信號(hào)量和二值信號(hào)量。


2?任務(wù)計(jì)數(shù)信號(hào)量

????計(jì)數(shù)信號(hào)量就是對(duì)一個(gè)變量進(jìn)行計(jì)數(shù),變量的范圍是 從 0 到用戶創(chuàng)建計(jì)數(shù)信號(hào)量時(shí)所設(shè)置的大小。當(dāng)計(jì)數(shù)變量大于 0 的時(shí)候計(jì)數(shù)信號(hào)量管理的資源才可以使用, 計(jì)數(shù)變量的具體數(shù)值就是可用的資源大小。

????任務(wù)計(jì)數(shù)信號(hào)量與計(jì)數(shù)信號(hào)量要實(shí)現(xiàn)的功能是一樣的,不同的是調(diào)用的函數(shù)和使用的計(jì)數(shù)變量

◆ 任務(wù)計(jì)數(shù)信號(hào)量的計(jì)數(shù)變量是通過任務(wù)控制塊中的一個(gè) 32 位變量 ulNotifiedValue 實(shí)現(xiàn)計(jì)數(shù)。計(jì)數(shù)信號(hào)量創(chuàng)建后會(huì)有自己的計(jì)數(shù)變量。?

◆ 任務(wù)計(jì)數(shù)信號(hào)量是通過函數(shù) ulTaskNotifyTake()替代函數(shù) xSemaphoreTake()實(shí)現(xiàn)資源獲取,即對(duì)計(jì)數(shù)信號(hào)量數(shù)值進(jìn)行減一操作。

◆ 任務(wù)計(jì)數(shù)信號(hào)量是通過函數(shù) xTaskNotifyGive() 和 vTaskNotifyGiveFromISR()替代函數(shù) xSemaphoreGive() 和 xSemaphoreGiveFromISR()實(shí)現(xiàn)資源釋放,即對(duì)計(jì)數(shù)信號(hào)量的數(shù)值進(jìn) 行加一操作。


3?任務(wù)計(jì)數(shù)信號(hào)量 API?函數(shù)

◆ xTaskNotifyGive?

◆ vTaskNotifyGiveFromISR?

◆ ulTaskNotifyTake


函數(shù) xTaskNotifyGive 用于釋放信號(hào)量(含任務(wù)二值信號(hào)量,任務(wù)計(jì)數(shù)信號(hào)量)。

◆ 第 1 個(gè)參數(shù)是任務(wù)句柄。?

◆ 返回值,僅有一個(gè)返回值 pdPASS。

????使用這個(gè)函數(shù)要注意以下問題:

1. 任務(wù)信號(hào)量的初始計(jì)數(shù)值是 0。任務(wù)信號(hào)量不像前面章節(jié)講解的信號(hào)量,無需單獨(dú)創(chuàng)建即可使用。?

2. 默認(rèn)配置此函數(shù)可以使用的的宏定義已經(jīng)在 FreeRTOS.h 文件中使能:?

#define configUSE_TASK_NOTIFICATIONS ????1?

當(dāng)然,如果用戶不需要使用任務(wù)通知功能相關(guān)的函數(shù),可以在 FreeRTOSConfig.h 文件中配置此宏定義為 0 來禁止,這樣創(chuàng)建的每個(gè)任務(wù)可以節(jié)省 8 個(gè)字節(jié)的需求。?

3. 此函數(shù)是用于任務(wù)代碼中調(diào)用的,故不可以在中斷服務(wù)程序中調(diào)用此函數(shù),中斷服務(wù)程序中使用的是 vTaskNotifyGiveFromISR。



函數(shù) vTaskNotifyGiveFromISR 用于釋放信號(hào)量(含任務(wù)二值信號(hào)量,任務(wù)計(jì)數(shù)信號(hào)量)。

◆ 第 1 個(gè)參數(shù)是任務(wù)句柄。?

◆ 第2 個(gè)參數(shù)用于保存是否有高優(yōu)先級(jí)任務(wù)準(zhǔn)備就緒。如果函數(shù)執(zhí)行完畢后,此參數(shù)的數(shù)值是 pdTRUE, 說明有高優(yōu)先級(jí)任務(wù)要執(zhí)行,否則沒有

舉例:



函數(shù) xTaskNotifyGive 用于釋放信號(hào)量(含任務(wù)二值信號(hào)量,任務(wù)計(jì)數(shù)信號(hào)量)。

◆ 第 1 個(gè)參數(shù)配置為 pdFALSE 表示函數(shù)返回前用于任務(wù)信號(hào)量的內(nèi)部變量 ulNotifiedValue數(shù)值減一,這種方式用于任務(wù)計(jì)數(shù)信號(hào)量。

????參數(shù)配置為 pdTRUE 表示函數(shù)返回前用于任務(wù)信號(hào)量的內(nèi)部變量 ulNotifiedValue數(shù)值被清零,這種方式用于任務(wù)二值信號(hào)量。

◆ 第 2 個(gè)參數(shù)是沒有任務(wù)信號(hào)量可用時(shí),等待信號(hào)量可用的最大等待時(shí)間,單位系統(tǒng)時(shí)鐘節(jié)拍。

舉例:


FreeRTOS 筆記_任務(wù)計(jì)數(shù)信號(hào)量的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
康乐县| 迁安市| 永兴县| 罗定市| 南康市| 定结县| 盘锦市| 太原市| 文化| 余江县| 鄂州市| 琼结县| 昆山市| 蕲春县| 白山市| 宽城| 牡丹江市| 合作市| 延庆县| 鄂托克前旗| 开化县| 弥渡县| 禄劝| 清河县| 焦作市| 湘潭市| 泰宁县| 新丰县| 正定县| 农安县| 霍城县| 安陆市| 丹凤县| 江西省| 莒南县| 呼伦贝尔市| 旺苍县| 开封县| 馆陶县| 靖江市| 东乡族自治县|