5.1 uCOS-II操作系統(tǒng)
5.1.1 什么是操作系統(tǒng)
《1》管理軟件硬件的程序集合。
《2》軟硬件的溝通橋梁。
舉個栗子:當你要播放音樂時,假設是電腦,裝的是Window操作系統(tǒng),步驟如下:
這時,你就能聽到優(yōu)美動聽的歌曲了。但底層操作是如何操作的呢?是誰操作呢?
是操作系統(tǒng)幫你完成了這一切工作。當你點擊播放,操作系統(tǒng)工作流程如下:
總結(jié),對硬件的操作,由操作系統(tǒng)來完成,操作系統(tǒng)直接與硬件交互。用戶如果想控制底層硬件,必須經(jīng)過操作系統(tǒng)進行間接控制,操作系統(tǒng)提供系統(tǒng)調(diào)用給用戶,用戶就可以與硬件交互了。系統(tǒng)調(diào)用是封裝了操作各部分硬件的API。
5.1.2 為什么要使用操作系統(tǒng)
《1》屏蔽硬件。使應用程序不依賴硬件,提高了程序的可移植性。
《2》多任務。因為消費者想同時聊QQ、聊、看電視劇等。早期單核CPU想完成這些功能,就需要使用操作系統(tǒng),實現(xiàn)不同任務之間高速的切換。
5.1.3 操作系統(tǒng)分類
《1》分時操作系統(tǒng):以時間片為基本調(diào)度原則。給每個任務分配一段固定的CPU時間,時間到就切換下一個任務,時間不到不切換任務。如:Windows—95/98,Linux內(nèi)核2.6以前。
《2》實時操作系統(tǒng):以優(yōu)先級為基本調(diào)度原則。不是給每個任務分配一段固定的CPU時間,而是根據(jù)優(yōu)先級分配CPU執(zhí)行時間,誰優(yōu)先級高,先執(zhí)行誰,分配的CPU時間就多,如uCOS-II。
《3》半實時操作系統(tǒng):部分使用分時操作系統(tǒng)、部分使用實時操作系統(tǒng)。如Windows----7/8/10,Linux內(nèi)核2.6以后。
5.1.3 為何學uCOS-II
《1》代碼量少,容易上手。
《2》多任務,實現(xiàn)復雜功能
《3》提高內(nèi)外功(內(nèi)功:閱讀代碼能力 外功:編程能力)
《4》為學習其他操作系統(tǒng)打下基礎(chǔ)
5.1.4 其他補充
學操作系統(tǒng)的難點
《1》邏輯理解、代碼運行流程
《2》術(shù)語的理解、領(lǐng)悟
uCOS-II理解
u---微型
C---控制器
OS—操作系統(tǒng)
UCOS-II代碼來源
《1》官網(wǎng)
《2》示例代碼
5.2 UCOS操作系統(tǒng)
5.2.1 操作系統(tǒng)的調(diào)度原則
《1》分時操作系統(tǒng)調(diào)度原則:
以時間片為基本調(diào)度原則,為每個任務分配固定的CPU執(zhí)行時間,時間到,切換下一個任務,時間不到,不切換任務。
《2》實時操作系統(tǒng)調(diào)度原則
以優(yōu)先級為基本調(diào)度原則,不是固定為每個任務分配CPU執(zhí)行時間,而是根據(jù)優(yōu)先級高低分配CPU時間,優(yōu)先級低的分配CPU執(zhí)行時間就短,優(yōu)先級高的分配的CPU時間就長。
5.2.2 操作系統(tǒng)程序結(jié)構(gòu)
《1》裸機代碼
整個工程只有一個main函數(shù),在main函數(shù)執(zhí)行中只有一個真正意義上的死循環(huán),其他死循環(huán)都是有退出條件或永遠不會執(zhí)行了的死循環(huán)。
《2》操作系統(tǒng)代碼
整個工程只有一個main函數(shù),在mian函數(shù)中,至少創(chuàng)建一個任務,每個任務都有一個死循環(huán)。操作系統(tǒng)要切換任務需要高優(yōu)先級任務釋放CPU使用權(quán)。
5.2.3操作系統(tǒng)的任務結(jié)構(gòu)
《1》任務的構(gòu)成:任務控制塊,任務函數(shù)、任務優(yōu)先級、任務棧。
《2》 任務控制塊:任務先內(nèi)存空間申請的一塊內(nèi)存空間,用于執(zhí)行任務使用的,任務控制塊包含、任務函數(shù)、任務優(yōu)先級、任務棧。
《3》任務函數(shù):任務的執(zhí)行入口,任務的具體功能在這里實現(xiàn)。
《4》任務優(yōu)先級:任務的能執(zhí)行的唯一標識。用來規(guī)定任務的執(zhí)行先后順序。
《5》任務棧:保存任務在切換過程中的現(xiàn)場信息。任務在切換前,把當前執(zhí)行任務的現(xiàn)在信息保存在棧中,該過程稱為壓棧,當執(zhí)行完其他任務完后,又切換回來,讀取棧里面保存的現(xiàn)場信息,繼續(xù)執(zhí)行任務,該過程稱為彈棧。
簡單理解:在棧中進入一個元素,稱為壓;蛉霔,出來一個元素稱為彈;虺鰲。
5.2.4 操作系統(tǒng)的任務切換
在哪些情況下,會進行任務切換?
5.2.5 操作系統(tǒng)的任務中斷
與裸機編程中斷基本一致,但需要注意兩點
裸機中斷與ucos中斷的深入理解
5.2.6 操作系統(tǒng)的任務狀態(tài)
《1》停止/休眠態(tài):任務創(chuàng)建之前和刪除之后的狀態(tài)。
《2》就緒態(tài):任務具有了可執(zhí)行條件。
《3》運行態(tài):任務得到了CPU的使用權(quán)。
《4》等待/掛起態(tài):任務被掛起或等待某件事情發(fā)生。
《5》中斷態(tài):正在執(zhí)行的任務,被中斷了。
任務狀態(tài)轉(zhuǎn)換關(guān)系如下圖:
5.3 創(chuàng)建UCOS工程模板
5.3.1 獲取UCOS源碼
官網(wǎng)太卡了,所以給你準備UCOS例程,如下。
5.3.2 UCOS過程文件分析
5.3.3 新建UCOS工程
5.3.4 創(chuàng)建一個任務
5.3.5 補充、小結(jié)
移植Ucos-II總結(jié):
配置基本流程:
《1》找到Ucos-II源碼(來源:官網(wǎng)、例程、別人的代碼、自己的代碼)
《2》添加到過程文件中,添加對應頭文件
《3》編寫系統(tǒng)滴答定時器,開啟中斷模式
《4》編寫滴答中斷服務函數(shù)
《5》編寫主函數(shù)
主函數(shù)編寫流程:
關(guān)于延時OSTimeDly(100);?
一次系統(tǒng)滴答為5ms,所以寫100,就是500ms。
關(guān)于任務函數(shù)OSTaskCreate(Task0,NULL,&stack0[TASK0_STK_SIZE-1],TASK0_PRI);?
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |