新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式的地鐵雜散電流監(jiān)測(cè)裝置的設(shè)計(jì)

基于嵌入式的地鐵雜散電流監(jiān)測(cè)裝置的設(shè)計(jì)

作者: 時(shí)間:2009-05-21 來(lái)源:網(wǎng)絡(luò) 收藏

本文引用地址:http://2s4d.com/article/152477.htm

可以看到,傳統(tǒng)的程序是單任務(wù)機(jī)制的,各個(gè)模塊構(gòu)成一個(gè)整體,作為一個(gè)任務(wù)運(yùn)行。在實(shí)際應(yīng)用中,這種程序的安全性差,只要一個(gè)系統(tǒng)的模塊出了錯(cuò)誤,整個(gè)系統(tǒng)工作就會(huì)被打亂,只有利用看門狗進(jìn)行復(fù)位。這對(duì)于比較復(fù)雜的系統(tǒng),在實(shí)際運(yùn)行中看門狗就會(huì)頻繁地發(fā)生復(fù)位操作。而且由于數(shù)據(jù)采集和鍵盤程序的執(zhí)行頻率可能相差很多,這樣對(duì)系統(tǒng)的定時(shí)要求就會(huì)很高,傳統(tǒng)的程序流程對(duì)實(shí)時(shí)性就難以很好地滿足。
3.3.2  ucosII 的系統(tǒng)程序流程
ucosII 的程序流程如圖4所示。程序中,每個(gè)模塊對(duì)應(yīng)一個(gè)任務(wù),彼此之間是并行的,但每個(gè)模塊都對(duì)應(yīng)著一個(gè)不同的優(yōu)先級(jí),由進(jìn)行調(diào)度運(yùn)行。系統(tǒng)可以通過監(jiān)控模塊對(duì)其他模塊的工作進(jìn)行監(jiān)控,從而減少看門狗的復(fù)位次數(shù)。而且通過ucosII 內(nèi)核的任務(wù)調(diào)度,系統(tǒng)的實(shí)時(shí)性會(huì)提高很多。

3. 4 任務(wù)的劃分和構(gòu)成
系統(tǒng)中并行存在的幾個(gè)任務(wù)按優(yōu)先級(jí)從高到低依次是:顯示任務(wù)、鍵盤管理任務(wù)、輸出任務(wù)、各路數(shù)據(jù)數(shù)據(jù)采集任務(wù)和數(shù)據(jù)處理任務(wù)。系統(tǒng)采用靜態(tài)優(yōu)先級(jí),這樣系統(tǒng)的控制會(huì)相對(duì)比較簡(jiǎn)單。
系統(tǒng)中的每個(gè)任務(wù)包括應(yīng)用程序、任務(wù)堆棧以及任務(wù)控制塊( TCB) 三部分。任務(wù)控制塊是一個(gè)數(shù)據(jù)結(jié)構(gòu),當(dāng)任務(wù)的CPU 使用權(quán)被剝奪時(shí),ucosII 用它來(lái)保存該任務(wù)的狀態(tài)。當(dāng)任務(wù)重新獲得CPU 的使用權(quán)時(shí),任務(wù)控制塊能確保任務(wù)從被中斷的那一點(diǎn)執(zhí)行下去。可以通過查詢?nèi)蝿?wù)控制塊的內(nèi)容從而對(duì)任務(wù)進(jìn)行管理。系統(tǒng)中任務(wù)的狀態(tài)有5 種:休眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、中斷服務(wù)和等待態(tài)。狀態(tài)之間的轉(zhuǎn)換如圖5所示。

休眠態(tài)時(shí)任務(wù)駐留在程序空間中,還沒有交給uc/ os2II 管理。當(dāng)任務(wù)一旦建立,就進(jìn)入就緒態(tài)。就緒態(tài)中優(yōu)先級(jí)最高的任務(wù)轉(zhuǎn)為運(yùn)行態(tài)。如果系統(tǒng)的運(yùn)行導(dǎo)致就緒態(tài)中的一個(gè)任務(wù)優(yōu)先級(jí)高于運(yùn)行態(tài)的任務(wù)優(yōu)先級(jí),則系統(tǒng)通過調(diào)度使運(yùn)行態(tài)任務(wù)喪失對(duì)CPU 的控制權(quán)轉(zhuǎn)為等待態(tài)或者就緒態(tài),轉(zhuǎn)而運(yùn)行就緒態(tài)中的那個(gè)任務(wù)。這樣就實(shí)現(xiàn)了任務(wù)的切換。
每個(gè)處于等待態(tài)的任務(wù)都對(duì)應(yīng)一個(gè)等待時(shí)間,時(shí)間管理函數(shù)可將等待時(shí)間已過的等待態(tài)的任務(wù)轉(zhuǎn)為就緒態(tài),這實(shí)際上也就是時(shí)鐘中斷的中斷服務(wù)程序。
3.5 任務(wù)的通信和調(diào)度
本系統(tǒng)中任務(wù)間的通信采用消息隊(duì)列來(lái)完成的。消息隊(duì)列是uc/ os2II 中的一種通信機(jī)制,可以使一個(gè)任務(wù)或者中斷服務(wù)子程序向另一任務(wù)發(fā)送以指針方式定義的變量。為方便易用,采用消息隊(duì)列,用于數(shù)據(jù)采集任務(wù)、數(shù)據(jù)處理任務(wù)、鍵盤管理任務(wù)、輸出任務(wù)、顯示任務(wù)之間的通信。系統(tǒng)通過隊(duì)列控制塊來(lái)管理消息隊(duì)列,每個(gè)消息隊(duì)列對(duì)應(yīng)一個(gè)隊(duì)列控制塊。消息的存取基于優(yōu)先級(jí)原則,隊(duì)列控制塊中等待任務(wù)列表內(nèi)優(yōu)先級(jí)任務(wù)最高的任務(wù)先從消息隊(duì)列中取消息,系統(tǒng)采用搶占式內(nèi)核,調(diào)度函數(shù)總是保證優(yōu)先級(jí)最高的就緒態(tài)任務(wù)轉(zhuǎn)為運(yùn)行態(tài)。當(dāng)就緒態(tài)的任務(wù)搶占CPU 時(shí),系統(tǒng)執(zhí)行一次中斷服務(wù)程序。當(dāng)任務(wù)中的消息發(fā)送完成以及中斷返回時(shí),系統(tǒng)調(diào)用調(diào)度函數(shù),將任務(wù)從等待態(tài)轉(zhuǎn)為就緒態(tài),這樣就緒態(tài)中任務(wù)的最高優(yōu)先級(jí)就會(huì)發(fā)生變化,進(jìn)而影響到運(yùn)行態(tài)和就緒態(tài)間的任務(wù)切換。在本系統(tǒng)中,正在運(yùn)行的任務(wù)需要通過消息(調(diào)用OSQPEND( ) 函數(shù)) 來(lái)等待一個(gè)事件的發(fā)生。假如該事件一直沒有出現(xiàn),調(diào)用該函數(shù)的任務(wù)將被置于等待狀態(tài)(優(yōu)先級(jí)最低的任務(wù)可不需要等待某個(gè)消息) 。此時(shí)下一個(gè)優(yōu)先級(jí)最高的任務(wù)將立即獲得CPU 控制權(quán)。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

基爾霍夫電流相關(guān)文章:基爾霍夫電流定律




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉