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

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

嵌入式系統(tǒng)——基礎知識

操作系統(tǒng)OS

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

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

可將OS看成是應用程序與硬件間的接口或虛擬機。

OS功能:進程管理、存儲管理、文件管理、設備管理、網(wǎng)絡和通信管理

等。

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

運行在嵌入式硬件平臺上,對整個系統(tǒng)及其所操作的部件裝置等資源進行

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

EOS特點:微型化、可裁剪性、實時性、高可靠性、易移植性

重點關注:高實時性、硬件相關依賴性、軟件固化、應用專用性、網(wǎng)絡功

能。

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

能使計算機及時響應外部事件請求,并能及時控制所有實時設備與實時任

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

RTOS基本要求:

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

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

RTOS應滿足條件:

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

2、任務的切換時間應與系統(tǒng)中的任務書無關;

3、中斷延時的時間可預知并盡可能短。

無論在什么情況下,OS完成任務所需的時間應該是在程序設計時就可預

知的。

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

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

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

件。

ERTOS最重要的三項服務:

1、多任務管理

2、內(nèi)存管理

3、外圍資源管理

嵌入式微處理器(特點)

1、對實時多任務OS有很強的支持能力;

2、具有功能很強的存儲區(qū)域保護功能;

3、處理器結構可擴展;

4、低功耗;

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

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

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

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

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

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

高,使得以往單一功能的設備功能不再單一,結構更加復雜;

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

口);

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

5、提供友好的多媒體人機界面。

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

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

1、專用性強;2、可裁剪性;3、實時性與可靠性;

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

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

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

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

總體。

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

軟件:RTOS及其上運行的應用軟件。

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

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

多數(shù)嵌入式設備的應用軟件和OS緊密結合。

嵌入式軟件體系結構

1、無OS情形

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

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

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

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

foreground(前臺程序:事件處理級程序):中斷服務程序ISR,處理

異步事件;

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

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

2、有OS情形

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

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

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

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

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

即OS的各種特性及其相互間的依賴關系。(任務管理、存儲管理、文件管理、

設備管理、網(wǎng)絡管理)

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

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

2、按“響應時間”分類:RTOS、非RTOS;

3、按“軟件結構”分類:單體結構、分層結構、微內(nèi)核結構;

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

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

(1)單體結構(eg:linux):在單體結構的OS中,中間件和設備驅(qū)動程

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

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

優(yōu)點:性能較好,系統(tǒng)各模塊間可以相互調(diào)用,通信開銷小;

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

困難。

(2)分層結構:在分層結構中,一個OS被劃分為若干個層次,各層間的

調(diào)用關系是單向的。分層結構的OS也只有一個大的可執(zhí)行文件,包含設備驅(qū)動

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

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

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

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

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

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

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

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

且控制權可知;

2、調(diào)度策略分析:(強實時、弱實時)

3、任務優(yōu)先級分配:(靜態(tài)優(yōu)先級、動態(tài)優(yōu)先級)

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

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

間可預測。

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

6、中斷響應時間:在先占式內(nèi)核中,中斷響應時間=關中斷最長時間+保

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

指令的時間;

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

8、任務執(zhí)行時間的抖動

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

然耦合、頻率組合)

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

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

b'JIJftU河/:(Application)

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

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

板級支持包——

固件

硬件層

2.RTOS設計原則

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

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

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

能得到滿足。

3.GPOS與RTOS

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

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

的可預測性(predictability)□

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

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

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

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

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

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

c)中斷處理方式不同;

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

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

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

輪流處理各事件,對時間響應要求高的異步事件采用中斷進行處理。

基于任務(進程)的軟件設計方法:使用OS,由OS管理硬件資源,任務

只是在需要資源時申請即可,至于when/which,完全由OS決定。

5.(不)可重入

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

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

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

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

量,則要對全局變量予以保護。

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

6.互斥條件

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

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

(1)關中斷

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

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

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

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

序中關中斷做TAS操作再開中斷。

(3)禁止做任務切換

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

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

(4)利用信號量;

7.臨界狀態(tài)

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

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

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

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

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

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

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

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

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

1.uC/OS-H文件結構

應用軟件

(用戶代四)

Mc/os-n■cosn配■文件

(與處理?類變無關的代碼)(與應用程序不關)

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

(與處理韻類型,關的代碼》

OS_CPU.HChapters14,15

OS_CPU_A.ASMChapters14,15

OS_CPU_C.CChapters14,15

軟件

CPU

2.uC/OS-II組成部分

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在uc/os-n中,一個任務就是一個線程,該任務可以認為CPU完全屬于

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

處于睡眠、就緒、運行、等待或中斷服務狀態(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任務的狀態(tài)

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

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

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

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

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

任務;

3.每個任務優(yōu)先級都不相同.

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

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

6.支持時鐘節(jié)拍;通過編譯開關實現(xiàn)對多cpu體系結構的支持.

7.支持信號量,消息隊列,事件控制塊,事件標志組,消息郵箱任務通訊

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

機制;

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

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

存上下文;

9.每個任務有自己的堆棧,堆棧大小用尸自己設定;任務是基于類,對象的管理方式;

10.支持動態(tài)修改任務優(yōu)先皴:支持動態(tài)修改任務優(yōu)先級:

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

任務的TCB保存在任務的堆極里;

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

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

12.每個任務有自己的堆棧,堆枝大小用尸自己設定;

身不進行動態(tài)內(nèi)存分配;

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

任務的優(yōu)先級從0—255,0優(yōu)先級最高,允許多個

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

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

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

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

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

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

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

先級最高的任務進行調(diào)度。UC/OS-H是可搶占性的強實時性OS,在完成中斷后

允許進行新的任務調(diào)度。

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

(2)任務就緒表

INT8UconstOSUnMapTbl[256]=;

OS_EXTINT8UOSRdyGrp;

OS_EXTINT8UOSRdyTbl[OS_RDY_TBL_SIZE]:

添加就緒任務至就緒表;

從就緒表刪除就緒任務;

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

(3)任務級任務調(diào)度

指在非中斷返回時進行任務調(diào)度,一般發(fā)生在當前任務因時間延遲或等待

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

任務的基本信息:

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

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

CPU的狀態(tài)寄存器:存儲當前CPU的狀態(tài)。

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

切換,OS_TASK_SW()既保存當前任務上下文,又恢復新任務上下文。

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

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

(2)修改全局變量OSPrioCur(當前任務優(yōu)先級變量)的值為全局

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

緒任務優(yōu)先級設置為新的當前任務優(yōu)先級:

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

的值為當前SP寄存,以便再次返回;

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

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

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

址;

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

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

(4)中斷級任務調(diào)度

uC/OS-ll中斷響應的過程

(D進入中斷,現(xiàn)場保護,保護當前任務的執(zhí)行位置、寄存

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

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

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

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

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

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

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

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

用戶中斷服務子程序:

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

謂用OSIntEnter。或OSIntNesting直接加h(2)

if(OSIntNestingM1){(3)

OSTCBCur7OSTCEStkPtr二S〉(4)

清中斷源;(5)

重新開中斷;⑹

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

腳用OSIntBxit(),(8)

恢復所有CPU寄存器,⑼

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

時向

任務響應時間倒

BC/OS4I或應用程序關中斷

!?

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

OSLockNesting>C

跳轉(zhuǎn)到相應的

中斷向量

(3)■W

保存CPUtf存器恢復CPU窗存器

⑷(8)

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

OSIntEnter()或

用戶ISR代碼(7)

0slmNesting*?

(5)

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

中斷響應

服務:OSIntExftO

(10)

恢復CPU寄存器

(11)

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

ISR給任務發(fā)信號(12p

任務

A中斷恢復

I

任務響廉時間——

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

圖F3.10中斷服務

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

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

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

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

OSIntCtxSWO

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

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

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

OS_EXTINT8UOSLockNesting;

voidOSSchedLock(void);

voidOSSchedUnlock(void);

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

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

uC/OS-II通過全局變量OSIntNesting標識當前是否處于中斷狀態(tài)。在所有任務

及事件管理的程序中,都有對OSIntNesting進行判斷的語句。

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會被賦值,就會跳轉(zhuǎn)到PC指向的地方執(zhí)行。

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

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

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

OSEXITCRIT1CAL(〃配套使用呢?

(7)中斷相關問題

OS_ENTER_CRITICAL()

OS_EXIT_CRITICAL()

關中斷使得uC/OS-II能夠同時避免有其他任務或中斷服務進入臨界代碼

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0S_InitEventList0;〃初始化ECB鏈表

OS_FlagInit();//初始化事件組標志結構

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

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

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

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

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

變量說明初始化值

OSUme32位系統(tǒng)時鐘變量,標識系統(tǒng)運行時間0

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

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

OSTaskCtr任務計數(shù)器,標識系統(tǒng)創(chuàng)健了多少個任務n

OSRuiining標識系統(tǒng)內(nèi)核是否運行,為TURE標識正在運行FALSE

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

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

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

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

OSStatRdy統(tǒng)計任務標識,即是否執(zhí)行統(tǒng)計任務FALSE

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

允許uC/OS-II從緩沖區(qū)中迅速取得或釋放一個緩沖區(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ù)結構如下圖所示:

?.父外—/

.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)

任務怫

任務棧?

(2)啟動函數(shù)OSStartO

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

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

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

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

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

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

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個應用Ta$k()的OS_TCBOS_Taskstat()ff*JOS_TC8OS_Taskkile()ffjOS_TCB

OUTCBLilt

任務棧

任務棧

任務棧

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

(3)統(tǒng)計任務OSTaskStat

OSTaskStat用于計算CPU利用率。設置OS_CFG.H中的OS_TASK_STAT_EN

為1,創(chuàng)建統(tǒng)計任務,在系統(tǒng)啟動后一直處于就緒狀態(tài)。剛開始時,空閑任務運

行1S,為計算CPU利用率提供一個基準值,并保存在統(tǒng)計任務的堆棧中,這個

值不會改變除非重新啟動CPU。此后空閑任每次被其它任務搶去CPU時,它里面

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

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

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

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

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

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

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

OSEXTvolatileINT32UOSTime;〃系統(tǒng)運行的時間值

voidOSTimeTick(void);//時鐘中斷服務程序

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

INT8UOSTimeDlyHMSM(…);//延遲指定時間長度

INT8UOSTimeDlyResume(prio);//恢復等待(時延/阻塞)任務

INT32UOSTimeGet(void);〃讀取當前時間

void0STimeSet(INT32Uticks);//設置當前時間

4.uC/OS-H事件管理

(1)事件控制塊

INT8UOSEventType;//事件類型

void*OSEventPtr;//指向MBox或

Queue

INT16U0SEventCnt;//信號量計數(shù)器(注:

Mutex)

INT8UOSEventGrp;//事件等待組標志

INTSUOSEventTbl[];//時間任務等待表

INT8UOSEventNameH;

溫馨提示

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

最新文檔

評論

0/150

提交評論