精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32入門學(xué)習(xí)筆記之uCOS-II系統(tǒng)移植1

jf_78858299 ? 來(lái)源:滑小稽筆記 ? 作者:電子技術(shù)園地 ? 2023-02-16 16:13 ? 次閱讀

23.1 操作系統(tǒng)概述

之前的實(shí)驗(yàn)都是利用單片機(jī)實(shí)現(xiàn)某個(gè)單一功能,但是有時(shí)候需要在兩個(gè)功能同時(shí)運(yùn)行,這時(shí)就需要引入操作系統(tǒng)的概念,操作系統(tǒng)(Operating System,簡(jiǎn)稱OS)是一種管理電腦硬件與軟件資源的程序,同時(shí)也是計(jì)算機(jī)系統(tǒng)的內(nèi)核與基礎(chǔ),操作系統(tǒng)大致包括5種功能:進(jìn)程管理,作業(yè)管理,存儲(chǔ)管理,設(shè)備管理與文件管理。

23.1.1 操作系統(tǒng)分類

操作系統(tǒng)有三種基本類型:多道程序系統(tǒng),分時(shí)系統(tǒng),實(shí)時(shí)系統(tǒng),最初操作系統(tǒng)是不支持這種微型單片機(jī)的運(yùn)行的,隨著科技的發(fā)展才產(chǎn)生了針對(duì)于這種M系列內(nèi)核的嵌入式操作系統(tǒng),常見的嵌入式操作系統(tǒng)有FreeeRTOSuCos,uC-Linux(一種Linux精簡(jiǎn)版本),在STM32中一般運(yùn)用FreeRTOS和uCos這兩種系統(tǒng),Linux由于必須有內(nèi)存才能運(yùn)行,一般Linux系統(tǒng)需要大約200M的存儲(chǔ)空間才能裝下,我們這里采用uCos-II系統(tǒng)為例來(lái)進(jìn)行嵌入式操作系統(tǒng)的移植實(shí)驗(yàn)。

23.1.2 uCOS簡(jiǎn)介

uCos系統(tǒng)最早出自于1992年美國(guó)嵌入式專家Jean J.Labrosse發(fā)表在《嵌入式系統(tǒng)編程》上的,并在該雜志的BBS上發(fā)布了源碼,發(fā)展到現(xiàn)在uCos-III已經(jīng)出來(lái),但是目前使用最廣泛的還是uCos-II,本單元我們采用uCos-II來(lái)進(jìn)行介紹。

   uCos-II是一個(gè)可以基于ROM運(yùn)行的,可裁剪的,搶占式,實(shí)時(shí)多任務(wù)內(nèi)核,采用C語(yǔ)言進(jìn)行編寫,這是一種專門為計(jì)算機(jī)的嵌入式應(yīng)用設(shè)計(jì)的,CPU硬件相關(guān)部分采用匯編語(yǔ)言編寫,執(zhí)行效率高,占用空間小,最小內(nèi)核可編譯至2Kbyte,uCos-II體系結(jié)構(gòu)如下圖所示。

圖片

從上圖可以發(fā)現(xiàn),我們移植系統(tǒng)的時(shí)候,只需要修改os_cpu.h,os_cpu_a.asm和os_cpu.c等三個(gè)文件即可,其中其中:os_cpu.h,進(jìn)行數(shù)據(jù)類型的定義,以及處理器相關(guān)代碼和幾個(gè)函數(shù)原型;os_cpu_a.asm,是移植過(guò)程中需要匯編完成的一些函數(shù),主要就是任務(wù)切換函數(shù);os_cpu.c,定義一些用戶HOOK函數(shù)。

圖中定時(shí)器的作用是為UCOS-II提供系統(tǒng)時(shí)鐘節(jié)拍,實(shí)現(xiàn)任務(wù)切換和任務(wù)延時(shí)等功能。這個(gè)時(shí)鐘節(jié)拍由OS_TICKS_PER_SEC(在os_cfg.h中定義)設(shè)置,一般我們?cè)O(shè)置uCos-II的系統(tǒng)時(shí)鐘節(jié)拍為1ms~100ms,具體根據(jù)你所用處理器和使用需要來(lái)設(shè)置。我們利用STM32F1的SYSTICK定時(shí)器來(lái)提供UCOS-II時(shí)鐘節(jié)拍。

uCos-II早期版本只支持64個(gè)任務(wù),但是從2.80版本開始,支持任務(wù)數(shù)提高到255個(gè),不過(guò)對(duì)我們來(lái)說(shuō)一般64個(gè)任務(wù)都是足夠多了,一般很難用到這么多個(gè)任務(wù)。uCos-II保留了最高4個(gè)優(yōu)先級(jí)和最低4個(gè)優(yōu)先級(jí)的總共8個(gè)任務(wù),用于拓展使用,但實(shí)際上,uCos-II一般只占用了最低2個(gè)優(yōu)先級(jí),分別用于空閑任務(wù)(倒數(shù)第一)和統(tǒng)計(jì)任務(wù)(倒數(shù)第二),所以剩下給我們使用的任務(wù)最多可達(dá)255-2=253個(gè)(V2.91)。

所謂的任務(wù),其實(shí)就是一個(gè)死循環(huán)函數(shù),該函數(shù)實(shí)現(xiàn)一定的功能,一個(gè)工程可以有很多這樣的任務(wù)(最多255個(gè)),uCos-II對(duì)這些任務(wù)進(jìn)行調(diào)度管理,讓這些任務(wù)可以并發(fā)工作(不是同時(shí)工作,并發(fā)只是各任務(wù)輪流占用CPU,而不是同時(shí)占用,任何時(shí)候還是只有1個(gè)任務(wù)能夠占用CPU),這就是uCos-II最基本的功能。

uCos-II的任何任務(wù)都是通過(guò)一個(gè)叫任務(wù)控制塊(TCB)的東西來(lái)控制的,每個(gè)任務(wù)管理塊有3個(gè)最重要的參數(shù):1,任務(wù)函數(shù)指針;2,任務(wù)堆棧指針;3,任務(wù)優(yōu)先級(jí);任務(wù)控制塊就是任務(wù)在系統(tǒng)里面的身份證(uCos-II通過(guò)優(yōu)先級(jí)識(shí)別任務(wù))

在uCos-II中,使用CPU的時(shí)候,優(yōu)先級(jí)高(數(shù)值小)的任務(wù)比優(yōu)先級(jí)低的任務(wù)具有優(yōu)先使用權(quán),即任務(wù)就緒表中總是優(yōu)先級(jí)最高的任務(wù)獲得CPU使用權(quán),只有高優(yōu)先級(jí)的任務(wù)讓出CPU使用權(quán)(比如延時(shí))時(shí),低優(yōu)先級(jí)的任務(wù)才能獲得CPU使用權(quán)。uCos-II不支持多個(gè)任務(wù)優(yōu)先級(jí)相同,也就是每個(gè)任務(wù)的優(yōu)先級(jí)必須不一樣。任務(wù)的調(diào)度其實(shí)就是CPU運(yùn)行環(huán)境的切換

uCos-II的每個(gè)任務(wù)都是一個(gè)死循環(huán)。每個(gè)任務(wù)都處在以下5種狀態(tài)之一的狀態(tài)下,這5種狀態(tài)是:睡眠狀態(tài)、就緒狀態(tài)、運(yùn)行狀態(tài)、等待狀態(tài)(等待某一事件發(fā)生)和中斷服務(wù)狀態(tài)。

(1)睡眠狀態(tài):任務(wù)在沒(méi)有被配備任務(wù)控制塊或被剝奪了任務(wù)控制塊時(shí)的狀態(tài)。

(2)就緒狀態(tài):系統(tǒng)為任務(wù)配備了任務(wù)控制塊且在任務(wù)就緒表中進(jìn)行了就緒登記,任務(wù)已經(jīng)準(zhǔn)備好了,但由于該任務(wù)的優(yōu)先級(jí)比正在運(yùn)行的任務(wù)的優(yōu)先級(jí)低,還暫時(shí)不能運(yùn)行,這時(shí)任務(wù)的狀態(tài)叫做就緒狀態(tài)。

(3)運(yùn)行狀態(tài):該任務(wù)獲得CPU使用權(quán),并正在運(yùn)行中,此時(shí)的任務(wù)狀態(tài)叫做運(yùn)行狀態(tài)。

(4)等待狀態(tài):正在運(yùn)行的任務(wù),需要等待一段時(shí)間或需要等待一個(gè)事件發(fā)生再運(yùn)行時(shí),該任務(wù)就會(huì)把CPU的使用權(quán)讓給別的任務(wù)而使任務(wù)進(jìn)入等待狀態(tài)。

(5)中斷服務(wù)狀態(tài):一個(gè)正在運(yùn)行的任務(wù)一旦響應(yīng)中斷申請(qǐng)就會(huì)中止運(yùn)行而去執(zhí)行中斷服務(wù)程序,這時(shí)任務(wù)的狀態(tài)叫做中斷服務(wù)狀態(tài)。

uCos-II任務(wù)的5個(gè)狀態(tài)轉(zhuǎn)換關(guān)系如圖

圖片

23.1.3 uCOS-II中與任務(wù)相關(guān)的函數(shù)

(1)創(chuàng)建進(jìn)程:OSTaskCreate

函數(shù)原型:OSTaskCreate( void( *task )( void *pd ), void *pdata, OS_STK *ptos, INTU prio )

函數(shù)參數(shù):

task:指向任務(wù)代碼的指針

pdata:任務(wù)開始執(zhí)行時(shí),傳遞給任務(wù)的參數(shù)的指針

ptos:分配給任務(wù)的堆棧的棧頂指針

prio:分配給任務(wù)的優(yōu)先級(jí)

每個(gè)任務(wù)都有自己的堆棧,堆棧必須申明為OS_STK類型,并且由連續(xù)的內(nèi)存空間組成。可以靜態(tài)分配堆棧空間,也可以動(dòng)態(tài)分配堆棧空間。

(2)刪除進(jìn)程

函數(shù)原型:INT8U OSTaskDel( INT8U prio )

函數(shù)參數(shù):

prio:進(jìn)程的優(yōu)先級(jí),該函數(shù)是通過(guò)任務(wù)優(yōu)先級(jí)來(lái)實(shí)現(xiàn)任務(wù)刪除的

(3)請(qǐng)求刪除進(jìn)程

函數(shù)原型:INT8U OSTaskDelReq( INT8U prio )

函數(shù)參數(shù):

prio:進(jìn)程的優(yōu)先級(jí)

(4)修改進(jìn)程優(yōu)先級(jí)

函數(shù)原型:INT8U OSTaskChangePrio( INT8U oldprio, INT8U newprio )

函數(shù)參數(shù):

oldprio:進(jìn)程的源優(yōu)先級(jí)

newprio:進(jìn)程的新優(yōu)先級(jí)

(5)進(jìn)程掛起

函數(shù)原型:INT8U OSTaskSuspend( INT8U prio )

函數(shù)參數(shù):

prio:進(jìn)程的優(yōu)先級(jí)

任務(wù)掛起和任務(wù)刪除有點(diǎn)類似,任務(wù)掛起只是將被掛起任務(wù)的就緒標(biāo)志刪除,并做任務(wù)掛起記錄,并沒(méi)有將任務(wù)控制塊任務(wù)控制塊鏈表里面刪除,也不需要釋放其資源,而任務(wù)刪除則必須先釋放被刪除任務(wù)的資源,并將被刪除任務(wù)的任務(wù)控制塊也給刪了。被掛起的任務(wù),在恢復(fù)后可以繼續(xù)運(yùn)行。

(6)恢復(fù)進(jìn)程

函數(shù)原型:INT8U OSTaskResume( INT8U prio )

函數(shù)參數(shù):

prio:進(jìn)程的優(yōu)先級(jí)
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6032

    文章

    44521

    瀏覽量

    633129
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6742

    瀏覽量

    123194
  • uCOS-Ⅱ
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    8585
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    快速實(shí)現(xiàn)STM32移植ucos-ii

    快速實(shí)現(xiàn)STM32移植ucos-ii,歡迎大家一起學(xué)習(xí)[groupid=618]單片機(jī)項(xiàng)目開發(fā)設(shè)計(jì)群[/groupid]
    發(fā)表于 08-08 16:28

    UCOS-II系統(tǒng)移植問(wèn)題

    這幾天剛剛開始學(xué)習(xí)UCOS-II系統(tǒng)移植,我用的是野火開發(fā)板。資料上說(shuō)是對(duì)startup_stm32f10x_hd.s 文件進(jìn)行修改,但是我
    發(fā)表于 09-12 12:27

    對(duì)uCOS-II理解和學(xué)習(xí)路線

    最近為啦準(zhǔn)備嵌入式比賽,重拾stm32學(xué)習(xí)。再次學(xué)習(xí)也算基本掌握查看調(diào)用STM32固件庫(kù)v3.5啦,覺得這才算入門
    發(fā)表于 08-23 09:15

    掌握移植uCOS-II的規(guī)范方法

    本文的目的是希望讀者能夠通過(guò)本文的內(nèi)容掌握移植uCOS-II 的規(guī)范方法。如果只是需要移植文件,可以直接去Micriμm的官網(wǎng)上下載。移植uCOS-
    發(fā)表于 08-23 08:50

    ucOS-II入門經(jīng)典教程

    ucOS-II入門經(jīng)典教程,ucOS-II入門經(jīng)典教程
    發(fā)表于 11-06 10:07 ?0次下載

    盤古STM32F103開發(fā)板移植uCOS-II詳細(xì)說(shuō)明

    盤古STM32F103開發(fā)板移植uCOS-II詳細(xì)說(shuō)明
    發(fā)表于 03-02 17:29 ?13次下載

    STM32平臺(tái)移植uCOS-II詳細(xì)說(shuō)明-2012.11.13

    STM32平臺(tái)移植uCOS-II詳細(xì)說(shuō)明-2012.11.13
    發(fā)表于 03-04 15:31 ?12次下載

    ucos-ii中文書籍

    ucos-ii中文書(邵貝貝).rar 入門經(jīng)典書籍
    發(fā)表于 03-11 11:02 ?6次下載

    ucOS-II入門經(jīng)典教程

    ucOS-II入門經(jīng)典教程,感興趣可以看看。
    發(fā)表于 07-25 18:52 ?46次下載

    uCOS-ii中文書

    學(xué)習(xí)uCOS-ii的最好中文教材,uCOS-ii中文書(邵貝貝)
    發(fā)表于 08-24 18:31 ?0次下載

    uCOS-II原理1

    原理uCOS-II
    發(fā)表于 12-20 22:58 ?5次下載

    uCOS-II原理2

    uCOS-II原理2
    發(fā)表于 12-20 22:53 ?0次下載

    uCOS-II原理3

    uCOS-II原理3
    發(fā)表于 12-20 22:52 ?0次下載

    uCOS-II在MSP430移植

    uCOS-II在MSP430移植
    發(fā)表于 10-12 17:24 ?9次下載
    <b class='flag-5'>uCOS-II</b>在MSP430<b class='flag-5'>移植</b>

    手把手盤古STM32開發(fā)板移植uCOS-II教程

    手把手盤古STM32開發(fā)板移植uCOS-II教程
    發(fā)表于 10-16 09:38 ?22次下載