嵌入式系統(tǒng)-基礎(chǔ)知識(shí)_第1頁
嵌入式系統(tǒng)-基礎(chǔ)知識(shí)_第2頁
嵌入式系統(tǒng)-基礎(chǔ)知識(shí)_第3頁
嵌入式系統(tǒng)-基礎(chǔ)知識(shí)_第4頁
嵌入式系統(tǒng)-基礎(chǔ)知識(shí)_第5頁
已閱讀5頁,還剩74頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

嵌入式系統(tǒng)——基礎(chǔ)知識(shí)

操作系統(tǒng)OS

控制和管理計(jì)算機(jī)軟硬件資源,合理組織計(jì)算機(jī)工作流程,方便用戶使用

計(jì)算機(jī)的系統(tǒng)軟件。

可將OS看成是應(yīng)用程序與硬件間的接口或虛擬機(jī)。

OS功能:進(jìn)程管理、存儲(chǔ)管理、文件管理、設(shè)備管理、網(wǎng)絡(luò)和通信管理

等。

嵌入式操作系統(tǒng)EOS

運(yùn)行在嵌入式硬件平臺(tái)上,對(duì)整個(gè)系統(tǒng)及其所操作的部件裝置等資源進(jìn)行

統(tǒng)一協(xié)調(diào)、指揮和控制的系統(tǒng)軟件。

EOS特點(diǎn):微型化、可裁剪性、實(shí)時(shí)性、高可靠性、易移植性

重點(diǎn)關(guān)注:高實(shí)時(shí)性、硬件相關(guān)依賴性、軟件固化、應(yīng)用專用性、網(wǎng)絡(luò)功

能。

實(shí)時(shí)操作系統(tǒng)TROS

能使計(jì)算機(jī)及時(shí)響應(yīng)外部事件請(qǐng)求,并能及時(shí)控制所有實(shí)時(shí)設(shè)備與實(shí)時(shí)任

務(wù)協(xié)調(diào)運(yùn)行,且能在規(guī)定時(shí)間內(nèi)完成事件處理的OS。

RTOS基本要求:

1、邏輯功能正確:RTOS的計(jì)算必須產(chǎn)生正確的結(jié)果;

2、時(shí)間正確:RTOS的計(jì)算必須在預(yù)定的周期內(nèi)完成。

RTOS應(yīng)滿足條件:

1、多任務(wù)系統(tǒng);

2、任務(wù)的切換時(shí)間應(yīng)與系統(tǒng)中的任務(wù)書無關(guān);

3、中斷延時(shí)的時(shí)間可預(yù)知并盡可能短。

無論在什么情況下,OS完成任務(wù)所需的時(shí)間應(yīng)該是在程序設(shè)計(jì)時(shí)就可預(yù)

知的。

嵌入式實(shí)時(shí)操作系統(tǒng)ERTOS

用于嵌入式系統(tǒng),對(duì)系統(tǒng)資源和多個(gè)任務(wù)進(jìn)行管理,且具有高可靠性、良

好可裁剪性等優(yōu)良性能的,為應(yīng)用程序提供運(yùn)行平臺(tái)和實(shí)時(shí)服務(wù)的微型系統(tǒng)軟

件。

ERTOS最重要的三項(xiàng)服務(wù):

1、多任務(wù)管理

2、內(nèi)存管理

3、外圍資源管理

嵌入式微處理器(特點(diǎn))

1、對(duì)實(shí)時(shí)多任務(wù)OS有很強(qiáng)的支持能力;

2、具有功能很強(qiáng)的存儲(chǔ)區(qū)域保護(hù)功能;

3、處理器結(jié)構(gòu)可擴(kuò)展;

4、低功耗;

微處理器主要發(fā)展方向:小體積、高性能、低功耗

微處理器分類:MCU、MPU、DSP、SOC

嵌入式系統(tǒng)發(fā)展方向

1、嵌入式開發(fā)是一項(xiàng)系統(tǒng)工程,嵌入式系統(tǒng)廠商不僅要提供嵌入式軟硬

件系統(tǒng)本身,還需要提供強(qiáng)大的硬件開發(fā)工具與軟件支持包;

2、網(wǎng)絡(luò)化、信息化的要求隨著因特網(wǎng)技術(shù)的成熟、寬帶的提高而日益提

高,使得以往單一功能的設(shè)備功能不再單一,結(jié)構(gòu)更加復(fù)雜;

3、網(wǎng)絡(luò)互連成為必然趨勢(shì)(IEEE1394、USB、CAN、Bluetooth等網(wǎng)絡(luò)接

口);

4、精簡(jiǎn)系統(tǒng)內(nèi)核、算法、降低功耗和軟硬件成本;

5、提供友好的多媒體人機(jī)界面。

嵌入式系統(tǒng)特點(diǎn)

機(jī)軟硬件于一體,可獨(dú)立工作的計(jì)算機(jī)系統(tǒng)。

1、專用性強(qiáng);2、可裁剪性;3、實(shí)時(shí)性與可靠性;

4、功耗低;5、系統(tǒng)內(nèi)核小;6、系統(tǒng)精簡(jiǎn);

7、實(shí)時(shí)多任務(wù)OS;8、專門開發(fā)工具與環(huán)境;

嵌入式系統(tǒng)的核心往往是一個(gè)只有幾KB到幾十KB的微內(nèi)核。

通常把嵌入式系統(tǒng)概念的重心放在“系統(tǒng)”上,指能夠運(yùn)行OS的軟硬件

總體。

嵌入式系統(tǒng)構(gòu)成,硬件:微處理器、外圍接口和存儲(chǔ)器;中間層:BSP/HAL;

軟件:RTOS及其上運(yùn)行的應(yīng)用軟件。

嵌入式系統(tǒng)框架可分為4部分:處理器、存儲(chǔ)器、I/O、軟件。

嵌入式CPU將通用CPU中許多由板卡完成的任務(wù)集成到芯片內(nèi)部。

多數(shù)嵌入式設(shè)備的應(yīng)用軟件和OS緊密結(jié)合。

嵌入式軟件體系結(jié)構(gòu)

1、無OS情形

(1)循環(huán)輪轉(zhuǎn)方式:把系統(tǒng)功能分成若干不同的任務(wù),然后把它們包含在一

個(gè)無限的循環(huán)語句中,按照順序逐一執(zhí)行,之后再循環(huán)。

缺點(diǎn):過于簡(jiǎn)單,無法處理異步事件,缺乏并發(fā)處理能力。

(2)前后臺(tái)系統(tǒng):在循環(huán)輪轉(zhuǎn)的基礎(chǔ)上,增加了中斷處理功能;

foreground(前臺(tái)程序:事件處理級(jí)程序):中斷服務(wù)程序ISR,處理

異步事件;

background(后臺(tái)程序:任務(wù)級(jí)程序):系統(tǒng)管理調(diào)度程序,無限循環(huán),

負(fù)責(zé)嵌入式系統(tǒng)軟硬件資源的分配、管理及任務(wù)調(diào)度。

2、有OS情形

(1)提高了系統(tǒng)可靠性;

(2)提高了系統(tǒng)開發(fā)效率,降低了開發(fā)成本,縮短了開發(fā)周期;

(3)有利于系統(tǒng)的擴(kuò)展和移植;

對(duì)不同的嵌入式操作系統(tǒng),所包含的組件可能各不相同。一般來說,所有

的OS都會(huì)有一個(gè)內(nèi)核Kernel,內(nèi)核指OS中的一個(gè)組件,包含了OS的主要功能,

即OS的各種特性及其相互間的依賴關(guān)系。(任務(wù)管理、存儲(chǔ)管理、文件管理、

設(shè)備管理、網(wǎng)絡(luò)管理)

嵌入式操作系統(tǒng)分類

1、按“系統(tǒng)類型”分類:商用系統(tǒng)、專業(yè)系統(tǒng)、開源系統(tǒng);

2、按“響應(yīng)時(shí)間”分類:RTOS、非RTOS;

3、按“軟件結(jié)構(gòu)”分類:?jiǎn)误w結(jié)構(gòu)、分層結(jié)構(gòu)、微內(nèi)核結(jié)構(gòu);

差別體現(xiàn)在兩方面:(1)內(nèi)核的設(shè)計(jì),即內(nèi)核中包含了哪些功能組件;

(2)系統(tǒng)中集成了哪些其他的系統(tǒng)軟件。

(1)單體結(jié)構(gòu)(eg:linux):在單體結(jié)構(gòu)的OS中,中間件和設(shè)備驅(qū)動(dòng)程

序通常集成在系統(tǒng)內(nèi)核中,整個(gè)系統(tǒng)通常只有一個(gè)可執(zhí)行文件,包含了所有的功

能組件。整個(gè)OS由一組功能模塊構(gòu)成,這些功能模塊間可以相互調(diào)用。

優(yōu)點(diǎn):性能較好,系統(tǒng)各模塊間可以相互調(diào)用,通信開銷?。?/p>

缺點(diǎn):OS體積龐大,高度集成,在系統(tǒng)裁剪、修改和調(diào)試等方面較為

困難。

(2)分層結(jié)構(gòu):在分層結(jié)構(gòu)中,一個(gè)OS被劃分為若干個(gè)層次,各層間的

調(diào)用關(guān)系是單向的。分層結(jié)構(gòu)的OS也只有一個(gè)大的可執(zhí)行文件,包含設(shè)備驅(qū)動(dòng)

程序和中間件。要求在每個(gè)層次上都要提供一組API接口函數(shù)。

(3)微內(nèi)核結(jié)構(gòu)(eg:VxWorks):在內(nèi)核中,把OS的大部分功能都剝離

出去,只保留最核心的功能單元。內(nèi)核非常小,大部分的系統(tǒng)功能都位于內(nèi)核之

外。在微內(nèi)核OS中,新的功能組件可以被動(dòng)態(tài)地添加進(jìn)來,具有易于擴(kuò)充、調(diào)

試方便和易于移植等特點(diǎn)。核內(nèi)組件與核外組件間的通信是消息傳遞,而不是直

接的函數(shù)調(diào)用。

嵌入式操作系統(tǒng)重要概念

1、先占式內(nèi)核:當(dāng)前最高優(yōu)先級(jí)任務(wù)一旦就緒,就立即獲得CPU控制權(quán),

且控制權(quán)可知;

2、調(diào)度策略分析:(強(qiáng)實(shí)時(shí)、弱實(shí)時(shí))

3、任務(wù)優(yōu)先級(jí)分配:(靜態(tài)優(yōu)先級(jí)、動(dòng)態(tài)優(yōu)先級(jí))

4、時(shí)間的可確定性:強(qiáng)RTOS的函數(shù)調(diào)用與服務(wù)的執(zhí)行時(shí)間具有可確定性。

系統(tǒng)服務(wù)的執(zhí)行時(shí)間不依賴于應(yīng)用程序任務(wù)的多少。系統(tǒng)完成某個(gè)確定任務(wù)的時(shí)

間可預(yù)測(cè)。

5、任務(wù)切換時(shí)間:(取決于CPU有多少Reg要入棧)

6、中斷響應(yīng)時(shí)間:在先占式內(nèi)核中,中斷響應(yīng)時(shí)間=關(guān)中斷最長(zhǎng)時(shí)間+保

護(hù)CPU內(nèi)部寄存器時(shí)間+進(jìn)入中段服務(wù)函數(shù)的執(zhí)行時(shí)間+開始執(zhí)行ISR第一條

指令的時(shí)間;

7、優(yōu)先級(jí)反轉(zhuǎn):(解決方法:優(yōu)先級(jí)繼承、優(yōu)先權(quán)極限)

8、任務(wù)執(zhí)行時(shí)間的抖動(dòng)

9、任務(wù)劃分:(原則:I/O原則、優(yōu)先級(jí)原則、大量原則、功能耦合、偶

然耦合、頻率組合)

uC/OS-II內(nèi)核架構(gòu)解析(1)-一嵌入式RTOS

1.嵌入式系統(tǒng)基本模型

b'JIJftU河/:(Application)

FS文件系統(tǒng)圖形界面G5系統(tǒng)管理接口

實(shí)時(shí)操作系統(tǒng)內(nèi)核系統(tǒng)(RTOS)

板級(jí)支持包——

固件

硬件層

2.RTOS設(shè)計(jì)原則

采用各種算法和策略,始終保持系統(tǒng)行為的可預(yù)測(cè)性。即在任何情況下,

在系統(tǒng)運(yùn)行的任何時(shí)刻,OS的資源配置策略都能為爭(zhēng)奪資源(包括CPU、內(nèi)存、

網(wǎng)絡(luò)帶寬等)的多個(gè)實(shí)時(shí)任務(wù)合理地分配資源,使每個(gè)實(shí)時(shí)任務(wù)的實(shí)時(shí)性要求都

能得到滿足。

3.GPOS與RTOS

GPOS:注重每次執(zhí)行的平均響應(yīng)時(shí)間,而不是某次特定執(zhí)行的響應(yīng)時(shí)間。

RTOS:除滿足應(yīng)用功能需求外,還要滿足實(shí)時(shí)性要求,始終保證系統(tǒng)行為

的可預(yù)測(cè)性(predictability)□

與GPOS不同,RTOS注重的不是系統(tǒng)的平均表現(xiàn),而是要滿足每個(gè)實(shí)時(shí)任

務(wù)在最壞情況下的實(shí)時(shí)性要求。也就是說,RTOS注重的是個(gè)體表現(xiàn),更準(zhǔn)確地

說是個(gè)體最壞情況表現(xiàn)。

RTOS與GPOS的差別主要表現(xiàn)在:

a)任務(wù)調(diào)度策略不同;

b)內(nèi)存管理方式不同;

c)中斷處理方式不同;

d)系統(tǒng)管理方式不同;

4.嵌入式開發(fā)模式

單片機(jī)系統(tǒng)的前后臺(tái)程序:不使用OS,將應(yīng)用程序設(shè)計(jì)成死循環(huán),系統(tǒng)

輪流處理各事件,對(duì)時(shí)間響應(yīng)要求高的異步事件采用中斷進(jìn)行處理。

基于任務(wù)(進(jìn)程)的軟件設(shè)計(jì)方法:使用OS,由OS管理硬件資源,任務(wù)

只是在需要資源時(shí)申請(qǐng)即可,至于when/which,完全由OS決定。

5.(不)可重入

(1)可重入函數(shù):指函數(shù)代碼在運(yùn)行過程中可以被中斷,中斷返回后仍能夠

恢復(fù)到原來的狀態(tài),并能準(zhǔn)確無誤執(zhí)行的函數(shù)。

可重入函數(shù)可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)被破壞??芍厝?/p>

函數(shù)或者只使用局部變量,即變量保存在CPU寄存器或堆棧中;或者使用全局變

量,則要對(duì)全局變量予以保護(hù)。

(2)不可重入函數(shù):函數(shù)在運(yùn)行過程中不可以被中斷。

6.互斥條件

實(shí)現(xiàn)任務(wù)間通信最簡(jiǎn)便的辦法是使用共享數(shù)據(jù),但要保證任務(wù)在處理共享數(shù)

據(jù)時(shí)的排它性。使共享資源滿足互斥條件,最一般的方法有:

(1)關(guān)中斷

使用某種實(shí)時(shí)內(nèi)核,一般情況下關(guān)中斷的時(shí)間最長(zhǎng)不超過內(nèi)核本身的關(guān)

中斷時(shí)間,這樣就不會(huì)影響系統(tǒng)中斷延遲。

(2)使用測(cè)試并置位指令

Test&Set操作可能是微處理器一條不會(huì)被中斷的指令,否則應(yīng)該在程

序中關(guān)中斷做TAS操作再開中斷。

(3)禁止做任務(wù)切換

此時(shí)任務(wù)切換雖然是禁止的,但仍允許中斷。如果這時(shí)中斷來了,ISR

會(huì)在這一臨界區(qū)內(nèi)立即執(zhí)行。

(4)利用信號(hào)量;

7.臨界狀態(tài)

臨界狀態(tài)指當(dāng)前程序處于不可中斷狀態(tài)。一般情況下,在調(diào)用不可重入函

數(shù)前或在修改全局變量數(shù)據(jù)時(shí),都需要先進(jìn)入臨界狀態(tài)。進(jìn)入臨界狀態(tài)的主要操

作是關(guān)閉所有可以屏蔽的中斷;而退出臨界狀態(tài)的主要操作是恢復(fù)到上次進(jìn)入臨

界狀態(tài)時(shí)前中斷管理的狀態(tài)。

在uC/OS-H中,宏OS_ENTER_CRITICAL()描述進(jìn)入臨界狀態(tài)所完成的操

作,宏OS_EXIT_CRITICAL()描述退出臨界狀態(tài)的操作。uC/OS-II提供了3種進(jìn)

入和退出臨界狀態(tài)的辦法,可以根據(jù)CPU類型由宏OS_CRITICAL_MOTHOD指定具

體的臨界狀態(tài)處理辦法。

uC/OS-II內(nèi)核架構(gòu)解析(2)-—uC/OS-II基本介紹

1.uC/OS-H文件結(jié)構(gòu)

應(yīng)用軟件

(用戶代四)

Mc/os-n■cosn配■文件

(與處理?類變無關(guān)的代碼)(與應(yīng)用程序不關(guān))

OS_CORE.CChapter3

OS-FLAG.CChapter9

OS_MBOX.CChapter10

OS_MEM.CChapter12

OS_MUTEX.CChapter8OS_CFG.HChapter9

OS_Q.CChapter11INCLUDES.HChapter1

OS_SEM.CChapter7

OS_TASK.CChapter4

OS_TIME.CChapter5

uCOS_II.CChapter3

uCOS_II.HChapter3

移植)C/OSIJ

(與處理韻類型,關(guān)的代碼》

OS_CPU.HChapters14,15

OS_CPU_A.ASMChapters14,15

OS_CPU_C.CChapters14,15

軟件

CPU

2.uC/OS-II組成部分

uc/os-n大致可以分成系統(tǒng)核心(包含任務(wù)調(diào)度)、任務(wù)管理、時(shí)間管理、

多任務(wù)同步與通信、內(nèi)存管理、CPU移植等部分。

(1)核心部分(OSCore.c):uC/OS-H處理核心,包括初始化、啟動(dòng)、中斷

管理、時(shí)鐘中斷、任務(wù)調(diào)度及事件處理等用于系統(tǒng)基本維持的函數(shù)。

(2)任務(wù)管理(OSTask.c):包含與任務(wù)操作密切相關(guān)的函數(shù),包括任務(wù)建

立、刪除、掛起及恢復(fù)等,uC/OSII以任務(wù)為基本單位進(jìn)行調(diào)度。

(3)時(shí)鐘部分(OSTime.c):uC/OS-H中最小時(shí)鐘單位是timetick(時(shí)鐘節(jié)

拍),其中包含時(shí)間延遲、時(shí)鐘設(shè)置及時(shí)鐘恢復(fù)等與時(shí)鐘相關(guān)的函數(shù)。

(4)多任務(wù)同步與通信(OSMbox.c,OSQ.c,OSSem.c,OSMutex.c,

OSFlag.c):包含事件管理函數(shù),涉及Mbox、msgQ、Sem>Mutex、Flag等。

(5)內(nèi)存管理部分(0SMem.c):主要用于構(gòu)建私有的內(nèi)存分區(qū)管理機(jī)制,其

中包含創(chuàng)建memPart、申請(qǐng)/釋放memPart、獲取分區(qū)信息等函數(shù)。

(6)CPU接口部分:uC/OS-H針對(duì)特定CPU的移植部分,由于牽涉到SP等

系統(tǒng)指針,通常用匯編語言編寫,包括任務(wù)切換、中斷處理等內(nèi)容。

3.uc/os-n任務(wù)狀態(tài)

在uc/os-n中,一個(gè)任務(wù)就是一個(gè)線程,該任務(wù)可以認(rèn)為CPU完全屬于

它自己。任務(wù)有自己的堆棧和CPU寄存器,并且被賦予一定的優(yōu)先級(jí)。任務(wù)可能

處于睡眠、就緒、運(yùn)行、等待或中斷服務(wù)狀態(tài)之

OSFIagPend<)

OSMboxPend()

OSMboxPostOpU)

0SMut8xPost()OSMutexPend()

OSQPost()OSQPend()

OSQPostFront()

OSQPostOpyOOSSamPend()

OSTaskDolO

OSSemPostQOSTaskSuspend()

OSTaskResume()OSTimeDtyO

OSTimeTick()OSTimeDlyHMSMO

OSStart()

OSTaskCreate()OSlntExrtO

OSTa8kCreateExt()OSTASK_SW()中斷

圖F2.3任務(wù)的狀態(tài)

4.uC/OS-II與VxWorks的比較

□cosn內(nèi)核調(diào)度分析vxWorks內(nèi)核調(diào)度分析

1.只支持基于優(yōu)先級(jí)的搶占式調(diào)度篁法,不支持時(shí)間片輪訓(xùn);采用工作隊(duì)列workQword的方式調(diào)度;

根據(jù)用戶指定,動(dòng)態(tài)分配堆棧,可以創(chuàng)建任意多個(gè)

2.64個(gè)優(yōu)先級(jí),只能創(chuàng)建64個(gè)任務(wù),用戶只能創(chuàng)建56個(gè)任務(wù);

任務(wù);

3.每個(gè)任務(wù)優(yōu)先級(jí)都不相同.

4?不支持優(yōu)先級(jí)逆轉(zhuǎn);支持優(yōu)先級(jí)逆轉(zhuǎn),TCB保存兩個(gè)優(yōu)先級(jí);

5.READYU列通過內(nèi)存映射表實(shí)現(xiàn)快速查詢.效率非常高;支持搶占與時(shí)間片輪訓(xùn)的任務(wù)調(diào)度方式;

6.支持時(shí)鐘節(jié)拍;通過編譯開關(guān)實(shí)現(xiàn)對(duì)多cpu體系結(jié)構(gòu)的支持.

7.支持信號(hào)量,消息隊(duì)列,事件控制塊,事件標(biāo)志組,消息郵箱任務(wù)通訊

隊(duì)列采用FIFO或者優(yōu)先級(jí)的雙向梃表實(shí)現(xiàn);

機(jī)制;

’8.支持中斷嵌套,中斷嵌套層數(shù)可達(dá)255層,中斷使用當(dāng)前任務(wù)的堆棧保

支持中斷嵌套,中斷使用專用的堆棧保存上下文;

存上下文;

9.每個(gè)任務(wù)有自己的堆棧,堆棧大小用尸自己設(shè)定;任務(wù)是基于類,對(duì)象的管理方式;

10.支持動(dòng)態(tài)修改任務(wù)優(yōu)先皴:支持動(dòng)態(tài)修改任務(wù)優(yōu)先級(jí):

11.任務(wù)TCB為靜態(tài)數(shù)蛆,建立任務(wù)只是從中茨得一個(gè)TCB,不用動(dòng)態(tài)分

任務(wù)的TCB保存在任務(wù)的堆極里;

配,釋放內(nèi)存;

任務(wù)堆棧為用尸靜態(tài)或者動(dòng)態(tài)創(chuàng)建,在任務(wù)創(chuàng)建外完成,任務(wù)創(chuàng)建本

12.每個(gè)任務(wù)有自己的堆棧,堆枝大小用尸自己設(shè)定;

身不進(jìn)行動(dòng)態(tài)內(nèi)存分配;

13,任務(wù)的總個(gè)數(shù)(OS_MAX_TASKS)由用戶決定;

任務(wù)的優(yōu)先級(jí)從0—255,0優(yōu)先級(jí)最高,允許多個(gè)

14.。優(yōu)先級(jí)最高,63優(yōu)先級(jí)最低;

任務(wù)相同優(yōu)先繳;

15.有一個(gè)優(yōu)先級(jí)最低的空閑任務(wù),在沒有用戶任務(wù)運(yùn)行的時(shí)候運(yùn)行.系統(tǒng)沒有空閑任務(wù)執(zhí)行;

uC/OS-II內(nèi)核架構(gòu)解析(3)-—uC/OS-H系統(tǒng)核心

i.uc/os-n任務(wù)調(diào)度

(1)uC/OS-H調(diào)度算法

UC/OS-II采用基于優(yōu)先級(jí)的調(diào)度算法,總是選擇當(dāng)前處于就緒狀態(tài)的優(yōu)

先級(jí)最高的任務(wù)進(jìn)行調(diào)度。UC/OS-H是可搶占性的強(qiáng)實(shí)時(shí)性O(shè)S,在完成中斷后

允許進(jìn)行新的任務(wù)調(diào)度。

uC/OS-H有兩種調(diào)度方式:任務(wù)級(jí)任務(wù)調(diào)度、中斷級(jí)任務(wù)調(diào)度。

(2)任務(wù)就緒表

INT8UconstOSUnMapTbl[256]=;

OS_EXTINT8UOSRdyGrp;

OS_EXTINT8UOSRdyTbl[OS_RDY_TBL_SIZE]:

添加就緒任務(wù)至就緒表;

從就緒表刪除就緒任務(wù);

查找最高優(yōu)先級(jí)就緒任務(wù)OS_SchedNew():

(3)任務(wù)級(jí)任務(wù)調(diào)度

指在非中斷返回時(shí)進(jìn)行任務(wù)調(diào)度,一般發(fā)生在當(dāng)前任務(wù)因時(shí)間延遲或等待

某事件而阻塞或被掛起,或有更高優(yōu)先級(jí)的任務(wù)處于就緒狀態(tài)。

任務(wù)的基本信息:

CPU的PC寄存器:任務(wù)當(dāng)前執(zhí)行的位置;

CPU的通用寄存器:任務(wù)當(dāng)前執(zhí)行涉及的臨時(shí)數(shù)據(jù);

CPU的狀態(tài)寄存器:存儲(chǔ)當(dāng)前CPU的狀態(tài)。

任務(wù)級(jí)任務(wù)切換:從一個(gè)任務(wù)直接切換至另一個(gè)任務(wù),不涉及CPU狀態(tài)的

切換,OS_TASK_SW()既保存當(dāng)前任務(wù)上下文,又恢復(fù)新任務(wù)上下文。

過程:OS_Sched()->OS_SchedNew()->OS_TASK_SW()

(1)將當(dāng)前任務(wù)的PC位置、通用寄存器數(shù)據(jù)、CPU的狀態(tài)入棧;

(2)修改全局變量OSPrioCur(當(dāng)前任務(wù)優(yōu)先級(jí)變量)的值為全局

變量。SPrioHighRdy(最高優(yōu)先級(jí)任務(wù)優(yōu)先級(jí))的值.即把最高就

緒任務(wù)優(yōu)先級(jí)設(shè)置為新的當(dāng)前任務(wù)優(yōu)先級(jí):

(3)修改原任務(wù)TCB第1個(gè)成員(指向棧頂?shù)闹羔?OSTCBStkPtr)

的值為當(dāng)前SP寄存,以便再次返回;

(4)獲取最高優(yōu)先級(jí)的任務(wù)控制塊中第1個(gè)成員(指向堆棧棧頂指

針*OSTCBStkPtr)的值到sp寄存器;

(5)修改。STCBCur的值為新就緒最高優(yōu)先級(jí)任務(wù)的任務(wù)控制塊地

址;

(6)將新任務(wù)的PC位置、通用寄存器數(shù)據(jù)、CPU的狀態(tài)出棧.開

始執(zhí)行新的任務(wù)。

(4)中斷級(jí)任務(wù)調(diào)度

uC/OS-ll中斷響應(yīng)的過程

(D進(jìn)入中斷,現(xiàn)場(chǎng)保護(hù),保護(hù)當(dāng)前任務(wù)的執(zhí)行位置、寄存

器臨時(shí)數(shù)據(jù)以及CPU狀態(tài);

(2)執(zhí)行系統(tǒng)進(jìn)入中斷處理函數(shù)OSIntEnter。,然后執(zhí)行關(guān)于

此中斷的ISR,根據(jù)不同的中斷執(zhí)行不同的代碼;

(3)執(zhí)行OSIntExit。,如有更高優(yōu)先級(jí)就緒任務(wù),將引發(fā)新

的調(diào)度,否則恢復(fù)現(xiàn)場(chǎng),返回到原任務(wù)位置重新運(yùn)行。

第2步中斷服務(wù)程序是預(yù)先設(shè)置的,如果中斷發(fā)生.系統(tǒng)會(huì)

根據(jù)中斷向量表的入口地址約定轉(zhuǎn)移到該地址開始執(zhí)行。

程序清單L3.18K/os-n中的中斷服務(wù)子程序

用戶中斷服務(wù)子程序:

保存全部CPU寄存器;(1)

謂用OSIntEnter?;騉SIntNesting直接加h(2)

if(OSIntNestingM1){(3)

OSTCBCur7OSTCEStkPtr二S〉(4)

清中斷源;(5)

重新開中斷;⑹

執(zhí)行用戶代碼做中斷服務(wù)I(7)

腳用OSIntBxit(),(8)

恢復(fù)所有CPU寄存器,⑼

執(zhí)行中斷返回指令,U0)

時(shí)向

任務(wù)響應(yīng)時(shí)間倒

BC/OS4I或應(yīng)用程序關(guān)中斷

!?

沒有新的高優(yōu)先級(jí)任務(wù)或

OSLockNesting>C

跳轉(zhuǎn)到相應(yīng)的

中斷向量

(3)■W

保存CPUtf存器恢復(fù)CPU窗存器

⑷(8)

通知內(nèi)核:|通知內(nèi)核遨出中斷服務(wù):OSIntExit()

OSIntEnter()或

用戶ISR代碼(7)

0slmNesting*?

(5)

通知內(nèi)核退出中斷

中斷響應(yīng)

服務(wù):OSIntExftO

(10)

恢復(fù)CPU寄存器

(11)

蜀的島優(yōu)先中斷i&叫

ISR給任務(wù)發(fā)信號(hào)(12p

任務(wù)

A中斷恢復(fù)

I

任務(wù)響廉時(shí)間——

注:在(5)中,以V251算法做移植時(shí),應(yīng)加上:OSTCBCur->OSTCVSt<Ptr=SP.

圖F3.10中斷服務(wù)

中斷級(jí)任務(wù)切換:在中斷處理完成后,通過OSIntExitO判斷是否有更高

優(yōu)先級(jí)就緒任務(wù)。如果有,調(diào)用OSIntCtxSWO恢復(fù)新任務(wù)上下文。注意:在中

斷處理中,已經(jīng)保存了被中斷任務(wù)的上下文,所以這里僅僅恢復(fù)。

過程:OSIntExtO->OSIntEnterO->ISR->OSIntExitO->

OSIntCtxSWO

(5)調(diào)度器上鎖與解鎖

uC/OS-II提供調(diào)度器鎖定功能,在鎖定期間不能進(jìn)行任務(wù)調(diào)度。uC/OS-II

使用全局變量OSLockNesting標(biāo)識(shí)是否鎖定了任務(wù)調(diào)度器。

OS_EXTINT8UOSLockNesting;

voidOSSchedLock(void);

voidOSSchedUnlock(void);

(6)中斷管理函數(shù)

在中斷處理中,不允許進(jìn)行任務(wù)管理、事件管理及任務(wù)調(diào)度等操作。

uC/OS-II通過全局變量OSIntNesting標(biāo)識(shí)當(dāng)前是否處于中斷狀態(tài)。在所有任務(wù)

及事件管理的程序中,都有對(duì)OSIntNesting進(jìn)行判斷的語句。

voidOSIntEnter(void);

voidOSIntExit(void);

voidOSIntExit(void)

#ifOS_CRITICAL_METH8==3

OS_CPU_SRcpu-sr;

#endif

.

OS^ENTER_CRITICAL(),

if(OSRunning==TRUE){

if(OSIntNesting>0){(1:

OSIntNesting-;

)

if((OSIntNesting"0)&&(OSLockNesting?=0))(

OSIntExitY=OSUnMapTbl[OSRdyGrp]1(2:

OSPrioHighRdy=<1NT8O)((OSIntExitY<(3)

4OSUnMapIbl[OSRdyTbl[OSIntExitY]])<

if(OSPrioHighRdyOSPrioCur){

OSTCBHighRdy?OSTCBPrioTbl[OSPrioHighRdyJ?

OSCtxSwCtrX?

gntC-在OSIntCtxSWO中PC會(huì)被賦值,就會(huì)跳轉(zhuǎn)到PC指向的地方執(zhí)行。

如吐;,后面的OS』XI¥RmCALO就沒法執(zhí)行,沒有開中斷,系

統(tǒng)在后面的運(yùn)行過程中又如何響應(yīng)中斷呢?

文口止匕,又文口何體現(xiàn)OS_ENTER_CRITICAL0與OS_EXIT_CRITICAL()的

OSEXITCRIT1CAL(〃配套使用呢?

(7)中斷相關(guān)問題

OS_ENTER_CRITICAL()

OS_EXIT_CRITICAL()

關(guān)中斷使得uC/OS-II能夠同時(shí)避免有其他任務(wù)或中斷服務(wù)進(jìn)入臨界代碼

段。調(diào)用uC/OS-H功能函數(shù)時(shí),中斷總應(yīng)當(dāng)是開著的。

uC/OS-II如何禁止調(diào)度?

在中斷中允許調(diào)度嗎?為什么?

uC/OS-H如何屏蔽中斷?

2.uC/OS-H系統(tǒng)啟動(dòng)

uC/OS-H首先調(diào)用OSInit。進(jìn)行初始化,然后創(chuàng)建任務(wù)(此時(shí)還未啟動(dòng)

系統(tǒng),僅僅為其分配資源),然后調(diào)用OSStartO啟動(dòng)系統(tǒng),將CPU控制權(quán)交給

uC/OS-II,OS根據(jù)任務(wù)優(yōu)先級(jí)選擇由哪個(gè)任務(wù)開始執(zhí)行,或創(chuàng)建新的任務(wù)。

(1)初始化函數(shù)OSInitO

OSInitO主要完成初始化操作,包括初始化全局變量(在OS」nitMisc()

中)、任務(wù)就緒表、TCB、ECB、FCB、內(nèi)存單元、消息隊(duì)列,并創(chuàng)建空閑任務(wù)。

如果有必要,創(chuàng)建統(tǒng)計(jì)任務(wù)。

0S_InitMisc0://初始化部分全局變量

0S_InitRdyList();〃初始化任務(wù)就緒表

OS_InitTCBList();〃初始化空閑TCB鏈袤

0S_InitEventList0;〃初始化ECB鏈表

OS_FlagInit();//初始化事件組標(biāo)志結(jié)構(gòu)

OSGemini10://初始化內(nèi)存管理

OS_QInit()://初始化消息隊(duì)列

0S_InitTaskldle();//創(chuàng)建空閑任務(wù)

0S_InitTaskStat();〃創(chuàng)建統(tǒng)計(jì)任務(wù)

uC/OS-ll全局變量初始化

變量說明初始化值

OSUme32位系統(tǒng)時(shí)鐘變量,標(biāo)識(shí)系統(tǒng)運(yùn)行時(shí)間0

OSIntNesting中斷嵌套次數(shù)0

OSLockNesting調(diào)度器嵌套上鎖次數(shù)0

OSTaskCtr任務(wù)計(jì)數(shù)器,標(biāo)識(shí)系統(tǒng)創(chuàng)健了多少個(gè)任務(wù)n

OSRuiining標(biāo)識(shí)系統(tǒng)內(nèi)核是否運(yùn)行,為TURE標(biāo)識(shí)正在運(yùn)行FALSE

OSCtxSwCtr系統(tǒng)上下文切換次數(shù)0

OSIdleCtr空閑時(shí)間計(jì)數(shù)器0

OSIdleCtrRiui1秒前空閑任務(wù)廿數(shù)器值0

OSIdleCtrNIax1秒內(nèi)空閑任務(wù)廿數(shù)器可達(dá)的最大值0

OSStatRdy統(tǒng)計(jì)任務(wù)標(biāo)識(shí),即是否執(zhí)行統(tǒng)計(jì)任務(wù)FALSE

uc/os-n初始化了5個(gè)空的數(shù)據(jù)結(jié)構(gòu)緩沖區(qū),每個(gè)緩沖區(qū)都是單向鏈表,

允許uC/OS-II從緩沖區(qū)中迅速取得或釋放一個(gè)緩沖區(qū)中的元素。

0S.TC8OS.TCBOS-TCBOSTCB

OSTCBNrxt--OSTCBNext?■OSTCBNext——0

OSTCBReeLisK^

OS_EVENTOS_EVEMTOS.EVENTOS.EVENT

OSFvenlPfr.□SEventPtr■OSFv^ntPlr?OSEventPtr.Q

OSEventFreeLisT

OS_QOS_QOS_Qosg

OSOPtr.今DSOPtr'■OSQPlr?-0

OSQFreeds、.

OSFLAG_QRPOS.FIAG.QRPOS_FLAG_QRPOS_FLAG_QRP

OSFIagRreeL^^

OS_MEMOS.MEMOS_MEMOSMEM

OSMemF*Mbst>…

OSMerTFreeL),OSlHemFnEeLisl-?QSMemFfOOl于??

SFJ.12空閑援沖港

uC/OS-II調(diào)用OSInitO后的變量與數(shù)據(jù)結(jié)構(gòu)如下圖所示:

?.父外—/

.uHiqhRdy

lX?TCKuiNUM.

?MJLL

?EK-VL

DSIrWZ.”Q-“

“SLxkYz,八,3-V

,jCClx£*Cit?D

?2

?>St\unn.rM,F(xiàn)AFP

OSCPivsaa*?h

-

?“L

?(11

CSM”,Rdy-FAi?fi£

nSlntE??tV-Il

OS_Taskstat()MOS_TCBOS.TaskkileOffiOSJCB

(2)

(1)

(3)

任務(wù)怫

任務(wù)棧?

(2)啟動(dòng)函數(shù)OSStartO

OSStartO在?切準(zhǔn)備就緒且需要首先創(chuàng)建的任務(wù)都被創(chuàng)建后,啟動(dòng)

uC/OS-H。它從就緒表中查找最高優(yōu)先級(jí)就緒任務(wù),并恢復(fù)其上下文開始執(zhí)行。

過程:OSStart()->OS_SchedNew()->OSStartHighRdy()

問題:任務(wù)第一次被調(diào)用時(shí),哪來的上下文供其恢復(fù)呢?創(chuàng)建任務(wù)時(shí),調(diào)

用了OSTaskStklnitO初始化任務(wù)堆棧,可此函數(shù)中沒有涉及任務(wù)的上下文呀?

uC/OS-H調(diào)用OSStart()后的變量和數(shù)據(jù)結(jié)構(gòu)如下圖所示:

OSTCBPrioTbl[]XKSai??

□STUa?(4

*c

j.LocaL-9

aJ

-,

oflUMlng?HWB

O?eruDaave?0

OSl4)?C<ma??

O4tdl?C*rBMn?9t?

?3L

-FALSt

GiJoWiltT?)

第l個(gè)應(yīng)用Ta$k()的OS_TCBOS_Taskstat()ff*JOS_TC8OS_Taskkile()ffjOS_TCB

OUTCBLilt

任務(wù)棧

任務(wù)棧

任務(wù)棧

圖F3.13調(diào)用OSStart()以后的變■與裁據(jù)結(jié)構(gòu)

(3)統(tǒng)計(jì)任務(wù)OSTaskStat

OSTaskStat用于計(jì)算CPU利用率。設(shè)置OS_CFG.H中的OS_TASK_STAT_EN

為1,創(chuàng)建統(tǒng)計(jì)任務(wù),在系統(tǒng)啟動(dòng)后一直處于就緒狀態(tài)。剛開始時(shí),空閑任務(wù)運(yùn)

行1S,為計(jì)算CPU利用率提供一個(gè)基準(zhǔn)值,并保存在統(tǒng)計(jì)任務(wù)的堆棧中,這個(gè)

值不會(huì)改變除非重新啟動(dòng)CPU。此后空閑任每次被其它任務(wù)搶去CPU時(shí),它里面

的計(jì)數(shù)器就會(huì)直接記錄下CPU空閑的時(shí)間。

3.uC/OS-H系統(tǒng)時(shí)鐘

任何實(shí)時(shí)系統(tǒng)的時(shí)鐘硬件設(shè)備每隔?段時(shí)間(一個(gè)系統(tǒng)tick)產(chǎn)生一個(gè)

硬件中斷,OS接收到該中斷后,更新時(shí)間計(jì)數(shù)器,更新所有對(duì)時(shí)鐘依賴的程序

代碼,從而維持系統(tǒng)有序穩(wěn)定的運(yùn)行。

主要包含在C源文件OS_TIME.C中。

^defineOS_TICKS_PER_SEC100//系統(tǒng)時(shí)鐘中斷間隔

OSEXTvolatileINT32UOSTime;〃系統(tǒng)運(yùn)行的時(shí)間值

voidOSTimeTick(void);//時(shí)鐘中斷服務(wù)程序

voidOSTimeDly(INT16Uticks);〃延遲指定時(shí)鐘節(jié)拍

INT8UOSTimeDlyHMSM(…);//延遲指定時(shí)間長(zhǎng)度

INT8UOSTimeDlyResume(prio);//恢復(fù)等待(時(shí)延/阻塞)任務(wù)

INT32UOSTimeGet(void);〃讀取當(dāng)前時(shí)間

void0STimeSet(INT32Uticks);//設(shè)置當(dāng)前時(shí)間

4.uC/OS-H事件管理

(1)事件控制塊

INT8UOSEventType;//事件類型

void*OSEventPtr;//指向MBox或

Queue

INT16U0SEventCnt;//信號(hào)量計(jì)數(shù)器(注:

Mutex)

INT8UOSEventGrp;//事件等待組標(biāo)志

INTSUOSEventTbl[];//時(shí)間任務(wù)等待表

INT8UOSEventNameH;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論