第四章 佇列

2021-09-26 14:42:10 字數 1371 閱讀 1649

佇列是任務間通訊的主要形式。它們可用於在任務之間以及中斷和任務之間傳送訊息。在大多數情況下,它們被用作執行緒安全fifo(先進先出)緩衝區。

```uint8_t fifomessage[10] = "hello";

queuehandle_t tmpqueuehandle;

//第一步 : 建立佇列

tmpqueuehandle = xqueuecreate( 10 , sizeof(fifomessage) );

if(null != tmpqueuehandle) //建立佇列成功

/*第二步:發生訊息

注意項: xqueuesend( xqueue, pvitemtoqueue, xtickstowait ) xtickstowait項,阻塞時間,指示當佇列滿的時候,任務進入阻塞態,等待佇列空閒的最大時間。

如果值給0的話,當佇列滿的時候,就立即返回,

當值為portmax_delay (include_vtasksuspend需為1)的時候,程式就會一直死等,相當於while{};直到佇列有空閒的佇列項。

當為0,佇列滿的時候,則執行printf("queue send data fail\r\n");

當值為portmax_delay,佇列滿的時候,程式阻塞,不執行任何語句,也就不執行printf("queue send data fail\r\n");

*/a:     

led1_task_cnt++;

if(led1_task_cnt < 24)

else //佇列已滿,訊息發生失敗。

}else

b:覆蓋寫

xqueueoverwrite()旨在用於長度為1的佇列,這意味著隊列為空或完整。建立佇列的時候,長度只能為1.

tmpqueuehandle = xqueuecreate( 1 , sizeof(fifomessage) );

if( pdpass ==  xqueueoverwrite(tmpqueuehandle, fifomessage) ) //返回值只有pdpass

/*接受資料

*/a:

if( pdtrue == xqueuereceive( tmpqueuehandle, &tmp, (ticktype_t)10 ) )

b:從佇列中接收專案而不從佇列中刪除專案。該專案通過複製接收,因此必須提供足夠大小的緩衝區。建立佇列時定義複製到緩衝區中的位元組數。

成功接收的專案仍保留在佇列中,因此將在下一次呼叫或呼叫xqueuereceive()時再次返回。

不得在中斷服務程式中使用此巨集。

if( pdtrue == xqueuepeek ( tmpqueuehandle, &tmp, (ticktype_t)10 ) ) //複製佇列的資料,不會刪除這個資料

```

第四章 棧與佇列

adt abstract data type 棧 stack data 同線性表,元素具有相同的型別,相鄰元素具有前驅和後繼關係。operation initstack s 初始化操作,建立乙個空棧s。destroy s 若棧存在,則銷毀它 clearstack s 將棧清空 stackempty ...

第四章 繼承

一 為什麼要繼承 在物件導向中我們將具有很多重複內容的類中的內容提取出來,寫成乙個單獨的類 其他類只需要繼承就能取得這些功能,同時可以在自己類中寫入獨特的自定義方法 二 繼承語法 inte ce circle nsobject 繼承是在介面中定義的 冒號後的類名是要整合的類,nsobject 是co...

第四章 物件

三個特性 身份 型別 值 每個物件都有唯一的身份來標識自己,使用內建函式id 得到。例子 usr bin env python coding utf 8 a 32 print a b a print id a id b 結果 d python27 python.exe e workp python ...