衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32入門學習筆記之uCOS-II系統移植1

jf_78858299 ? 來源:滑小稽筆記 ? 作者:電子技術園地 ? 2023-02-16 16:13 ? 次閱讀

23.1 操作系統概述

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

23.1.1 操作系統分類

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

23.1.2 uCOS簡介

uCos系統最早出自于1992年美國嵌入式專家Jean J.Labrosse發表在《嵌入式系統編程》上的,并在該雜志的BBS上發布了源碼,發展到現在uCos-III已經出來,但是目前使用最廣泛的還是uCos-II,本單元我們采用uCos-II來進行介紹。

   uCos-II是一個可以基于ROM運行的,可裁剪的,搶占式,實時多任務內核,采用C語言進行編寫,這是一種專門為計算機的嵌入式應用設計的,CPU硬件相關部分采用匯編語言編寫,執行效率高,占用空間小,最小內核可編譯至2Kbyte,uCos-II體系結構如下圖所示。

圖片

從上圖可以發現,我們移植系統的時候,只需要修改os_cpu.h,os_cpu_a.asm和os_cpu.c等三個文件即可,其中其中:os_cpu.h,進行數據類型的定義,以及處理器相關代碼和幾個函數原型;os_cpu_a.asm,是移植過程中需要匯編完成的一些函數,主要就是任務切換函數;os_cpu.c,定義一些用戶HOOK函數。

圖中定時器的作用是為UCOS-II提供系統時鐘節拍,實現任務切換和任務延時等功能。這個時鐘節拍由OS_TICKS_PER_SEC(在os_cfg.h中定義)設置,一般我們設置uCos-II的系統時鐘節拍為1ms~100ms,具體根據你所用處理器和使用需要來設置。我們利用STM32F1的SYSTICK定時器來提供UCOS-II時鐘節拍。

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

所謂的任務,其實就是一個死循環函數,該函數實現一定的功能,一個工程可以有很多這樣的任務(最多255個),uCos-II對這些任務進行調度管理,讓這些任務可以并發工作(不是同時工作,并發只是各任務輪流占用CPU,而不是同時占用,任何時候還是只有1個任務能夠占用CPU),這就是uCos-II最基本的功能。

uCos-II的任何任務都是通過一個叫任務控制塊(TCB)的東西來控制的,每個任務管理塊有3個最重要的參數:1,任務函數指針;2,任務堆棧指針;3,任務優先級;任務控制塊就是任務在系統里面的身份證(uCos-II通過優先級識別任務)

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

uCos-II的每個任務都是一個死循環。每個任務都處在以下5種狀態之一的狀態下,這5種狀態是:睡眠狀態、就緒狀態、運行狀態、等待狀態(等待某一事件發生)和中斷服務狀態。

(1)睡眠狀態:任務在沒有被配備任務控制塊或被剝奪了任務控制塊時的狀態。

(2)就緒狀態:系統為任務配備了任務控制塊且在任務就緒表中進行了就緒登記,任務已經準備好了,但由于該任務的優先級比正在運行的任務的優先級低,還暫時不能運行,這時任務的狀態叫做就緒狀態。

(3)運行狀態:該任務獲得CPU使用權,并正在運行中,此時的任務狀態叫做運行狀態。

(4)等待狀態:正在運行的任務,需要等待一段時間或需要等待一個事件發生再運行時,該任務就會把CPU的使用權讓給別的任務而使任務進入等待狀態。

(5)中斷服務狀態:一個正在運行的任務一旦響應中斷申請就會中止運行而去執行中斷服務程序,這時任務的狀態叫做中斷服務狀態。

uCos-II任務的5個狀態轉換關系如圖

圖片

23.1.3 uCOS-II中與任務相關的函數

(1)創建進程:OSTaskCreate

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

函數參數:

task:指向任務代碼的指針

pdata:任務開始執行時,傳遞給任務的參數的指針

ptos:分配給任務的堆棧的棧頂指針

prio:分配給任務的優先級

每個任務都有自己的堆棧,堆棧必須申明為OS_STK類型,并且由連續的內存空間組成。可以靜態分配堆棧空間,也可以動態分配堆棧空間。

(2)刪除進程

函數原型:INT8U OSTaskDel( INT8U prio )

函數參數:

prio:進程的優先級,該函數是通過任務優先級來實現任務刪除的

(3)請求刪除進程

函數原型:INT8U OSTaskDelReq( INT8U prio )

函數參數:

prio:進程的優先級

(4)修改進程優先級

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

函數參數:

oldprio:進程的源優先級

newprio:進程的新優先級

(5)進程掛起

函數原型:INT8U OSTaskSuspend( INT8U prio )

函數參數:

prio:進程的優先級

任務掛起和任務刪除有點類似,任務掛起只是將被掛起任務的就緒標志刪除,并做任務掛起記錄,并沒有將任務控制塊任務控制塊鏈表里面刪除,也不需要釋放其資源,而任務刪除則必須先釋放被刪除任務的資源,并將被刪除任務的任務控制塊也給刪了。被掛起的任務,在恢復后可以繼續運行。

(6)恢復進程

函數原型:INT8U OSTaskResume( INT8U prio )

函數參數:

prio:進程的優先級
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44622

    瀏覽量

    638530
  • 操作系統
    +關注

    關注

    37

    文章

    6892

    瀏覽量

    123742
  • uCOS-Ⅱ
    +關注

    關注

    0

    文章

    9

    瀏覽量

    8613
收藏 人收藏

    評論

    相關推薦

    快速實現STM32移植ucos-ii

    快速實現STM32移植ucos-ii,歡迎大家一起學習[groupid=618]單片機項目開發設計群[/groupid]
    發表于 08-08 16:28

    UCOS-II系統移植問題

    這幾天剛剛開始學習UCOS-II系統移植,我用的是野火開發板。資料上說是對startup_stm32f10x_hd.s 文件進行修改,但是我
    發表于 09-12 12:27

    uCOS-II理解和學習路線

    最近為啦準備嵌入式比賽,重拾stm32學習。再次學習也算基本掌握查看調用STM32固件庫v3.5啦,覺得這才算入門
    發表于 08-23 09:15

    掌握移植uCOS-II的規范方法

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

    ucOS-II入門經典教程

    ucOS-II入門經典教程,ucOS-II入門經典教程
    發表于 11-06 10:07 ?0次下載

    盤古STM32F103開發板移植uCOS-II詳細說明

    盤古STM32F103開發板移植uCOS-II詳細說明
    發表于 03-02 17:29 ?13次下載

    STM32平臺移植uCOS-II詳細說明-2012.11.13

    STM32平臺移植uCOS-II詳細說明-2012.11.13
    發表于 03-04 15:31 ?12次下載

    ucos-ii中文書籍

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

    ucOS-II入門經典教程

    ucOS-II入門經典教程,感興趣可以看看。
    發表于 07-25 18:52 ?47次下載

    uCOS-ii中文書

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

    uCOS-II原理1

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

    uCOS-II原理2

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

    uCOS-II原理3

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

    uCOS-II在MSP430移植

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

    手把手盤古STM32開發板移植uCOS-II教程

    手把手盤古STM32開發板移植uCOS-II教程
    發表于 10-16 09:38 ?22次下載
    bet365 金融| 百家乐打水策略| 大发888怎么进不去| 新加坡百家乐官网的玩法技巧和规则 | 百家乐官网赢家| 明珠百家乐的玩法技巧和规则| gt百家乐官网平台| 如何玩百家乐的玩法技巧和规则| 百家乐官网群boaicai| 威尼斯人娱乐城信誉lm0| 巴登娱乐城| 百家乐双倍派彩的娱乐城| 真钱百家乐官网游戏排行| 威尼斯人娱乐场五星| 大众百家乐官网的玩法技巧和规则| 钱柜娱乐城现金网| 百家乐双面数字筹码| 百家乐官网合理的投注法| 百家乐15人桌| 全景网百家乐官网的玩法技巧和规则 | 百家乐的各种打法| 百家乐官网游戏资料网| 大发888扑克场下载| 百家乐是骗人的| 百家乐官网有哪些注| 威尼斯人娱乐城游戏平台| 星河百家乐官网的玩法技巧和规则 | 百家乐庄89| 百家乐官网有好的投注法吗| 大发888体育官网| 百家乐最好的平台是哪个| 澳门百家乐官网有赢钱的吗| 德州扑克学校| 百家乐巴厘岛上海在线| 百家乐官网游戏单机牌| 百加乐牌| 百家乐赌博筹| 24山风水四大局| 大发百家乐官网现金| 利好国际| 百家乐皇室百家乐的玩法技巧和规则|