<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    基于VxWorks的產品映象設計

    發布時間:2010-11-16 11:20    發布者:eetech
    關鍵詞: VxWorks , 產品 , 設計 , 映象
    本文分析了VxWorks的映象特點,設計了幾種VxWorks下產品映象的構造方案,并指出了這些構造設計的應用場合。

    VxWorks是目前占壟斷地位的實時操作系統,在許多領域獲得廣泛應用,但其產品映象設計卻一直是令設計工程師頭疼的問題。本文在實踐驗證的基礎上,討論了基于VxWorks操作系統上的產品映象設計技術,具有很強的實用性。

    VxWorks的映象分析
       
    VxWorks映象內容包括:代碼段(Text segment)、數據段(Data Segment)和符號起始塊段(BSS Segment)。其中,代碼段指可執行的指令集合;數據段指已經初始化的全局和靜態變量;符號起始塊段是未初始化的全局和靜態變量,ANSI C/C++中要求這些變量初始化為零。

    VxWorks映象按類型分為:可下載的映象(Loadable images)、基于ROM的映象(ROM-based images)和ROM駐留映象(ROM-Resident images)三種。Loadable images一般用于調試,ROM或Flash中的啟動代碼BSP打通調試通道后,將其從PC機上裝入RAM運行。ROM-based images整個映象在ROM或Flash中,由BSP從ROM或Flash中裝載整個映象到RAM中運行,并分為壓縮和非壓縮方式。ROM-resident images則只拷貝VxWorks的data和bss部分到RAM中運行,運行效率低。

    基于VxWorks的產品映象設計
       
    本文bootable VxWorks映象即為ROM-based images,downloadable應用模塊對應Loadable images。VxWorks最終產品映象一般燒錄在Flash中,但由于Flash容量有限,并且為了動態更換程序方便,有時需要使用兩片Flash。其中,第一片小容量的Flash僅作為啟動和下載程序功能,采用插件式,以便替換;第二片大容量的Flash存放用戶應用代碼,多采用貼片方式。具體VxWorks的產品映象構造可使用以下四種技術方案。

    方案一

    Flash中存放BOOT+OS+ APPLICATION代碼(Tornado圖形環境下選項為bootable映象,rules=VxWorks_rom)。

    在Flash中的 BOOT啟動后,就將OS裝入RAM,跳到OS入口點,OS執行,并由OS最終調起用戶應用程序。這種設計最為簡潔,只需一片Flash裝載程序。缺點是,采用插件Flash容量很小,僅適合程序不大的場合;而采用貼片方式的Flash,則有一個頭疼的程序燒寫問題。

    方案二
       
    第一片小容量Flash放BOOT代碼;第二片大容量的Flash放OS+APPLICATION代碼(Tornado圖形環境下選項為bootable映象,rules=VxWorks)。

    由VxWorks的Loadable images啟動過程可知,第一片Flash會將BOOT code拷貝到RAM_HIGH_ADRS為起址的RAM空間,BOOT code則將OS拷貝到RAM_LOW_ADRS為起址的RAM空間,并跳到OS入口點,即RAM_LOW_ADRS執行。所以這種方法是在第一片Flash啟動后,接著將第二片Flash中保存的OS+APPLICATION映象拷貝到RAM的RAM_LOW_ADRS " RAM_HIGH_ADRS之間,然后跳到RAM中的RAM_LOW_ADRS地址處即OS入口點執行。

    方案三
       
    第一片小容量Flash放BOOT代碼;第二片大容量的Flash放BOOT+OS+APPLICATION(Tornado圖形環境下選項為bootable映象,rules=VxWorks_rom)。

    第一片BOOT啟動后,其代碼執行的最后一句跳至第二片Flash的啟動代碼romInit()處執行。第一片Flash代碼用來將程序下載到第二片Flash中,正常情況下則是簡單地啟動第二片Flash中已有的程序。在做第二片Flash中的BOOT+OS+APPLICATION映象時,需要將BSP中config.h文件的ROM_BASE_ADRS參數修改為第二片Flash的基址,表示基于第二片Flash啟動運行。這里第二片Flash執行并不等同復位CPU,只是又執行了一次與第一片Flash中上電復位后內容類似的初始化代碼并新啟動了一個OS,這個OS重新接管了SDRAM以及CPU的所有寄存器等,而第一片Flash中代碼不再執行。

    下面提供一種方法,通過第一片Flash中的代碼,可以將遠程PC機上編譯好的二進制可執行文件 rom.bin(含有BOOT+OS+APPLICATION)ftp到第二片Flash:

    /*(1)將PC ftp Server上的二進制可執行文件rom.bin(含有BOOT+OS+APPLICATION)ftp到target的SDRAM緩沖區buf中*/
    if (ftpXfer ("server", "fred", "magic", "", "RETR %s", "/usr/appl", "rom.bin",
    %26;amp;ctrlSock, %26;amp;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中的內容寫入第二片Flash中*/
    writeFlash2(buf-TotalNum,FLASH2BASE,TotalNum);
    /*(3)第一片Flash執行的最后一行代碼是跳轉到第二片Flash中第一條語句執行*/
    FUNCPTR entry = (FUNCPTR)(FLASH2BASE+0x100);
    go (entry);  

    方案四
       
    第一片小容量Flash放BOOT+OS+LOADER代碼(Tornado圖形環境下選項為bootable映象,rules=VxWorks_rom);第二片大容量Flash放APPLICATION(Tornado圖形環境下選項為downloadable應用模塊且可重定位,rules=objects),此片Flash必須有文件系統。

    第一片Flash中是一個完整的產品映象,等同于BOOT+OS+APPLICATION,LOADER就是一個簡單的APPLICATION,利用VxWorks提供給用戶的目標模塊加載器loadlib來完成LOADER功能。在第一片Flash啟動運行到LOADER時,由LOADER的loadModule()函數將第二片Flash的APPLICATION文件動態加載入RAM,并與OS連接為可直接執行的映象,然后用symFindByName()找到應用代碼文件appl.o中用戶應用入口點"ApplEntry",最后跳到應用入口函數執行。

    第一片Flash中的LOADER代碼如下:

    FUNCPTR StartEntry;
    fd = open ("/Flash2/appl.o", O_RDONLY,0);
    loadModule(fd, LOAD_ALL_SYMBOLS);
    symFindByName(sysSymTbl,“ApplEntry”,(char **)%26;amp;StartEntry,%26;amp;Type);
    (*StartEntry)( );
    其中,(1)loadModule(int fd,int loadFlag)函數從指定的文件fd中裝載目標模塊,并將Text、Data、BSS段放入目標內存池中;(2)SymFindByName(SYMTAB_ID symTblId, char* name, char** pValue, SYM_TYPE* pType)從符號表中搜尋與指定符號名匹配的符號,并將值考入pValue和pType中。

    VxWorks產品映象設計方案比較
       
    以上方案中,第一種設計只適合代碼小的產品映象;第二、三、四種適合大容量代碼的映象設計。第二種設計啟動最快,但用戶可修改性差,不靈活。第三種設計啟動兩次,速度慢,但可以做到動態遠程更新包括BSP在內的整個第二片Flash中的映象。第四種必須在第二片Flash中有閃存文件系統TrueFFS,appl.o以文件形式存放其中,此設計最為復雜,但在增加遠程程序下載更新功能方面十分方便。以上映象構造方案在實際中都得到成功驗證,應用設計人員可以按照實際要求靈活選擇。
    本文地址:http://www.portaltwn.com/thread-39670-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關在線工具

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷