C OS II的初始化和啟動過程

2021-08-10 15:51:01 字數 2201 閱讀 2484

初始化和啟動都在main函式裡實現。

int main(void)

1、初始化

為了完成自身的工作,μc/os-ii定義了大量的全域性資料結構,要讓系統跑起來,需要先初始化各種需要的全域性變數。

void  osinit (void)

os首先initialize了任務控制塊、事件控制表,還有一些條件編譯的初始化(也就是說這些可以不要,改變一下巨集定義就好了,這就是μc/os-ii的剪裁性,具體巨集定義全都在os_cfg.h檔案裡。)

初始化之後,建立了乙個空閒任務,這個必須要有,而且是最低優先順序的,這樣如果沒有任務執行可以讓系統有事可幹(一直待機)。

2、建立任務

使用ostaskcreate 建立任務,函式原型為

int8u  ostaskcreate (void   (*task)(void *p_arg),void *p_arg,os_stk  *ptos,int8u    prio)
建立任務**示例:

int main(void)

void start_task(void *pdata)

這裡只講建立任務函式和進/退出臨界區函式

os_enter_critical()和os_exit_critical():

概念掃盲的時候知道,任何系統都是由中斷驅動工作的,對於一些重要的操作,作業系統不希望被打斷,於是會先關中斷,完成操作後再把中斷開啟,進入臨界區函式和退出實際上就是關開總中斷。

ostaskcreate(main_task, … , … , …)函式原型

int8u ostaskcreate (

void (*task)(void *p_arg), //指向任務的指標

void *p_arg,//傳遞給任務的引數

os_stk *ptos,//指向任務堆疊棧頂的指標

int8u prio//任務的優先順序

)3、μc/os-ii的啟動

μc/os-ii啟動前,是需要先建立至少乙個任務的,這個任務在初始化函式裡就幫你建立好了,就是空閒函式。不過空閒函式屬於系統級任務,是不能在裡面新增使用者**的,只進行簡單的計數功能,如果執行了osstart(),而前面並沒有建立使用者任務,那麼這系統除了待機並沒啥用了(叫別人幹活首先要讓別人知道自己要幹什麼活吧,不然就空閒唄),所以一般建立乙個任務,然後用這個任務再建立其它的任務(當然也可以把所有任務一股腦全在這裡建立,只不過不好看而已),建立完把這個任務掛起(**資源)就ok了。

上面有個錯誤,空閒函式是可以新增使用者**的,不過需要通過os提供的鉤子函式,在鉤子函式內進行使用者操作,並且需要修改相應的巨集使能鉤子函式。(參考正點原子的ucos開發手冊發現)

void  osstart (void)

}

os_schednew()函式原始碼如下

static

void os_schednew (void)

else

ptbl = &osrdytbl[y];

if ((*ptbl & 0xffu) != 0u) else

#endif

}

osstart ()主要任務就是,找到最高優先順序的使用者任務,標誌相應任務控制塊,然後執行。

關於如何找到最高優先順序任務,在任務排程表一章,os_schednew是對任務就緒表進行的操作,得到就緒任務表裡優先順序最高的任務。

總結一下:

μc/os-ii的初始化和啟動涉及的知識有

1、第4章,任務的基本概念,任務的狀態、優先順序、控制塊及其鍊錶結構、任務堆疊,臨界區的概念。

2、第5章,任務的管理,包括任務的建立、掛起,並沒有涉及任務優先順序別的修改、刪除、恢復及查詢功能。

3、第6章,任務的排程,這裡並沒有詳細描寫,只用了乙個os_schednew ()函式得到就緒表中的最高優先順序,os_sched()有在建立任務的時候使用,不過這裡沒描述。

3、第7章,就是這裡的內容了,囊括了書前面寫大部分的內容,這本書寫的真好,不愧是暢銷書

Spring初始化 啟動過程

為了讓web容器啟動時,也初始化spring,則需要在web.xml中配置 contextloaderlistener,web容器啟動時觸發 初始化spring org.springframework.web.context.contextloaderlistener 1.contextloader...

Linux啟動過程以及初始化

linux系統啟動 post加電自檢 硬體檢查 引導引導程式bios boot sequence 找到主引導記錄 mbr 引導引導程式檢查分割槽表並找到乙個可引導的分割槽 載入對應引導上的mbr bootloader 引導引導程式將所選作業系統的核心載入到記憶體中 引導引導程式將核心和乙個初始的基於...

springMVC啟動初始化過程

在web.xml裡配置分發servlet和contextloaderlistener,contextloaderlistener是spring提供的類,它繼承了contextloader類和實現了servletcontextlistener介面。servletcontextlistener負責監聽w...