FreeRTOS遞迴訊號量的意義

2022-03-30 02:42:50 字數 938 閱讀 6346

遞迴訊號量的屬性:同乙個任務中,可以被獲取多次,且需要釋放相同次數才能被其他任務獲取。

1.遞迴訊號量的建立、獲取、釋放:

xxmux = xsemaphorecreaterecursivemutex();

xsemaphoretakerecursive(xxmux,oswaitforever);

xsemaphoregiverecursive(xxmux);

2.例如有如下函式

void fun1(void)

xsemaphoretakerecursive(xxmux,oswaitforever);

//...code

xsemaphoregiverecursive(xxmux);

void fun2(void)

//...code

void fun(void)

fun1();

delay_ms(1000);

fun2();

分析:fun1()是公用函式,可以被其他任何任務呼叫,fun2只是fun會呼叫。如果fun1()執行完之後,完全可能切換到了其他任務,而不能立即延時之後執行fun2(); 改成如下即可

void fun(void)

xsemaphoretakerecursive(xxmux,oswaitforever); //......1

fun1();

delay_ms(1000);

fun2();

xsemaphoregiverecursive(xxmux);//........2

分析:如果上面1處改成普通的互斥量,則fun1執行完,切換到其他任務,其他任務也會執行fun1,但是fun2需要根據fun1的執行結果立即執行。所以必須確保fun1此時不被其他任務執行。

總結:遞迴訊號量是為了保證在中間有公用函式的情況下,為連續執行**段,保證公用函式不被其他任務執行,遞迴訊號量因此而存在。

FreeRTOS 互斥訊號量

0.前言 在嵌入式作業系統中互斥型訊號量是任務間資源保護的重要手段。下面結合乙個具體例子說明freertos中的互斥型訊號量如何使用。1.基本說明 互斥型訊號量的使用方法如圖1所示。在多數情況下,互斥型訊號量和二值型訊號非常相似,但是從功能上二值型訊號量用於同步,而互斥型訊號量用於資源保護。互斥型訊...

freeRTOS訊號量學習

訊號量同樣是rtos學習中很重要的一節,訊號量可以用在共享資源或者同步任務中,對執行權的控制,誰擁有訊號量誰擁有執行權,在freertos中訊號量和互斥量有點不同,關於訊號量的更多描述可以參考官網相關網頁描述。每乙個訊號量都需要少量的記憶體來保持訊號量的狀態,那麼這記憶體是如何分配的呢,這根據使用的...

FreeRTOS 計數訊號量

計數訊號量有兩種典型的用法 1.事件計數 每次事件發生時,中斷isr會釋放 give 訊號量,訊號量的計數值加1 事件處理任務每次處理乙個事件會獲取 take 一次訊號量,計數值減1.訊號量的值就是已發生事件數目與已處理事件數目之間的差值。用於事件的計數的計數訊號量,在被建立時其計數值被初始化為0。...