<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > VxWorks下的任務(wù)監控方法及應用

VxWorks下的任務(wù)監控方法及應用

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

1 交叉開(kāi)發(fā)模式
軟件開(kāi)發(fā)時(shí)采用交叉開(kāi)發(fā)模式,宿主機通常是普通的PC機,目標機就是程序真實(shí)的運行的硬件平臺;集成開(kāi)發(fā)環(huán)境Tornado位于宿主機,用戶(hù)通過(guò)Tornado開(kāi)發(fā)環(huán)境完成代碼編寫(xiě)、編譯、鏈接,宿主機與目標機通過(guò)分別位于其上的Target Server和Target Agent實(shí)現信息交互,物理連接往往是串口或者網(wǎng)絡(luò ),在開(kāi)發(fā)調試過(guò)程中,用戶(hù)將編譯鏈接后的目標代碼通過(guò)Target Server加載到目標機上運行,可以通過(guò)Tornado下的Shell、Debugger、Browser以及Windview等工具目標機上程序的運行情況,應用程序使用printf語(yǔ)句打印的調試信息回送到宿主機,借助打印信息和Tornado提供的各種調試工具,開(kāi)發(fā)者可以的運行情況,當某個(gè)出錯時(shí),可以通過(guò)各種輸出信息分析問(wèn)題原因。
但是一旦完成開(kāi)發(fā)投入實(shí)際試驗使用, 由于實(shí)際使用環(huán)境和當初的開(kāi)發(fā)調試環(huán)境有較大的區別,難免會(huì )出現各種異常情況,比較常見(jiàn)的異常就是任務(wù)掛起,在這種情況下開(kāi)發(fā)者往往無(wú)法像在地面調試時(shí)那樣可以外接調試電纜捕獲異常信息, 以確定發(fā)生異常的任務(wù),也無(wú)法捕獲開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中的輔助打印信息,這種情況在戰斗機機載軟件尤為常見(jiàn)?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/VxWorks">的應用軟件大多采用多任務(wù)方式,無(wú)法像以前沒(méi)有操作系統的系統那樣,通過(guò)硬件看門(mén)狗電路,在軟件運行出錯時(shí)自動(dòng)重啟恢復軟件運行,一個(gè)任務(wù)出錯往往并不會(huì )引起操作系統重啟,用戶(hù)通過(guò)上層很難判斷應用軟件運行是否正常。因此需要建立軟件看門(mén)狗機制,任務(wù)運行情況,在出現異常時(shí)記錄必要的異常信息,自動(dòng)重啟設備。同時(shí),需像開(kāi)發(fā)階段那樣記錄輸出信息,以輔助分析異常原因。

本文引用地址:http://dyxdggzs.com/article/152589.htm

2 系統輸出信息捕獲
在VxWorks下系統輸出信息包括:標準輸出(STD_OUT,文件描述為1)和標準錯誤輸出(STD_ERR,文件描述為2)。使用printf、IogMsg語(yǔ)句等輸出的信息,以及用戶(hù)和操作系統其他的打印輸出信息均通過(guò)STD_OUT輸出,而STD_ERR則是在系統出錯時(shí)使用,例如:
data access
Exception current instruction address:0x00072054
Machine Status Register:0x0000b030
Data Access Register:0xeeeeeef2
Condition Register:0x22000040
Data storage interrupt Register:0x0000b030
Task:0x1c9e50 RadarProc
上面的打印信息是任務(wù)“RadarProc”出錯時(shí)操作系統輸出的錯誤信息,通過(guò)STD_ERR文件描述符輸出的。
STD_OUT和STD_ERR可以分別輸出,但是通常情況下它們均定向到控制臺(consoleFd),即在交叉開(kāi)發(fā)模式下通過(guò)目標機Target Agent和宿主機的Target Server輸出到串口或者網(wǎng)絡(luò )。在VxWorks下操作系統提供ioGIobalStdSet接口函數支持輸出重定向,函數原型:
void ioGIobaIStdSet(int stdFd,int newFd)
其中stdFd為STD_OUT(1)或者STD_ERR(2),newFd為重定向的文件描述符。利用這個(gè)函數就可以實(shí)現系統輸出信息的捕獲,具體如下:
FILE* printf_stream = fopen(/ide0/log.txt,a+ ):
ioGlobalStdSet(STD_OUT,fileno(printf_stream));
ioGlobalStdSet(STD_ERR,fileno(printf_stream));
在上面的代碼中,在設備/ide0(電子盤(pán))上打開(kāi)名為log.txt的文件,打開(kāi)方式為追加式,將STD_OUT和STD_ERR重定向到printf_stream 指向的文件。需要注意的是,不能像平常那樣關(guān)閉printf_stream 文件指針,這樣就可以將系統的所有輸出信息保存在文件log.txt中。

3 任務(wù)監控
3.1任務(wù)狀態(tài)
VxWorks下任務(wù)有四種基本狀態(tài):READY、PEND、DELAY、SUSPEND,在用戶(hù)不使用Shell命令人為改變任務(wù)狀態(tài)前提下,如果狀態(tài)中出現SUSPEND,就說(shuō)明該任務(wù)已經(jīng)出錯。

3.2任務(wù)監控設計
任務(wù)監控需要周期性的監測操作系統中所有運行的任務(wù)狀態(tài),發(fā)現某任務(wù)出錯時(shí)記錄任務(wù)的相關(guān)基本信息,并自動(dòng)重啟。任務(wù)監控必須兩個(gè)操作系統接口函數:
int taskIdListGet(int idList[],int maxTasks)
STATUS taskStatusString(int tid,char* pString)
taskIdListGet函數可以獲得當前操作系統中運行的所有任務(wù),idList存放獲取的任務(wù)id的數組,maxTasks為數組大小。taskStatusString獲取任務(wù)狀態(tài)名稱(chēng),tid是任務(wù)id,pString為任務(wù)狀態(tài)名稱(chēng)。
在發(fā)現時(shí)任務(wù)出錯時(shí)通過(guò)回調函數告訴用戶(hù)出錯任務(wù)情況,出錯任務(wù)數據結構:
struct TroubleTaskStruct
{
int taskID;//出錯任務(wù)id
char taskName[256];//任務(wù)名稱(chēng)
char taskState[32];//任務(wù)狀態(tài)
};
回調函數原型:
typedef void (*TroubleTaskFuncPtr)(const TroubleTaskStruct troubleTaskVector,int troubleTaskNum);

4 結束語(yǔ)
系統應用軟件完成開(kāi)發(fā)調試后,在隨后的試驗階段很難象調試階段那樣得到任務(wù)狀態(tài)等輸出信息,一旦出現任務(wù)異常,因為缺乏發(fā)生異常時(shí)的相關(guān)信息,很難判斷和分析問(wèn)題,給解決問(wèn)題帶來(lái)很大難度,使用任務(wù)監控和系統信息捕獲技術(shù)可以有效地解決此類(lèi)問(wèn)題。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>