《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > VxWorks下的任務監(jiān)控方法及應用
VxWorks下的任務監(jiān)控方法及應用
嵌入式在線
摘要: VxWorks下的任務監(jiān)控方法及應用,1 VxWorks交叉開發(fā)模式 在VxWorks下應用軟件開發(fā)時采用交叉開發(fā)模式,宿主機通常是普通的PC機,目標機就是應用程序真實的運行的硬件平臺;集成開發(fā)環(huán)境Tornado位于宿主機,用戶通過Tornado開發(fā)環(huán)境完成代碼編寫
Abstract:
Key words :

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

2 系統(tǒng)輸出信息捕獲
    在VxWorks下系統(tǒng)輸出信息包括:標準輸出(STD_OUT,文件描述為1)和標準錯誤輸出(STD_ERR,文件描述為2)。使用printf、IogMsg語句等輸出的信息,以及用戶和操作系統(tǒng)其他的打印輸出信息均通過STD_OUT輸出,而STD_ERR則是在系統(tǒng)出錯時使用,例如:
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"
    上面的打印信息是任務“RadarProc”出錯時操作系統(tǒng)輸出的錯誤信息,通過STD_ERR文件描述符輸出的。
    STD_OUT和STD_ERR可以分別輸出,但是通常情況下它們均定向到控制臺(consoleFd),即在交叉開發(fā)模式下通過目標機Target Agent和宿主機的Target Server輸出到串口或者網絡。在VxWorks下操作系統(tǒng)提供ioGIobalStdSet接口函數(shù)支持輸出重定向,函數(shù)原型:
void ioGIobaIStdSet(int stdFd,int newFd)
    其中stdFd為STD_OUT(1)或者STD_ERR(2),newFd為重定向的文件描述符。利用這個函數(shù)就可以實現(xiàn)系統(tǒng)輸出信息的捕獲,具體方法如下:
FILE* printf_stream = fopen("/ide0/log.txt","a+" ):
ioGlobalStdSet(STD_OUT,fileno(printf_stream));
ioGlobalStdSet(STD_ERR,fileno(printf_stream));
    在上面的代碼中,在設備/ide0(電子盤)上打開名為log.txt的文件,打開方式為追加式,將STD_OUT和STD_ERR重定向到printf_stream 指向的文件。需要注意的是,不能像平常那樣關閉printf_stream 文件指針,這樣就可以將系統(tǒng)的所有輸出信息保存在文件log.txt中。

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

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

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

此內容為AET網站原創(chuàng),未經授權禁止轉載。
主站蜘蛛池模板: 对白脏话肉麻粗话视频| 欧美日韩综合在线视频免费看 | 欧美人与物videos另类xxxxx| 可以免费看黄的网站| 成人午夜性视频欧美成人| 大陆三级理论电影有哪些| 久久www成人看片| 欧美乱大交xxxxx| 亲子乱子xxxxxx| 羞羞答答xxdd影院欧美| 国产成人无码一区二区在线播放| 99久久精品免费看国产| 成人免费观看视频高清视频| 久久精品久久久久观看99水蜜桃| 欧美日韩一区二区不卡三区| 免费看AV毛片一区二区三区| 芭蕉私人影院在线观看| 国产日韩一区二区三区在线观看 | 欧美性猛交xxxx乱大交3| 免费的毛片视频| 色资源二区在线视频| 国产激情一区二区三区| 99在线观看视频免费精品9| 成人中文乱幕日产无线码| 久久精品亚洲综合一品| 欧美性受xxxx| 亚洲色偷偷偷综合网| 精品国产免费一区二区| 国产丰满麻豆vⅰde0sex| 免费福利在线观看| 国内精品免费视频自在线| 一本一道久久a久久精品综合| 日本三级s电影| 亚洲色成人WWW永久在线观看| 色三级大全高清视频在线观看| 国产欧美一区二区| 80s国产成年女人毛片| 天天做.天天爱.天天综合网| 一级片在线免费看| 无码精品一区二区三区免费视频 | www.青青草|