freertos的幫手 列表

2021-10-05 11:47:55 字數 2129 閱讀 9165

一.freertos是實時作業系統.談到系統,你能想到什麼...不需要過多的腦補,任務和執行緒組織,排程,切換.

系統如何組織,如何排程,如何切換?這就像乙個城市的運轉一樣,其實都一樣.

這篇文章先來談談組織這件事. 

組織什麼?無非是任務或者執行緒?什麼是執行緒,我們姑且當做是路人甲已丙丁.

那麼甲乙丙丁如何組織了,有請重要的嘉賓出場---列表

what,s 列表???

typedef struct xlist

list_t; 

噢,原來這就是列表.

listfirst_list_integrity_check_value和listsecond_list_integrity_check_value是列表完整檢查項,類似你家大門的鎖,檢視是否列表被破壞.

uxnumberofitems表示列表有幾個成員

pxindex是乙個指標,指向列表項.對於列表而言永遠指向xlistend成員?為什麼,接著看看唄

xlistend是列表項的兄弟,缺胳膊少腿.

那我們看下列表項是啥玩意》

struct xlist_item

;typedef struct xlist_item listitem_t;                    /* for some reason lint wants this as two separate definitions. */

struct xmini_list_item

;typedef struct xmini_list_item minilistitem_t;

列表項的兄弟比列表項少了pvowner和pxcontainer成員.

xitemvalue表示列表項記錄的數值.嗯,什麼數值,對於執行緒那說可能是優先順序嗎?利用他來排序,很有可能.

pxnext和pxprevious是列表指標

pvowner表示乙個void *.從名字看有歸屬的意思,歸屬任務還是什麼?

pxcontainer乙個列表指標

了解完成員,列表項兄弟和列表項區別在哪?列表項兄弟要偷懶了,他不幹活(沒有歸屬,沒有列表),猜測下-可能是個標識

接下來,看看你們有什麼神通廣大.

二.無非就是建立,刪除,鍊錶當然有插入和移除咯.

1.建立

void vlistinitialise( list_t * const pxlist )

void vlistinitialiseitem( listitem_t * const pxitem )

很簡單吧.

2.插入.

void vlistinsert( list_t * const pxlist, listitem_t * const pxnewlistitem )

else

}pxnewlistitem->pxnext = pxiterator->pxnext;

pxnewlistitem->pxnext->pxprevious = pxnewlistitem;

pxnewlistitem->pxprevious = pxiterator;

pxiterator->pxnext = pxnewlistitem;

pxnewlistitem->pxcontainer = pxlist;

( pxlist->uxnumberofitems )++;

}首先找到插入點,插入點根據xvalueofinsertion得到.公升序排列.

然後直接插入,再把當前的列表項指向列表.最後列表成員加1.

3.移除

ubasetype_t uxlistremove( listitem_t * const pxitemtoremove )

else

pxitemtoremove->pxcontainer = null;

( pxlist->uxnumberofitems )--;

return pxlist->uxnumberofitems;

}移除也很簡單.

三:思考與總結

列表項還有乙個pvowner成員.到這裡猜測是指向某個事物,比如任務,佇列,timer.

那麼通過列表,查詢到列表項,然後在找到具體事物,思路漸漸變得清晰起來.

FreeRTOS筆記 列表和列表項

1.列表結構體 2.minilistitem t的結構體 3.列表項 4.列表初始化 1.列表初始化時,列表是空的,因此列表的pxindex是指向列表的尾的 2 3 4 初始化列表的xlistend 5 列表的列表項的數目為0 初始化完成功能以後,列表如下所示 5.初始化列表項 1.此列表項暫時不屬...

FreeRTOS列表與列表項分析

本部落格中部分,來自 freertos開發手冊 正點原子 列表與列表項是freertos中的之中的資料結構。列表的底層實際是使用鍊錶實現的。乙個簡單的列表與列表項如下圖 需要注意的是,列表並不是鍊錶,也不是列表項的集合,而是乙個結構體。列表的定義如下 typedef struct xlist lis...

FreeRTOS之列表與列表項

uxnumberofitems 記錄列表項的數量 pxindex 記錄當前列表項的索引號 xlistend 表示列表的結束 xitemvalue 列表項的值 pxnext 指向下乙個列表項 pxprevious 指向上乙個列表項 pvowner 記錄當前列表歸 誰 所有 pvcontainer 記錄...