999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于STM32單片機的uC/OS-II操作系統移植

2020-12-30 04:26:16張中前
機電元件 2020年6期
關鍵詞:示意圖單片機管理

張中前

(貴州航天電器股份有限公司,貴州貴陽,550009)

1 引言

操作系統是裸機的第一層軟件,操作系統直接運行在硬件上,上層軟件通過提供應用程序接口(API函數),實現對底層硬件的訪問,同時,通過操作系統實現對多個上層應用軟件(任務)管理,實現對硬件CPU管理、存儲管理、I/O接口管理及文件管理,如圖1所示。

圖1 操作系統功能組成示意圖

STM32系列單片機以其優良的價格,大容量的FLASH及RAM存儲空間,極易用于較為復雜的控制系統;在STM32單片機上進行uC/OS-II實時操作系統的移植,提高了產品的設計靈活性,實現較為復雜的系統功能;通過將開源的uC/OS-II移植在STM32單片機上,以其較為低廉的硬件成本獲得較高的使用性能,具有良好的應用前景。

2 uC/OS-II操作系統

2.1 uC/OS-II操作系統的基本特征

uC/OS-II是一個完整的、可移植、可固化、可剪裁的基于優先級調度的搶占式實時多任務操作系統;它能夠在外界事件或數據產生時,能夠接收并以足夠快的速度響應,其處理的結果又能夠在規定的時間內輸出,并控制所有實時任務協調、一致運行。它包含了基本的任務調度、時間管理、內存管理以及任務之間的通信和同步等功能。

圖2 uC/OS-II文件結構示意圖

uC/OS-II從結構上分為:應用軟件、與軟件處理器無關的代碼、配置文件、與處理器有關的移植文件及實際硬件,uC/OS-II的文件結構如圖2所示。

2.2 uC/OS-II任務及相關管理機制

任務是uC/OS-II操作系統的基本執行單位,是操作系統中的一次執行過程,如產品設計中的程序是靜止的,存儲在ROM、硬盤等設備中;任務主要由任務控制塊、任務堆棧、任務程序代碼等組成,如圖3所示。

圖3 uC/OS-II任務組成示意圖

任務是動態的,存在于產品的RAM或閃存中,其運行狀態可分為睡眠、運行、等待、中斷等多個狀態;每個任務可多次重復執行。在產品設計時,將產品的應用程序設計過程分解,得到多個任務,并依據實際的運行過程,賦予每個任務優先級,操作系統通過任務調度,實現產品的功能。在uC/OS-II操作系統中,多個任務通過任務控制塊組成任務鏈表, CPU通過uC/OS-II操作系對多任務鏈表任務進行調度,通過讀取任務控制塊中的優先級,使高優先級的任務處于就緒狀態,就緒狀態的任務得到執行。任務狀態切換如圖4所示。

圖4 uC/OS-II任務狀態切換示意圖

2.3 uC/OS-II任務優先級管理

uC/OS-II每個時間段執行的任務只有一個。通過調度,使高優先級任務得到執行,故任務優先級是CPU執行任務時選擇的依據。uC/OS-II對任務的執行方式是優先級搶占式,在創建任務時,每個任務被分配一個唯一的優先級。uC/OS-II可以創建多達64個任務,采用優先級0~63表示,0為最高優先級。

2.4 uC/OS-II中斷管理

中斷是嵌入式實時操作系統中的重要機制,當CPU正在運行任務時,若有中斷事件發射管,則CPU暫停當前的任務,轉向執行中斷事件,CPU執行完中斷事件后,進行一次任務調度計算,若有比中斷更高優先級的任務,則CPU轉向執行高優先級任務,否則,繼續執行被中斷執行的任務。

2.5 uC/OS-II時間管理

是操作系統實現并發運行的關鍵,為了使操作系統在一定的時間內執行多個任務,通過硬件定時器產生一個周期性的中斷,作為操作系統處理的系統時鐘,兩個時鐘之間的中斷一般稱為時鐘節拍。操作系統中,任務通過調用時鐘節拍函數OSTimeTick();從而進入定時中斷,通過操作系統中斷管理,實現對多任務的調度執行。

2.6 uC/OS-II任務間同步與通信

在uC/OS-II操作系統在執行多任務時,需要多個任務按照一定的時間順序配合,完成產品的給定功能,為此,任務間需要進行時間的同步與信息的交換。uC/OS-II操作系統中,通過信號量、郵箱(消息郵箱)和消息隊列這些被稱作事件的中間環節來實現任務間的同步與通信,如圖5所示。

為了把描述事件的數據結構統一起來,uC/OS-II使用事件控制塊ECB數據結構來描述諸如信號量、郵箱(消息郵箱)和消息隊列這些事件。事件控制塊中包含包括等待任務表在內的所有有關事件的數據。

圖5 任務通過事件通信示意圖

2.7 uC/OS-II內存管理

uC/OS-II通過對內存建立分區、申請及釋放內存塊、查詢存儲分區狀態信息等方式,實現對內存的管理,μC/OS-II對內存進行兩級管理,即把一個大片連續的內存空間分成了若干個分區,每個分區又分成了若干個大小相等的內存塊來進行管理。操作系統以分區為單位來管理動態內存,而任務以內存塊為單位來獲得和釋放動態內存。內存分區使用一個二維數組實現,然后將數組與內存控制塊關聯,通過內存控制塊組成鏈表,實現對內存的動態管理,如圖6、圖7所示。

圖6 內存的分區管理示意圖

圖7 內存控制塊鏈表示意圖

3 uC/OS-II操作系統在STM32F103單片機上的移植

所謂移植,就是使一個實時操作系統能夠在某個微處理器平臺上或微控制器平臺上運行。在2.1節中介紹了uC/OS-II的文件結構,從圖2可見,移植uC/OS-II操作系統時,需要將與CPU有關的文件進行修改,以適應在STM32單片機上的使用。與CPU有關的三個文件分別為OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM。

3.1 OS_CPU.H文件移植說明

OS_CPU.H文件主要定義了與CPU相關的數控類型,主要為CPU的類型不同,所對應的操作系統中的數據類型占用的存儲空間也不一樣。為了保證可移植性,程序中沒有直接使用C語言中的short、int和long等數據類型的定義,因為它們與處理器類型有關,隱含著不可移植性。程序中自己定義了一套數據類型,如INT16U表示16位無符號整型。對于ARM這樣的32位內核,INT16U是unsigned short型;如果是16位處理器,則是unsingedint型。根據STM32中數據類型及uC/OS-II所需數據類型,同時對STM32進入臨界區及堆棧方向進行定義,對OS_CPU.H文件修改如下圖8所示。

圖8 OS_CPU.H文件修改

3.2 OS_CPU_C.C文件移植說明

OS_CPU_C.C文件中包含了OSTaskStkInit()、OSTaskDelHook()、OSTaskSwHook()、OSTaskStartHook()及OSTimeHook()共計6個函數。這些函數中,基于STM32單片機必須移植的是任務堆棧初始化函數OSTaskStkInit()。這個函數在任務創建時被調用,負責初始化任務的堆棧結構并返回新堆棧的指針stk。主要對任務中需要用到的PC指針以及各個寄存器進行處理,堆棧初始化工作結束后,返回新的堆棧棧頂指針。該函數移植修改如圖9所示。

圖9 OS_CPU.H文件修改示意

3.3 OS_CPU_A.ASM文件移植說明

OS_CPU_A.ASM文件采用匯編語言編制,在移植時,主要對與CPU有關的函數進行修改,這些函數為:高優先級任務就緒函數OSStartHighRdy()、任務切換函數OSCtxSw()、中斷任務切換函數OSIntCtxSw()及時鐘節拍中斷服務函數OSTickISR()函數。

OSStartHighRdy()高優先級任務就緒函數是在OSStart()多任務啟動之后,負責從最高優先級任務的TCB控制塊中獲得該任務的堆棧指針SP,并通過SP依次將CPU現場恢復。這時系統就將控制權交給用戶創建的任務進程,直到該任務被阻塞或都被其他更高優先級的任務搶占CPU。該函數僅僅在多任務啟動時被執行一次,用來啟動最高優先級的任務執行。移植該函數的原因是,它涉及將處理器寄存器保存到堆棧的操作。

OS_TASK_SW()任務切換函數由OSSched()函數調用,OSSched()函數負責任務之間的調度。OSCtxSw()函數的工作是,先將當前任務的CPU現場保存到該任務的堆棧中,然后獲得最高優先級任務的堆棧指針,并從該堆棧中恢復此任務的CPU現場,使之繼續執行,該函數就完了一次任切換。

OSIntCtxSw()中斷任務切換函數由OSIntExit()調用。由于中斷可能會使更高優先級的任務進入就緒態,因此,為了讓更高優先級的任務能立即運行,在中斷服務子程序的最后,OSInitExit()函數會調用OSInitCtxSw()做任務切換。這樣做的目的主要是能夠盡快地讓高優先級的任務得到響應,保證系統的實時性能。 OSInitCtxSw()與OSCtxSw()都是用于任務切換函數,其區別在于,在OSIntCtxSw()中無需再保存CPU寄存器,因為在調用OSIntCtxSw()之前已發生了中斷,OSIntCtxSw()已將默認的CPU寄存器保存到被中斷的任務堆棧中。

OSTickISR()時鐘節拍中斷服務函數,是特定的周期性中斷,是由硬件定時器產生的。時鐘節拍式中斷使得內核可將任務延時若干個整數時鐘節拍,以及當任務等待事件發生時,提供等待超時的依據。時鐘節拍頻率越高,系統的額外開銷越大。中斷間的時間間隔取決于不同的應用。OSTickISR()首先將CPU寄存器的值保存在被中斷任務的堆棧中,之后調用OSIntEnter()。隨后,OSTickISR()調用OSTimeTick,檢查所有處于延時等待狀態的任務,判斷是否有延時結束就緒的任務。OSTickISR()最后調用OSIntExit()。如果在中斷中(或其他嵌套的中斷)有更高優先級的任務就緒,并且當前中斷為中斷嵌套的最后一層,那么OSIntExit()將進行任務調度。

4 uC/OS-II在STM32上的應用實例

為驗證uC/OS-II操作系統移植的成功與否,在STM32開發板上對uC/OS-II移植進行驗證,創建任務為:

任務1:LED0燈閃爍點亮;

任務2:按鍵掃描;

任務3:任務2按鍵掃描值通過信號量的形式,傳遞給任務3,按下一次按鍵,實現LED1燈的一次閃爍點亮;

任務4:觸摸屏任務,借用開發板已有程序,采用郵箱形式進行任務間信號傳遞;

任務5:主任務,實現對觸摸屏的顯示,清除等功能。

創建任務如圖10所示,任務執行結果如圖11所示。

圖10 任務創建示意圖

圖11 uC/OS-II系統移植后程序執行結果示圖

5 結論

本文介紹了uC/OS-II實時操作系統的基本原理,針對uC/OS-II操作系統在STM32單片機上的移植進行了詳細說明,并對移植實例進行了分析,取得了良好的效果。本文對小型系統級別電子控制組件提供了一種可行的解決方案,對電子控制組件產品的設計具有一定的參考及指導作用。

猜你喜歡
示意圖單片機管理
棗前期管理再好,后期管不好,前功盡棄
今日農業(2022年15期)2022-09-20 06:56:20
先畫示意圖再解答問題
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
黔西南州旅游示意圖
當代貴州(2019年41期)2019-12-13 09:28:56
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
“這下管理創新了!等7則
雜文月刊(2016年1期)2016-02-11 10:35:51
兩張圖讀懂“青年之聲”
中國共青團(2015年7期)2015-12-17 01:24:38
人本管理在我國國企中的應用
現代企業(2015年8期)2015-02-28 18:54:47
Microchip推出兩個全新PIC單片機系列
主站蜘蛛池模板: 日韩精品一区二区三区视频免费看| 日韩AV无码免费一二三区| 国产成人一区在线播放| 国产在线一二三区| 亚洲天堂伊人| 国产新AV天堂| www.99精品视频在线播放| 无码视频国产精品一区二区| 国产精品爽爽va在线无码观看| 日本国产精品| 麻豆a级片| 国产精品亚洲精品爽爽| 午夜福利在线观看成人| 麻豆AV网站免费进入| 欧美亚洲一二三区| 国产国拍精品视频免费看| 亚洲天堂网在线观看视频| 最新国语自产精品视频在| 日韩成人在线网站| 99人妻碰碰碰久久久久禁片| 亚洲成人黄色在线观看| 婷婷六月综合网| 亚洲成人黄色在线观看| 波多野结衣无码视频在线观看| 国产主播在线一区| 亚洲国产精品一区二区高清无码久久| 欧美日本一区二区三区免费| v天堂中文在线| 最新痴汉在线无码AV| 喷潮白浆直流在线播放| 国产精品无码AV中文| 欧美在线网| 日韩一区精品视频一区二区| 欧亚日韩Av| 中国毛片网| 国产成人精品18| 精品国产电影久久九九| 国产91小视频在线观看| 激情影院内射美女| 国产丝袜丝视频在线观看| 国产一区成人| 亚洲中文制服丝袜欧美精品| 亚洲天堂啪啪| 欧美成人看片一区二区三区 | 制服丝袜国产精品| 亚洲精品免费网站| 福利小视频在线播放| 精品一区二区三区水蜜桃| 亚洲性影院| 黄色污网站在线观看| 久久99精品国产麻豆宅宅| 一级毛片免费观看不卡视频| 亚洲第一区精品日韩在线播放| 亚瑟天堂久久一区二区影院| 在线中文字幕日韩| 操美女免费网站| 天堂岛国av无码免费无禁网站| 亚洲日本中文字幕乱码中文| 五月六月伊人狠狠丁香网| 亚洲av色吊丝无码| 呦视频在线一区二区三区| 亚洲综合中文字幕国产精品欧美| 毛片网站在线看| 91精品综合| 日韩欧美中文在线| 欧美在线导航| 五月婷婷伊人网| 亚洲AV无码久久天堂| 欧美成人手机在线观看网址| 久久久久无码精品| 欧美一区精品| 中文字幕天无码久久精品视频免费| 亚洲欧美日韩另类| 久热中文字幕在线| 亚洲嫩模喷白浆| 91久久偷偷做嫩草影院精品| 欧美成a人片在线观看| 亚洲天堂自拍| 亚洲最黄视频| 美女啪啪无遮挡| 特级毛片免费视频| 91精品国产综合久久香蕉922 |