0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

韋東山freeRTOS系列教程之信號量(6)

嵌入式Linux那些事 ? 2021-12-13 14:35 ? 次閱讀

文章目錄

  • 系列教程總目錄
  • 概述
  • 6.1 信號量的特性
    • 6.1.1 信號量的常規(guī)操作
    • 6.1.2 信號量跟隊列的對比
    • 6.1.3 兩種信號量的對比
  • 6.2 信號量函數(shù)
    • 6.2.1 創(chuàng)建
    • 6.2.2 刪除
    • 6.2.3 give/take
  • 6.3 示例12: 使用二進制信號量來同步
  • 6.4 示例13: 防止數(shù)據(jù)丟失
  • 6.5 示例14: 使用計數(shù)型信號量

需要獲取更好閱讀體驗的同學,請訪問我專門設立的站點查看,地址:http://rtos.100ask.net/

系列教程總目錄

本教程連載中,篇章會比較多,為方便同學們閱讀,點擊這里可以查看文章的 目錄列表,目錄列表頁面地址:https://blog.csdn.net/thisway_diy/article/details/121399484

概述

前面介紹的隊列(queue)可以用于傳輸數(shù)據(jù):在任務之間、任務和中斷之間。

有時候我們只需要傳遞狀態(tài),并不需要傳遞具體的信息,比如:

  • 我的事做完了,通知一下你
  • 賣包子了、賣包子了,做好了1個包子!做好了2個包子!做好了3個包子!
  • 這個停車位我占了,你們只能等著

在這種情況下我們可以使用信號量(semaphore),它更節(jié)省內(nèi)存。

本章涉及如下內(nèi)容:

  • 怎么創(chuàng)建、刪除信號量
  • 怎么發(fā)送、獲得信號量
  • 什么是計數(shù)型信號量?什么是二進制信號量?

6.1 信號量的特性

6.1.1 信號量的常規(guī)操作

信號量這個名字很恰當:

  • 信號:起通知作用
  • 量:還可以用來表示資源的數(shù)量
    • 當"量"沒有限制時,它就是"計數(shù)型信號量"(Counting Semaphores)
    • 當"量"只有0、1兩個取值時,它就是"二進制信號量"(Binary Semaphores)
  • 支持的動作:"give"給出資源,計數(shù)值加1;"take"獲得資源,計數(shù)值減1

計數(shù)型信號量的典型場景是:

  • 計數(shù):事件產(chǎn)生時"give"信號量,讓計數(shù)值加1;處理事件時要先"take"信號量,就是獲得信號量,讓計數(shù)值減1。
  • 資源管理:要想訪問資源需要先"take"信號量,讓計數(shù)值減1;用完資源后"give"信號量,讓計數(shù)值加1。

信號量的"give"、"take"雙方并不需要相同,可以用于生產(chǎn)者-消費者場合:

  • 生產(chǎn)者為任務A、B,消費者為任務C、D
  • 一開始信號量的計數(shù)值為0,如果任務C、D想獲得信號量,會有兩種結(jié)果:
    • 阻塞:買不到東西咱就等等吧,可以定個鬧鐘(超時時間)
    • 即刻返回失?。翰坏?/li>
  • 任務A、B可以生產(chǎn)資源,就是讓信號量的計數(shù)值增加1,并且把等待這個資源的顧客喚醒
  • 喚醒誰?誰優(yōu)先級高就喚醒誰,如果大家優(yōu)先級一樣就喚醒等待時間最長的人

二進制信號量跟計數(shù)型的唯一差別,就是計數(shù)值的最大值被限定為1。

在這里插入圖片描述

6.1.2 信號量跟隊列的對比

差異列表如下:

隊列 信號量
可以容納多個數(shù)據(jù),
創(chuàng)建隊列時有2部分內(nèi)存: 隊列結(jié)構(gòu)體、存儲數(shù)據(jù)的空間
只有計數(shù)值,無法容納其他數(shù)據(jù)。
創(chuàng)建信號量時,只需要分配信號量結(jié)構(gòu)體
生產(chǎn)者:沒有空間存入數(shù)據(jù)時可以阻塞 生產(chǎn)者:用于不阻塞,計數(shù)值已經(jīng)達到最大時返回失敗
消費者:沒有數(shù)據(jù)時可以阻塞 消費者:沒有資源時可以阻塞

6.1.3 兩種信號量的對比

信號量的計數(shù)值都有限制:限定了最大值。如果最大值被限定為1,那么它就是二進制信號量;如果最大值不是1,它就是計數(shù)型信號量。

差別列表如下:

二進制信號量 技術(shù)型信號量
被創(chuàng)建時初始值為0 被創(chuàng)建時初始值可以設定
其他操作是一樣的 其他操作是一樣的

6.2 信號量函數(shù)

使用信號量時,先創(chuàng)建、然后去添加資源、獲得資源。使用句柄來表示一個信號量。

6.2.1 創(chuàng)建

使用信號量之前,要先創(chuàng)建,得到一個句柄;使用信號量時,要使用句柄來表明使用哪個信號量。

對于二進制信號量、計數(shù)型信號量,它們的創(chuàng)建函數(shù)不一樣:

二進制信號量 計數(shù)型信號量
動態(tài)創(chuàng)建 xSemaphoreCreateBinary
計數(shù)值初始值為0
xSemaphoreCreateCounting
vSemaphoreCreateBinary(過時了)
計數(shù)值初始值為1
靜態(tài)創(chuàng)建 xSemaphoreCreateBinaryStatic xSemaphoreCreateCountingStatic

創(chuàng)建二進制信號量的函數(shù)原型如下:

/* 創(chuàng)建一個二進制信號量,返回它的句柄。
 * 此函數(shù)內(nèi)部會分配信號量結(jié)構(gòu)體 
 * 返回值: 返回句柄,非NULL表示成功
 */
SemaphoreHandle_t xSemaphoreCreateBinary( void );

/* 創(chuàng)建一個二進制信號量,返回它的句柄。
 * 此函數(shù)無需動態(tài)分配內(nèi)存,所以需要先有一個StaticSemaphore_t結(jié)構(gòu)體,并傳入它的指針
 * 返回值: 返回句柄,非NULL表示成功
 */
SemaphoreHandle_t xSemaphoreCreateBinaryStatic( StaticSemaphore_t *pxSemaphoreBuffer );

創(chuàng)建計數(shù)型信號量的函數(shù)原型如下:

/* 創(chuàng)建一個計數(shù)型信號量,返回它的句柄。
 * 此函數(shù)內(nèi)部會分配信號量結(jié)構(gòu)體 
 * uxMaxCount: 最大計數(shù)值
 * uxInitialCount: 初始計數(shù)值
 * 返回值: 返回句柄,非NULL表示成功
 */
SemaphoreHandle_t xSemaphoreCreateCounting(UBaseType_t uxMaxCount, UBaseType_t uxInitialCount);

/* 創(chuàng)建一個計數(shù)型信號量,返回它的句柄。
 * 此函數(shù)無需動態(tài)分配內(nèi)存,所以需要先有一個StaticSemaphore_t結(jié)構(gòu)體,并傳入它的指針
 * uxMaxCount: 最大計數(shù)值
 * uxInitialCount: 初始計數(shù)值
 * pxSemaphoreBuffer: StaticSemaphore_t結(jié)構(gòu)體指針
 * 返回值: 返回句柄,非NULL表示成功
 */
SemaphoreHandle_t xSemaphoreCreateCountingStatic( UBaseType_t uxMaxCount, 
                                                 UBaseType_t uxInitialCount, 
                                                 StaticSemaphore_t *pxSemaphoreBuffer );

6.2.2 刪除

對于動態(tài)創(chuàng)建的信號量,不再需要它們時,可以刪除它們以回收內(nèi)存。

vSemaphoreDelete可以用來刪除二進制信號量、計數(shù)型信號量,函數(shù)原型如下:

/*
 * xSemaphore: 信號量句柄,你要刪除哪個信號量
 */
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );

6.2.3 give/take

二進制信號量、計數(shù)型信號量的give、take操作函數(shù)是一樣的。這些函數(shù)也分為2個版本:給任務使用,給ISR使用。列表如下:

在任務中使用 在ISR中使用
give xSemaphoreGive xSemaphoreGiveFromISR
take xSemaphoreTake xSemaphoreTakeFromISR

xSemaphoreGive的函數(shù)原型如下:

BaseType_t xSemaphoreGive( SemaphoreHandle_t xSemaphore );

xSemaphoreGive函數(shù)的參數(shù)與返回值列表如下:

參數(shù) 說明
xSemaphore 信號量句柄,釋放哪個信號量
返回值 pdTRUE表示成功,
如果二進制信號量的計數(shù)值已經(jīng)是1,再次調(diào)用此函數(shù)則返回失??;
如果計數(shù)型信號量的計數(shù)值已經(jīng)是最大值,再次調(diào)用此函數(shù)則返回失敗

pxHigherPriorityTaskWoken的函數(shù)原型如下:

BaseType_t xSemaphoreGiveFromISR(
                        SemaphoreHandle_t xSemaphore,
                        BaseType_t *pxHigherPriorityTaskWoken
                    );

xSemaphoreGiveFromISR函數(shù)的參數(shù)與返回值列表如下:

參數(shù) 說明
xSemaphore 信號量句柄,釋放哪個信號量
pxHigherPriorityTaskWoken 如果釋放信號量導致更高優(yōu)先級的任務變?yōu)榱司途w態(tài),
則*pxHigherPriorityTaskWoken = pdTRUE
返回值 pdTRUE表示成功,
如果二進制信號量的計數(shù)值已經(jīng)是1,再次調(diào)用此函數(shù)則返回失敗;
如果計數(shù)型信號量的計數(shù)值已經(jīng)是最大值,再次調(diào)用此函數(shù)則返回失敗

xSemaphoreTake的函數(shù)原型如下:

BaseType_t xSemaphoreTake(
                   SemaphoreHandle_t xSemaphore,
                   TickType_t xTicksToWait
               );

xSemaphoreTake函數(shù)的參數(shù)與返回值列表如下:

參數(shù) 說明
xSemaphore 信號量句柄,獲取哪個信號量
xTicksToWait 如果無法馬上獲得信號量,阻塞一會:
0:不阻塞,馬上返回
portMAX_DELAY: 一直阻塞直到成功
其他值: 阻塞的Tick個數(shù),可以使用pdMS_TO_TICKS()來指定阻塞時間為若干ms
返回值 pdTRUE表示成功

xSemaphoreTakeFromISR的函數(shù)原型如下:

BaseType_t xSemaphoreTakeFromISR(
                        SemaphoreHandle_t xSemaphore,
                        BaseType_t *pxHigherPriorityTaskWoken
                    );

xSemaphoreTakeFromISR函數(shù)的參數(shù)與返回值列表如下:

參數(shù) 說明
xSemaphore 信號量句柄,獲取哪個信號量
pxHigherPriorityTaskWoken 如果獲取信號量導致更高優(yōu)先級的任務變?yōu)榱司途w態(tài),
則*pxHigherPriorityTaskWoken = pdTRUE
返回值 pdTRUE表示成功

6.3 示例12: 使用二進制信號量來同步

本節(jié)代碼為: FreeRTOS_12_semaphore_binary 。

main函數(shù)中創(chuàng)建了一個二進制信號量,然后創(chuàng)建2個任務:一個用于釋放信號量,另一個用于獲取信號量,代碼如下:

/* 二進制信號量句柄 */
SemaphoreHandle_t xBinarySemaphore;

int main( void )
{
	prvSetupHardware();
	
    /* 創(chuàng)建二進制信號量 */
    xBinarySemaphore = xSemaphoreCreateBinary( );

	if( xBinarySemaphore != NULL )
	{
		/* 創(chuàng)建1個任務用于釋放信號量
		 * 優(yōu)先級為2
		 */
		xTaskCreate( vSenderTask, "Sender", 1000, NULL, 2, NULL );

		/* 創(chuàng)建1個任務用于獲取信號量
		 * 優(yōu)先級為1
		 */
		xTaskCreate( vReceiverTask, "Receiver", 1000, NULL, 1, NULL );

		/* 啟動調(diào)度器 */
		vTaskStartScheduler();
	}
	else
	{
		/* 無法創(chuàng)建二進制信號量 */
	}

	/* 如果程序運行到了這里就表示出錯了, 一般是內(nèi)存不足 */
	return 0;
}

發(fā)送任務、接收任務的代碼和執(zhí)行流程如下:

  • A:發(fā)送任務優(yōu)先級高,先執(zhí)行。連續(xù)3次釋放二進制信號量,只有第1次成功
  • B:發(fā)送任務進入阻塞態(tài)
  • C:接收任務得以執(zhí)行,得到信號量,打印OK;再次去獲得信號量時,進入阻塞狀態(tài)
  • 在發(fā)送任務的vTaskDelay退出之前,運行的是空閑任務:現(xiàn)在發(fā)送任務、接收任務都阻塞了
  • D:發(fā)送任務再次運行,連續(xù)3次釋放二進制信號量,只有第1次成功
  • E:發(fā)送任務進入阻塞態(tài)
  • F:接收任務被喚醒,得到信號量,打印OK;再次去獲得信號量時,進入阻塞狀態(tài)
在這里插入圖片描述

運行結(jié)果如下圖所示,即使發(fā)送任務連續(xù)釋放多個信號量,也只能成功1次。釋放、獲得信號量是一一對應的。

在這里插入圖片描述

6.4 示例13: 防止數(shù)據(jù)丟失

本節(jié)代碼為: FreeRTOS_13_semaphore_circle_buffer

在示例12中,發(fā)送任務發(fā)出3次"提醒",但是接收任務只接收到1次"提醒",其中2次"提醒"丟失了。

這種情況很常見,比如每接收到一個串口字符,串口中斷程序就給任務發(fā)一次"提醒",假設收到多個字符、發(fā)出了多次"提醒"。當任務來處理時,它只能得到1次"提醒"。

你需要使用其他方法來防止數(shù)據(jù)丟失,比如:

在串口中斷中,把數(shù)據(jù)放入緩沖區(qū)

在任務中,一次性把緩沖區(qū)中的數(shù)據(jù)都讀出

簡單地說,就是:你提醒了我多次,我太忙只響應你一次,但是我一次性拿走所有數(shù)據(jù)

main函數(shù)中創(chuàng)建了一個二進制信號量,然后創(chuàng)建2個任務:一個用于釋放信號量,另一個用于獲取信號量,代碼如下:

/* 二進制信號量句柄 */
SemaphoreHandle_t xBinarySemaphore;

int main( void )
{
	prvSetupHardware();
	
    /* 創(chuàng)建二進制信號量 */
    xBinarySemaphore = xSemaphoreCreateBinary( );

	if( xBinarySemaphore != NULL )
	{
		/* 創(chuàng)建1個任務用于釋放信號量
		 * 優(yōu)先級為2
		 */
		xTaskCreate( vSenderTask, "Sender", 1000, NULL, 2, NULL );

		/* 創(chuàng)建1個任務用于獲取信號量
		 * 優(yōu)先級為1
		 */
		xTaskCreate( vReceiverTask, "Receiver", 1000, NULL, 1, NULL );

		/* 啟動調(diào)度器 */
		vTaskStartScheduler();
	}
	else
	{
		/* 無法創(chuàng)建二進制信號量 */
	}

	/* 如果程序運行到了這里就表示出錯了, 一般是內(nèi)存不足 */
	return 0;
}

發(fā)送任務、接收任務的代碼和執(zhí)行流程如下:

  • A:發(fā)送任務優(yōu)先級高,先執(zhí)行。連續(xù)寫入3個數(shù)據(jù)、釋放3個信號量:只有1個信號量起作用
  • B:發(fā)送任務進入阻塞態(tài)
  • C:接收任務得以執(zhí)行,得到信號量
  • D:接收任務一次性把所有數(shù)據(jù)取出
  • E:接收任務再次嘗試獲取信號量,進入阻塞狀態(tài)
  • 在發(fā)送任務的vTaskDelay退出之前,運行的是空閑任務:現(xiàn)在發(fā)送任務、接收任務都阻塞了
  • F:發(fā)送任務再次運行,連續(xù)寫入3個數(shù)據(jù)、釋放3個信號量:只有1個信號量起作用
  • G:發(fā)送任務進入阻塞態(tài)
  • H:接收任務被喚醒,得到信號量,一次性把所有數(shù)據(jù)取出
在這里插入圖片描述

程序運行結(jié)果如下,數(shù)據(jù)未丟失:

在這里插入圖片描述

6.5 示例14: 使用計數(shù)型信號量

本節(jié)代碼為: FreeRTOS_14_semaphore_counting

使用計數(shù)型信號量時,可以多次釋放信號量;當信號量的技術(shù)值達到最大時,再次釋放信號量就會出錯。

如果信號量計數(shù)值為n,就可以連續(xù)n次獲取信號量,第(n+1)次獲取信號量就會阻塞或失敗。

main函數(shù)中創(chuàng)建了一個計數(shù)型信號量,最大計數(shù)值為3,初始值計數(shù)值為0;然后創(chuàng)建2個任務:一個用于釋放信號量,另一個用于獲取信號量,代碼如下:

/* 計數(shù)型信號量句柄 */
SemaphoreHandle_t xCountingSemaphore;

int main( void )
{
	prvSetupHardware();
	
    /* 創(chuàng)建計數(shù)型信號量 */
    xCountingSemaphore = xSemaphoreCreateCounting(3, 0);

	if( xCountingSemaphore != NULL )
	{
		/* 創(chuàng)建1個任務用于釋放信號量
		 * 優(yōu)先級為2
		 */
		xTaskCreate( vSenderTask, "Sender", 1000, NULL, 2, NULL );

		/* 創(chuàng)建1個任務用于獲取信號量
		 * 優(yōu)先級為1
		 */
		xTaskCreate( vReceiverTask, "Receiver", 1000, NULL, 1, NULL );

		/* 啟動調(diào)度器 */
		vTaskStartScheduler();
	}
	else
	{
		/* 無法創(chuàng)建信號量 */
	}

	/* 如果程序運行到了這里就表示出錯了, 一般是內(nèi)存不足 */
	return 0;
}

發(fā)送任務、接收任務的代碼和執(zhí)行流程如下:

  • A:發(fā)送任務優(yōu)先級高,先執(zhí)行。連續(xù)釋放4個信號量:只有前面3次成功,第4次失敗
  • B:發(fā)送任務進入阻塞態(tài)
  • CDE:接收任務得以執(zhí)行,得到3個信號量
  • F:接收任務試圖獲得第4個信號量時進入阻塞狀態(tài)
  • 在發(fā)送任務的vTaskDelay退出之前,運行的是空閑任務:現(xiàn)在發(fā)送任務、接收任務都阻塞了
  • G:發(fā)送任務再次運行,連續(xù)釋放4個信號量:只有前面3次成功,第4次失敗
  • H:發(fā)送任務進入阻塞態(tài)
  • IJK:接收任務得以執(zhí)行,得到3個信號量
  • L:接收任務再次獲取信號量時進入阻塞狀態(tài)
在這里插入圖片描述

運行結(jié)果如下圖所示:

在這里插入圖片描述
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5054

    文章

    18917

    瀏覽量

    300928
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11181

    瀏覽量

    208506
  • RTOS
    +關(guān)注

    關(guān)注

    21

    文章

    808

    瀏覽量

    119302
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    483

    瀏覽量

    61861
  • 信號量
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    8297
收藏 人收藏

    評論

    相關(guān)推薦

    實時操作系統(tǒng)FreeRTOS信號量應用

    二值信號量通常用于互斥訪問或同步,二值信號量和互斥信號量非常相似,但還是有細微差別,互斥信號量擁有優(yōu)先級繼承機制,二值信號沒有。因此二值信
    的頭像 發(fā)表于 06-08 09:24 ?3618次閱讀
    實時操作系統(tǒng)<b class='flag-5'>FreeRTOS</b><b class='flag-5'>信號量</b>應用

    FreeRTOS串口中斷接收不定長的數(shù)據(jù)與二值信號量的使用

    FreeRTOS例程,使用串口中斷接收不定長的數(shù)據(jù),以及二值信號量的使用
    的頭像 發(fā)表于 09-26 09:02 ?3870次閱讀
    <b class='flag-5'>FreeRTOS</b>串口中斷接收不定長的數(shù)據(jù)與二值<b class='flag-5'>信號量</b>的使用

    FreeRTOS信號量使用教程

    信號量是操作系統(tǒng)中重要的一部分,信號量一般用來進行資源管理和任務同步, FreeRTOS信號量又分為二值信號量、 計數(shù)型
    的頭像 發(fā)表于 12-19 09:22 ?2998次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>信號量</b>使用教程

    FreeRTOS信號量的使用與實例

    在嵌入式系統(tǒng)中,任務管理是一個重要的部分,它涉及到任務之間的通信和同步,信號量,隊列,互斥鎖和事件標志組等概念。本文將以 FreeRTOS 為例,詳細講解這些內(nèi)容。
    的頭像 發(fā)表于 12-12 15:25 ?2149次閱讀

    轉(zhuǎn):freeRTOS信號量學習

    信號量同樣是RTOS學習中很重要的一節(jié),信號量可以用在共享資源或者同步任務中,對執(zhí)行權(quán)的控制,誰擁有信號量誰擁有執(zhí)行權(quán),在freeRTOS信號量
    發(fā)表于 08-12 18:29

    FreeRTOS信號量介紹

    FreeRTOS信號量 & ESP32實戰(zhàn)閱讀建議:有一定操作系統(tǒng)基礎知識。FreeRTOS信號量1. 二值信號量??二值
    發(fā)表于 01-27 07:28

    Linux信號量(2):POSIX 信號量

    上一章,講述了 SYSTEM V 信號量,主要運行于進程之間,本章主要介紹 POSIX 信號量:有名信號量、無名信號量。 POSIX
    的頭像 發(fā)表于 10-29 17:34 ?659次閱讀

    FreeRTOS信號量 & ESP32實戰(zhàn)

    FreeRTOS信號量 & ESP32實戰(zhàn)閱讀建議:有一定操作系統(tǒng)基礎知識。FreeRTOS信號量1. 二值信號量??二值
    發(fā)表于 12-03 18:06 ?1次下載
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>信號量</b> & ESP32實戰(zhàn)

    FreeRTOS 隊列 信號量 互斥

    文章目錄前言Queue 隊列semaphore 信號量Mutex 互斥微信公眾號前言FreeRTOS STM32CubeMX配置 內(nèi)存管理 任務管理上節(jié)介紹了用STM32CubeMX生成帶
    發(fā)表于 12-09 09:51 ?0次下載
    <b class='flag-5'>FreeRTOS</b> 隊列 <b class='flag-5'>信號量</b> 互斥<b class='flag-5'>量</b>

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

    FreeRTOS信號量包括二進制信號量、計數(shù)信號量、互斥信號量(以后簡稱互斥)和遞歸互斥
    發(fā)表于 01-26 17:39 ?7次下載
    <b class='flag-5'>FreeRTOS</b>高級篇<b class='flag-5'>6---FreeRTOS</b><b class='flag-5'>信號量</b>分析

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

    FreeRTOS信號量包括二進制信號量、計數(shù)信號量、互斥信號量(以后簡稱互斥)和遞歸互斥
    發(fā)表于 01-26 17:44 ?4次下載
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>系列</b>第20篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>信號量</b>API函數(shù)

    在Arduino IDE中使用FreeRTOS信號量

    電子發(fā)燒友網(wǎng)站提供《在Arduino IDE中使用FreeRTOS信號量.zip》資料免費下載
    發(fā)表于 01-04 10:18 ?0次下載
    在Arduino IDE中使用<b class='flag-5'>FreeRTOS</b><b class='flag-5'>信號量</b>

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

    在操作系統(tǒng)系統(tǒng)中,信號量通常用于控制對共享資源的訪問和任務之間進行同步,信號量在操作系統(tǒng)中是很常用的,也是學習freeRTOS操作系統(tǒng)必須要掌握的。
    的頭像 發(fā)表于 02-10 11:04 ?1922次閱讀
    <b class='flag-5'>freeRTOS</b>中最常用到的<b class='flag-5'>信號量</b>有哪些

    FreeRTOS的二值信號量

    FreeRTOS中的信號量是一種任務間通信的方式,信號量包括:二值信號量、互斥信號量、計數(shù)信號量
    的頭像 發(fā)表于 02-10 15:07 ?1333次閱讀

    FreeRTOS四種信號量詳細介紹

    1、二值信號量 二值信號量通常用于互斥訪問或同步,二值信號量和互斥信號量非常類似,但是還是有一些細微的差別,互斥信號量擁有優(yōu)先級繼承機制,二
    的頭像 發(fā)表于 07-06 17:14 ?2389次閱讀