一.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 記錄...