機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
基于VxWorks的產(chǎn)品映象設(shè)計
基于VxWorks的產(chǎn)品映象設(shè)計
 更新時間:2009-6-4 10:14:06  點擊數(shù):1
【字體: 字體顏色
摘 要: 本文分析了VxWorks的映象特點,設(shè)計了幾種VxWorks下產(chǎn)品映象的構(gòu)造方案,并指出了這些構(gòu)造設(shè)計的應(yīng)用場合。
關(guān)鍵詞: VxWorks;映象;啟動代碼
VxWorks是目前占壟斷地位的實時操作系統(tǒng),在許多領(lǐng)域獲得廣泛應(yīng)用,但其產(chǎn)品映象設(shè)計卻一直是令設(shè)計工程師頭疼的問題。本文在實踐驗證的基礎(chǔ)上,討論了基于VxWorks操作系統(tǒng)上的產(chǎn)品映象設(shè)計技術(shù),具有很強的實用性。

VxWorks的映象分析
VxWorks 映象內(nèi)容包括:代碼段(Text segment)、數(shù)據(jù)段(Data Segment)和符號起始塊段(BSS Segment)。其中,代碼段指可執(zhí)行的指令集合;數(shù)據(jù)段指已經(jīng)初始化的全局和靜態(tài)變量;符號起始塊段是未初始化的全局和靜態(tài)變量,ANSI C/C++中要求這些變量初始化為零。
VxWorks映象按類型分為:可下載的映象(Loadable images)、基于ROM的映象(ROM-based images)和ROM駐留映象(ROM-Resident images)三種。Loadable images一般用于調(diào)試,ROM或Flash中的啟動代碼BSP打通調(diào)試通道后,將其從PC機上裝入RAM運行。ROM-based images整個映象在ROM或Flash中,由BSP從ROM或Flash中裝載整個映象到RAM中運行,并分為壓縮和非壓縮方式。ROM- resident images則只拷貝VxWorks的data和bss部分到RAM中運行,運行效率低。

基于VxWorks的產(chǎn)品映象設(shè)計
本文bootable VxWorks映象即為ROM-based images,downloadable應(yīng)用模塊對應(yīng)Loadable images。VxWorks最終產(chǎn)品映象一般燒錄在Flash中,但由于Flash容量有限,并且為了動態(tài)更換程序方便,有時需要使用兩片F(xiàn)lash。其中,第一片小容量的Flash僅作為啟動和下載程序功能,采用插件式,以便替換;第二片大容量的Flash存放用戶應(yīng)用代碼,多采用貼片方式。具體 VxWorks的產(chǎn)品映象構(gòu)造可使用以下四種技術(shù)方案。
方案一
Flash中存放BOOT+OS+ APPLICATION代碼(Tornado圖形環(huán)境下選項為bootable映象,rules=VxWorks_rom)。
在Flash 中的 BOOT啟動后,就將OS裝入RAM,跳到OS入口點,OS執(zhí)行,并由OS最終調(diào)起用戶應(yīng)用程序。這種設(shè)計最為簡潔,只需一片F(xiàn)lash裝載程序。缺點是,采用插件Flash容量很小,僅適合程序不大的場合;而采用貼片方式的Flash,則有一個頭疼的程序燒寫問題。
方案二
第一片小容量Flash放BOOT代碼;第二片大容量的Flash放OS+APPLICATION代碼(Tornado圖形環(huán)境下選項為bootable映象,rules=VxWorks)。
由VxWorks 的Loadable images啟動過程可知,第一片F(xiàn)lash會將BOOT code拷貝到RAM_HIGH_ADRS為起址的RAM空間,BOOT code則將OS拷貝到RAM_LOW_ADRS為起址的RAM空間,并跳到OS入口點,即RAM_LOW_ADRS執(zhí)行。所以這種方法是在第一片 Flash啟動后,接著將第二片F(xiàn)lash中保存的OS+APPLICATION映象拷貝到RAM的RAM_LOW_ADRS ~ RAM_HIGH_ADRS之間,然后跳到RAM中的RAM_LOW_ADRS地址處即OS入口點執(zhí)行。
方案三
第一片小容量Flash放BOOT代碼;第二片大容量的Flash放BOOT+OS+APPLICATION(Tornado圖形環(huán)境下選項為bootable映象,rules=VxWorks_rom)。
第一片BOOT啟動后,其代碼執(zhí)行的最后一句跳至第二片F(xiàn)lash的啟動代碼romInit()處執(zhí)行。第一片F(xiàn)lash代碼用來將程序下載到第二片 Flash中,正常情況下則是簡單地啟動第二片F(xiàn)lash中已有的程序。在做第二片F(xiàn)lash中的BOOT+OS+APPLICATION映象時,需要將 BSP中config.h文件的ROM_BASE_ADRS參數(shù)修改為第二片F(xiàn)lash的基址,表示基于第二片F(xiàn)lash啟動運行。這里第二片F(xiàn)lash 執(zhí)行并不等同復(fù)位CPU,只是又執(zhí)行了一次與第一片F(xiàn)lash中上電復(fù)位后內(nèi)容類似的初始化代碼并新啟動了一個OS,這個OS重新接管了SDRAM以及 CPU的所有寄存器等,而第一片F(xiàn)lash中代碼不再執(zhí)行。
下面提供一種方法,通過第一片F(xiàn)lash中的代碼,可以將遠(yuǎn)程PC機上編譯好的二進制可執(zhí)行文件 rom.bin(含有BOOT+OS+APPLICATION)ftp到第二片F(xiàn)lash:
/*(1)將PC ftp Server上的二進制可執(zhí)行文件rom.bin(含有BOOT+OS+APPLICATION)ftp到target的SDRAM緩沖區(qū)buf中*/
if (ftpXfer ("server", "fred", "magic", "", "RETR %s", "/usr/appl", "rom.bin",
&ctrlSock, &dataSock) == ERROR)
return (ERROR);
while ((nBytes = read (dataSock, buf, 5*1024)) > 0)
{
buf = buf + nBytes;
TotalNum = TotalNum + nBytes;
}
close (dataSock);
if (ftpReplyGet (ctrlSock, TRUE) != FTP_COMPLETE)
status = ERROR;
if (ftpCommand (ctrlSock, "QUIT", 0, 0, 0, 0, 0, 0) != FTP_COMPLETE)
status = ERROR;
close (ctrlSock);
/*(2)將ftp到SDRAM中的內(nèi)容寫入第二片F(xiàn)lash中*/
writeFlash2(buf-TotalNum,FLASH2BASE,TotalNum);
/*(3)第一片F(xiàn)lash執(zhí)行的最后一行代碼是跳轉(zhuǎn)到第二片F(xiàn)lash中第一條語句執(zhí)行*/
FUNCPTR entry = (FUNCPTR)(FLASH2BASE+0x100);
go (entry);
方案四
第一片小容量Flash放BOOT+OS+LOADER代碼(Tornado圖形環(huán)境下選項為bootable映象,rules= VxWorks_rom);第二片大容量Flash放APPLICATION(Tornado圖形環(huán)境下選項為downloadable應(yīng)用模塊且可重定位,rules=objects),此片F(xiàn)lash必須有文件系統(tǒng)。
第一片F(xiàn)lash中是一個完整的產(chǎn)品映象,等同于BOOT+OS+ APPLICATION,LOADER就是一個簡單的APPLICATION,利用VxWorks提供給用戶的目標(biāo)模塊加載器loadlib來完成 LOADER功能。在第一片F(xiàn)lash啟動運行到LOADER時,由LOADER的loadModule()函數(shù)將第二片F(xiàn)lash的 APPLICATION文件動態(tài)加載入RAM,并與OS連接為可直接執(zhí)行的映象,然后用symFindByName()找到應(yīng)用代碼文件appl.o中用戶應(yīng)用入口點"ApplEntry",最后跳到應(yīng)用入口函數(shù)執(zhí)行。
第一片F(xiàn)lash中的LOADER代碼如下:
FUNCPTR StartEntry;
fd = open ("/Flash2/appl.o", O_RDONLY,0);
loadModule(fd, LOAD_ALL_SYMBOLS);
symFindByName(sysSymTbl,“ApplEntry”,(char **)&StartEntry,&Type);
(*StartEntry)( );
其中,(1)loadModule(int fd,int loadFlag)函數(shù)從指定的文件fd中裝載目標(biāo)模塊,并將Text、Data、BSS段放入目標(biāo)內(nèi)存池中;(2)SymFindByName (SYMTAB_ID symTblId, char* name, char** pValue, SYM_TYPE* pType)從符號表中搜尋與指定符號名匹配的符號,并將值考入pValue和pType中。

VxWorks產(chǎn)品映象設(shè)計方案比較
以上方案中,第一種設(shè)計只適合代碼小的產(chǎn)品映象;第二、三、四種適合大容量代碼的映象設(shè)計。第二種設(shè)計啟動最快,但用戶可修改性差,不靈活。第三種設(shè)計啟動兩次,速度慢,但可以做到動態(tài)遠(yuǎn)程更新包括BSP在內(nèi)的整個第二片F(xiàn)lash中的映象。第四種必須在第二片F(xiàn)lash中有閃存文件系統(tǒng)TrueFFS, appl.o以文件形式存放其中,此設(shè)計最為復(fù)雜,但在增加遠(yuǎn)程程序下載更新功能方面十分方便。以上映象構(gòu)造方案在實際中都得到成功驗證,應(yīng)用設(shè)計人員可以按照實際要求靈活選擇。

參考文獻
1 VxWorks Programmer's Guide,5.4[M].WindRiver ,Inc.
2 Tornado User's Guide,2.0[M].WindRiver ,Inc.
3 孔祥營,柏桂枝.嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社,2002

<!--插入廣告JS代碼-->
  • 上一篇: ARM在數(shù)字化遠(yuǎn)程視頻監(jiān)控系統(tǒng)的應(yīng)用
  • 下一篇: 基于ARM的車輛檢測系統(tǒng)控制單元設(shè)計
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1