第八章 任務通知

2021-09-26 18:44:38 字數 2110 閱讀 6481

官網:

從v8.2 版本開始的,

rtos的每個任務都有乙個32位通知值, 在建立rtos任務時初始化為零,任務控制塊中的成員變數ulnotifiedvalue就是這個通知值。

向這個接受任務傳送任務通知以後,就會解除這個任務的阻塞狀態。

任務通知可以通過以下方式更新接收任務的通知值:

合理、靈活的使用上面這些更改任務通知值的方法可以在一些場合中替代佇列、二值訊號量、計數訊號量和事件標誌組。使用任務通知來實現二值訊號量功能的時候,解除任務阻塞的時間比直接使用二值訊號量要快45%,並且使用的ram更少。

與可用於執行等效功能的其他freertos功能相比,任務通知具有速度和ram占用空間優勢。正如所料,這些好處需要一些用例限制:

只有當乙個任務可以成為事件的接收者時,才能使用rtos任務通知。然而,在大多數現實世界的應用中滿足了這種條件。

僅在使用rtos任務通知代替佇列的情況下; 雖然接收任務可以等待處於阻止狀態的通知(因此不消耗任何cpu時間),但是如果傳送無法立即完成,則傳送任務無法在阻塞狀態下等待傳送完成。

函式:

模擬二值訊號量:

傳送任務通知:

vtasknotifygivefromisr(led1_task_handle, &xhigherprioritytaskwokensem);

當任務通知值被用作二進位制或計數訊號量等效時,被通知的任務應該使用ultasknotifytake(),而不是xtasknotifywait()。

xtasknotifygive()是乙個呼叫xtasknotify()的巨集,其eaction引數設定為eincrement,導致所有呼叫返回pdpass。

接受任務通知:

ultasknotifytake(pdtrue, portmax_delay );

模擬計數型訊號量:

建立訊號量:xsemaphorecreatecounting

傳送任務通知:

xtasknotifygive( led2_task_handle ); //傳送任務通知,返回值都是pdpass 獲取一次任務通知就減1.

接受任務通知:

ultasknotifytake(pdfalse, portmax_delay ); 

模擬訊息郵箱

有很多限制:

1. 只能傳送32位的資料值。

2. 訊息被儲存為任務的任務通知值,而且一次只能儲存乙個任務通知值,相當於佇列長度為1.

傳送資料:

* xtasknotify() eaction設定為:esetvaluewithoverwrite/esetvaluewithoutoverwrite(覆蓋或者不更新的區別)

讀取任務通知值:

* xtasknotifywait()

xtasknotify( led1_task_handle, led2_task_cnt , esetvaluewithoverwrite);

xtasknotifywait(0x00,               / *不要清除條目上的任何通知位。* /

ulong_max,        / *退出時將通知值重置為0. * /

&ulnotifiedvalue,/ *通知值傳遞出 ulnotifiedvalue。* /

portmax_delay);  / *無限期阻止。* /

模擬事件

要使用 ulong_max 要包含 #include "limits.h"。

設定位: xtasknotify(led3_task_handle, bit0, esetbits);

xtasknotify(led3_task_handle, bit4, esetbits);

xtasknotifywait(0x00, ulong_max, &tmp, portmax_delay);

if(tmp & bit0)

printf("event0 runging\r\n");

if(tmp & bit4)

printf("event4 runging\r\n");

第八章 指標 第八章 指標

1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...

第八章(筆記)

能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...

第八章 字典

d 空字典 d 這就是字典 d dict.fromkeys a b d dict zip keyslist,valslist d dict name bob age 22 建立字典的函式 d name 通過索引key獲取對應的value d.keys 返回d字典物件所有key,返回乙個列表 d.va...