FreeRTOS從入門到摔倒 List

2021-09-12 14:17:45 字數 3288 閱讀 8755

在差不多熟練運用完stm32f103微控制器的基本功能之後,比如gpio口配置、iic、spi、pwm波等,想繼續深入系統進行學習,當然學習階段最終的目標是arm+linux,為了學習這些輕量級的作業系統,將開發板從f103換成了f429,因為後續想結合gui一起學習。

去年了解過一些freertos的api,並走過一些基本的例程,但不入虎穴,焉得虎子,核心不了解有什麼意思,所以這段時間的學習從核心入手,可能在學習的過程當中會複習一些《作業系統與編譯原理》中的知識,希望自己盡快完成這方面的學習。

在新建工程之後開始了概念學習:

裸機系統:分為輪詢系統和前後臺系統。輪詢系統:只適合哪些按順序執行的功能**,實時性差;前後臺系統:在輪詢系統中加入中斷,中斷被稱之為前台,main函式的無限迴圈被稱之為後台;

多工系統:就是任務也擁有了優先順序,相對前後臺系統,能夠提公升實時性,用言語描述,太麻煩,直接用**來表現好了:

int flag1 =0;

int flag2 =0;

int flag3 =0;

void

dosomething1

(void

)void

dosomething2

(void

)void

dosomething3

(void

)int

main

(void

)void

isr1

(void

)void

isr2

(void

)void

isr3

(void

)void

dosomething1

(void

)// 任務實體 ; }}

void

dosomething2

(void

)// 任務實體 ; }}

void

dosomething3

(void

)// 任務實體 ;

}}

list & list item:
struct xlist_item

其中的含義如圖所示:

這裡其實我一直有個疑問:pvowner和pvcontainer有什麼區別:

這裡的pvowner指該鍊錶屬於哪個任務,而pvcontainer指向該列表項屬於哪個列表;

列表結構體展開為:

typedef

struct xlist

列表的作用是用來跟蹤任務的。

初始化:vlistinitialise () 和 vlistinitialiseitem()

void

vlistinitialise

( list_t *

const pxlist )

為了方便理解:

列表項成員的初始化會在任務建立函式中進行初始化。

列表項的插入:

對列表項值進行公升序插入:vlistinsert ()

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->pvcontainer =

(void

*) pxlist;

( pxlist->uxnumberofitems )++;

//更新煉表項值

列表項末尾插入函式:vlistinsertend ()

void

vlistinsertend

( list_t *

const pxlist, listitem_t *

const pxnewlistitem )

列表項刪除:uxlistremove ()

ubasetype_t uxlistremove

( listitem_t *

const pxitemtoremove )

else

pxitemtoremove->pvcontainer =

null

;// 被刪除列表項的成員變數 pvcontainer清

( pxlist->uxnumberofitems )--;

//列表項個數減一

return pxlist->uxnumberofitems;

//返回新列表當前列表項數目

}

列表項遍歷:listget_owner_of_next_entry ()

#define listget_owner_of_next_entry( pxtcb, pxlist )

( pxtcb )

=( pxconstlist )

->pxindex->pvowner;

}

本質是定義在list.h中的巨集,每呼叫一次這個函式,pxindex變數就會指向下乙個列表項,並且返回這個列表項的pxowner變數。

最後複習一下關於列表和列表項的api:

Redis從入門到入門

2安裝1.1支援的儲存結構 remote dictionary server 以字典儲存資料,允許其他應用通過tcp協議訪問字典內容。支援的鍵值型別 優點 redis的字典儲存方式和多重鍵值儲存方式,使得程式設計師可以直接將程式中的資料對映到redis中,資料在redis中的儲存方式和其在程式中的儲...

ACM從入門到???

演算法略講板子奇怪的吐槽其他1.如果對語言還不是很熟悉,請先多做一些入門題。不僅是為了掌握語言,更是為了熟悉程式設計思維。同時刷水題不要上癮,只追求過題數量並不能真正提高水平。水題150 200左右應該開始比較系統的演算法學習。2.學習演算法最好的方式是了解思想後自己嘗試實現,再去閱讀別人的板子尋找...

Azure Blob Storage從入門到精通

今天推薦的是乙個系列文章,讓讀者閱讀完成後可以對azure blob storage的開發有乙個全面的了解,可謂是從入門到精通。azure在最初的版本裡面就提供了非結構化資料的儲存服務,也即blob storage。其是azure中非常重要和基礎的一項服務,支撐著很多其他服務的執行 比如虛擬機器等 ...