在差不多熟練運用完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中非常重要和基礎的一項服務,支撐著很多其他服務的執行 比如虛擬機器等 ...