嵌入式VxWorks全程學習總結.doc_第1頁
嵌入式VxWorks全程學習總結.doc_第2頁
嵌入式VxWorks全程學習總結.doc_第3頁
嵌入式VxWorks全程學習總結.doc_第4頁
嵌入式VxWorks全程學習總結.doc_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

嵌入式VxWorks學習總結報告嵌入式VxWorks學習總結作者: 學號: 單位: 日期: 2010-10-21 1目 錄1 嵌入式VxWorks OS介紹12 VxWorks開發(fā)42.1 Tornado開發(fā)工具42.1.1 安裝過程42.1.2 內部組件52.1.3 使用說明72.2 VxWorks開發(fā)策略12.2.1 交叉調試開發(fā)12.2.2 板級支持包BSP12.2.3 任務調度42.2.4 信號量62.3 VMWare上安裝VxWorks92.3.1 概述92.3.2 準備工作92.3.3 開始安裝102.3.4 編譯程序122.3.5 制作引導磁盤142.3.6 配置FTP服務器142.3.7 創(chuàng)建VxWorks系統(tǒng)152.3.8 配置聯(lián)機調試環(huán)境162.4 PC機上安裝VxWorks182.4.1 概述182.4.2 開發(fā)前準備192.4.3 修改BSP192.4.4 網卡配置202.4.5 制作啟動盤222.4.6 后續(xù)配置與開發(fā)232.5 軟件界面開發(fā)232.5.1 WindML與中文顯示232.5.2 WindML環(huán)境配置262.5.3 漢字顯示方案282.5.4 WindML注意事項293 開發(fā)和問題293.1 VxWorks開發(fā)工作293.1.1 硬件環(huán)境搭建303.1.2 網絡通信303.1.3 基于緩沖隊列的多任務網絡通信323.1.4 命令通道與任務優(yōu)先級333.1.5 雙網卡通信343.1.6 中西文混合輸出364 參考資料39371 嵌入式VxWorks OS介紹VxWorks是目前世界上用戶數(shù)量最大的實時操作系統(tǒng),它具有高度可剪裁的微內核結構、高效的多任務調度、靈活的任務間通信手段、快速靈活的I/O系統(tǒng)、確定的s級中斷延遲時間等優(yōu)點。作為實時多任務操作系統(tǒng),VxWorks采用中斷處理與普通任務分別在不同的堆棧中處理的中斷處理機制,中斷服務程序只完成在最小時間內通告中斷的發(fā)生,而將其他非實時處理盡量通過中斷與任務間的通信機制放在被引發(fā)的任務上下文完成。這樣就能保證任務在確定的時間內執(zhí)行,滿足虛擬試驗實時信息傳輸與處理的要求。目前最重要的RTOS主要包括:第一類、傳統(tǒng)的經典RTOS:最主要的便是Vxworks操作系統(tǒng),以及其Tornado開發(fā)平臺。Vxworks因出現(xiàn)稍早,實時性很強(據(jù)說可在1ms內響應外部事件請求),并且內核可極微(據(jù)說最小可8K),可靠性較高等,所以在北美,Vxworks占據(jù)了嵌入式系統(tǒng)的多半疆山。特別是在通信設備等實時性要求較高的系統(tǒng)中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術都和Linux很類似,主要是C語言開發(fā)。像Bell-alcatel、Lucent、華為等通信企業(yè)在開發(fā)產品時,Vxworks用得很多。但Vxworks因價格很高,所以一些小公司或小產品中往往用不起。目前很多公司都在往嵌入式Linux轉(聽說華為目前正在這樣轉)。但無論如何,Vxworks在一段長時間內仍是不可動搖的。與Vxworks類似的稍有名的實時操作系統(tǒng)還有pSOS、QNX、Nucleus等RTOS。第二類、嵌入式Linux操作系統(tǒng):Linux的前途除作為服務器操作系統(tǒng)外,最成功的便是在嵌入式領域的應用,原因當然是免費、開源、支持軟件多、呼擁者眾,這樣嵌入式產品成本會低。Linux本身不是一個為嵌入式設計的操作系統(tǒng),不是微內核的,并且實時性不強。目前應用在嵌入式領域的Linux系統(tǒng)主要有兩類:一類是專為嵌入式設計的已被裁減過的Linux系統(tǒng),最常用的是uClinux(不帶MMU功能),目前占較大應用份額,可在ARM7上跑;另一類是跑在ARM 9上的,一般是將Linux 2.4.18內核移植在其上,可使用更多的Linux功能(當然uClinux更可跑在ARM 9上)。很多人預測,嵌入式Linux預計將占嵌入式操作系統(tǒng)的50%以上份額,非常重要。缺點是熟悉Linux的人太少,開發(fā)難度稍大。另外,目前我們能發(fā)現(xiàn)很多教材和很多大學都以ucOS/II為教學用實時操作系統(tǒng),這主要是由于ucOS/II較簡單,且開源,非常適合入門者學習實時操作系統(tǒng)原理,但由于ucOS/II功能有限,實用用得較少。目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發(fā),F(xiàn)ujitum則是在自己的處理器上大搞Linux開發(fā)。第三類、 Windows CE嵌入式操作系統(tǒng):Microsoft也看準了嵌入式的巨大市場,MS永遠是最厲害的,WinCE出來只有幾年時間,但目前已占據(jù)了很大市場份額,特別是在PDA、手機、顯示儀表等界面要求較高或者要求快速開發(fā)的場合,WinCE目前已很流行(據(jù)說有一家賣工控機的公司板子賣得太好,以至來不及為客戶裁減WinCE)。WinCE目前主要為4.2版(.NET),開發(fā)平臺主要為WinCE Platform Builder,有時也用EVC環(huán)境開發(fā)一些較上層的應用,開發(fā)環(huán)境方便快速,微軟的強大技術支持,WinCE開發(fā)難度遠低于嵌入式Linux。對于急于完成,不想拿嵌入式Linux冒險的開發(fā)場合,WinCE是最合適了。根據(jù)不同的側重點,WinCE還有兩個特殊版本,一個是MS PocketPC操作系統(tǒng)專用于PDA上(掌上電腦),另一個是MS SmartPhone操作系統(tǒng)用于智能手機上(帶PDA功能的手機),兩者也都屬于WinCE平臺。在PDA和手機市場上,除WinCE外,著名的PDA嵌入式操作系統(tǒng)還有Palm OS(因出現(xiàn)很早,很有名)、Symbian等。實時多任務操作系統(tǒng)是能在確定的時間內執(zhí)行其功能,并對外部的異步事件作出響應的計算機系統(tǒng)。多任務環(huán)境允許一個實時應用作為一系列獨立任務來運行,各任務有各自的線程和系統(tǒng)資源。VxWorks系統(tǒng)提供多處理器間和任務間高效的信號燈、消息隊列、管道、網絡透明的套接字。 實時系統(tǒng)的另一關鍵特性是硬件中斷處理。為了獲得最快速可靠的中斷響應,VxWorks系統(tǒng)的中斷服務程序ISR有自己的上下文。VxWorks實時操作系統(tǒng)由400多個相對獨立的、短小精煉的目標模塊組成,用戶可根據(jù)需要選擇適當模塊來裁剪和配置系統(tǒng),這有效地保證了系統(tǒng)的安全性和可靠性。系統(tǒng)的鏈接器可按應用的需要自動鏈接一些目標模塊。這樣,通過目標模塊之間的按需組合,可得到許多滿足功能需求的應用。VxWorks操作系統(tǒng)的基本構成模塊包括以下部分:(1)高效的實時內核WindVxWorks實時內核(Wind)主要包括基于優(yōu)先級的任務調度、任務同步和通信、中斷處理、定時器和內存管理。(2)兼容實時系統(tǒng)標準POSIXVxWorks提供接口來支持實時系統(tǒng)標準P.1003.1b.(3)I/O系統(tǒng)VxWOrks提供快速靈活的與ANSI-C相兼容的I/O系統(tǒng),包括UNIX的緩沖I/O和實時系統(tǒng)標準POSIX的異步I/O。VxWOrks包括以下驅動:網絡-網絡設備(以太網、共享內存)管道-任務間通信RAM-駐留內存文件SCSI-SCSI硬盤,磁碟,磁帶鍵盤-PC x86鍵盤(BSP僅支持x86)顯示器-PC x86顯示器(BSP僅支持x86)磁碟-IDE和軟盤(BSP僅支持x86)并口-PC格式的目標硬件(4)本機文件系統(tǒng)VxWorks的文件系統(tǒng)與MS-DOS、RT-11、RAM、SCSI等相兼容。(5)網絡特性VxWorks網絡能與許多運行其它協(xié)議的網絡進行通信,如TCP/IP、4.3BSD、NFS、UDP、SNMP、FTP等。VxWorks可通過網絡允許任務存取文件到其它系統(tǒng)中,并對任務進行遠程調用。(6)虛擬內存(可選單元VxVMI)VxVMI主要用于對指定內存區(qū)的保護,如內存塊只讀等,加強了系統(tǒng)的健壯性。(7)共享內存(可選單元VxMP)VxMP主要用于多處理器上運行的任務之間的共享信號量、消息隊列、內存塊的管理。(8)駐留目標工具Tornado集成環(huán)境中,開發(fā)工具工作于主機側。駐留目標外殼、模塊加載和卸載、符號表都可進行配置。(9)Wind基類VxWorks系統(tǒng)提供對C+的支持,并構造了系統(tǒng)基類函數(shù)。(10)工具庫VxWorks系統(tǒng)向用戶提供豐富的系統(tǒng)調用,包括中斷處理、定時器、消息注冊、內存分配、字符串轉換、線性和環(huán)形緩沖區(qū)管理,以及標準ANSI-C程序庫。(11)性能優(yōu)化VxWorks系統(tǒng)通過運行定時器來記錄任務對CPU的利用率,從而進行有效地調整,合理安排任務的運行,給定適宜的任務屬性。(12)目標代理目標代理可使用戶遠程調試應用程序。(13)板級支持包板級支持包提供硬件的初始化、中斷建立、定時器、內存映象等。(14)VxWorks仿真器(VxSim)可選產品VxWorks仿真器,能模擬VxWorks目標機的運行,用于應用系統(tǒng)的分析。VxWorks的特點如下: (1)可靠性。操作系統(tǒng)的用戶希望在一個工作穩(wěn)定,可以信賴的環(huán)境中工作,所以操作系統(tǒng)的可靠性是用戶首先要考慮的問題。而穩(wěn)定、可靠一直是VxWorks的一個突出優(yōu)點。自從對中國的銷售解禁以來,VxWorks以其良好的可靠性在中國贏得了越來越多的用戶。 (2)實時性。實時性是指能夠在限定時間內執(zhí)行完規(guī)定的功能并對外部的異步事件作出響應的能力。實時性的強弱是以完成規(guī)定功能和作出響應時間的長短來衡量的。VxWorks 的實時性做得非常好,其系統(tǒng)本身的開銷很小,進程調度、進程間通信、中斷處理等系統(tǒng)公用程序精練而有效,它們造成的延遲很短。VxWorks 提供的多任務機制中對任務的控制采用了優(yōu)先級搶占(Preemptive Priority Scheduling)和輪轉調度(Round-Robin Scheduling)機制,也充分保證了可靠的實時性,使同樣的硬件配置能滿足更強的實時性要求,為應用的開發(fā)留下更大的余地。(2)可裁減性。用戶在使用操作系統(tǒng)時,并不是操作系統(tǒng)中的每一個部件都要用到。例如圖形顯示、文件系統(tǒng)以及一些設備驅動在某些嵌入系統(tǒng)中往往并不使用。VxWorks 由一個體積很小的內核及一些可以根據(jù)需要進行定制的系統(tǒng)模塊組成。VxWorks 內核最小為 8kB,即便加上其它必要模塊,所占用的空間也很小,且不失其實時、多任務的系統(tǒng)特征。由于它的高度靈活性,用戶可以很容易地對這一操作系統(tǒng)進行定制或作適當開發(fā),來滿足自己的實際應用需要。2 VxWorks開發(fā)2.1 Tornado開發(fā)工具2.1.1 安裝過程安裝包Tornado解壓后的目錄結構如下圖所示,CRACK如其名字所示,就是破解文件夾了,序列號和crack文件都在其中。1、進入Tornado目錄,安裝Tornado,提示輸入序列號什么的就到Crack文件夾中去找。2、如果安裝目錄為C:Tornado2.2,則在其目錄下新建文件夾flexlm,將安裝光盤下的CRACK目錄下的license.dat拷貝到c:Tornado2.2flexlm。3、安裝完畢后,如果從開始菜單直接運行tornado,會提示錯誤,這是因為安裝還沒有完成,在C盤Tornado2.2文件夾下你會發(fā)現(xiàn)一個setup.log文件,用ultraedit或vim打開,在最后一行你會發(fā)現(xiàn)一個注冊表鍵值,進入注冊表,找到這個鍵值HKEY_LOCAL_MACHINESOFTWAREFLEXlm License ManagerLM_LICENSE_FILE,將其值修改為:c:Tornado2.2flexlmlicense.dat另外一種破解方法是在windows里面設置一個環(huán)境變量LM_LICENSE_FILE = c:Tornado2.2flexlmlicense.dat到此為止,Tornado就能在XP系統(tǒng)上跑起來了。Tornado的文件樹:2.1.2 內部組件WindRiver公司提供的軟件產品分為兩部分:開發(fā)環(huán)境Tornado和實時操作系統(tǒng)VxWorks。Tornado的啟動界面見圖5-1。運行Tornado的一方稱為宿主機,而運行VxWorks的一方稱為目標機,二者根據(jù)實際應用可以采用網絡或串行線連接,滿足WDB協(xié)議(見圖5-2)。在圖4-4所示的WTX和WDB兩個協(xié)議最為重要,負責主機各個工具和目標機的通信。其中WTX(Windriver Tools eXchange)負責主機開發(fā)工具和Target Server之間的通信。而WDB(Wind DeBug)負責主機的Target Server和目標機的WDB Agent(Target Agent)之間的通信。WDB Agent實現(xiàn)Target Server的請求,并且返回結果。請求包括:內存操作、斷點設置、虛擬I/O支持和任務控制等。Target Server在主機上運行。一個Target Server代表一個目標機,所有的主機工具都通過它來訪問目標機。圖5-1 Tornado啟動界面圖5-2 主機與目標機的連接Tornado 2.2主要組成部分有:1 集成的源代碼編輯器(可惜不支持漢字輸入)。2 工程管理工具。3 集成的C和C編譯器和make工具。4 瀏覽器,用于收集可視化的資源,監(jiān)視目標系統(tǒng)。5 CrossWind,圖形化的增強型調試器。6 WindSh,C語言命令外殼,用于控制目標機。7 VxSim,集成的vxworks目標機仿真器。8 WindView,集成的軟件邏輯分析儀。9 可配置的各種選項,可以改變歸Tornado GUI的外觀等。2.1.3 使用說明Tornado 2.2 IDE運行在我們的宿主機(Host)上。主界面如下圖所示。包括菜單、工具欄、主工作區(qū)和程序編輯區(qū)。主工作區(qū)(Workspace)中可以集中管理所有的工程項目。工程有兩種格式:bootable和downloadable。第一種經編譯后生成的映象文件已經包括了vxworks內核,可直接在目標板上完成自啟動、裝入內核并運行應用程序。所以一般作為生產用映象。第二種則只是純粹的動用程序,生成的映象文件不包括vxworks內核,一般為.out格式文件,所以不能在目標板上自動運行。它要求目標板上要有固化的bootrom通過網絡或串口下載vxworks內核到目標板,并建立相關的運行環(huán)境。然后通過宿主機上的target Server下載到目標機上運行。所以它一般用在工程調試階段。下面以arm為例分別就兩種格式作一個詳細的論述。(1)創(chuàng)建bootable格式的工程。啟動tornado后進入”file-new project”出現(xiàn)如下的界面:選擇“Creat a bootable VxWorks image”后點擊OK,并按要求輸入工程名稱和位置。出現(xiàn)如下界面:此時要選擇你工程所基于的BSP目錄。然后系統(tǒng)自動為你在工作區(qū)生成一個你指定名稱(Project0)的工程。如下所示:工程下的文件為系統(tǒng)文件,大部分為bsp文件,一般不需要去修改。如何添加自己的應用文件到該工程中呢?將鼠標“Project0”上,點擊右鍵。出現(xiàn)如下的界面:左鍵點擊“add Files”選擇文件的所在目錄,就可以添加你的文件了。只添加不和系統(tǒng)提供的文件“連”起來是沒有用的,在usrAppInit.c中加入一條任務生成的語句,如下圖所示:其中“myDemoTask”為你應用程序中的第一個入口程序。當然在usrAppInit()之前應加上必要的include頭文件,才能在后面的編譯中通過。接下來就應該編譯了,選擇“Build”或“Rebuild All”后,系統(tǒng)就開始為你生成包含vxworks內核的映象文件vxworks_rom.hex了。如下圖所示。(2)創(chuàng)建downloadable工程格式。新建時選擇“Create downloadable application modules”然后按提示輸入工程名和位置。“下一步”后出現(xiàn)如下圖所示界面,在toolChain中選擇“ARM7TDMI.gnu”編譯工具。完成后你會發(fā)現(xiàn)工程(project1)下什么程序也沒有。按上面的方法照樣添加你的應用程序,并進行編譯,生成project1.out文件。就可以調試了。調試之前必須保證你的目標機已經上電并通過網絡或串口與宿主機相連。下載.out文件之前還要先配置你的target server。按下圖所示進行操作:配置如目標機的IP,和映象文件所在的目錄就基本上OK了。結果如下圖所示。以網絡下載vxworks映象為例:啟動tornado自帶的tftpServer,打開超級終端,設置好波特率。目標機復位,很快超級終端就有一些信息打出來,當出現(xiàn)如下的提示時表示vxworks內核已經在目標機上成功運行下來了。在Tornado II的tools菜單中啟動剛才配置好的targetSever.成功后就會有一個靶狀的紅色小東西出現(xiàn)的window任務欄右下角。雙擊它,出現(xiàn)如下的提示則表示成功和目標機連接。點擊 選擇代理名,啟動debug,點擊下載.out文件到目標機。點擊并輸入任務名,就可以開始應用程序的調試了,調試界面如下圖所示:可以在代碼行設置斷點。調試好的程序就可以按bootable的生成方式作成最終生產用映象,燒入目標機就可以了,當然還應該觀察程序是否正常運行,輸出結果是否符合要求。2.2 VxWorks開發(fā)策略2.2.1 交叉調試開發(fā)Tornado開發(fā)使用主機-目標機交叉開發(fā)模型:應用程序在主機的Windows環(huán)境下編譯鏈接生成可執(zhí)行文件,下載到目標機,通過主機上的目標服務器與目標機上的目標代理程序的通信,完成對應用程序的調測與分析。主機、目標機與之間的連接情況,可參照下圖。主機的開發(fā)環(huán)境可以是Windows、HP等操作系統(tǒng),目標機的硬件環(huán)境可以是Power PC、ARM、普通PC機等。主機與目標機之間的連接可以采用交叉網線或者串口。大多開發(fā)采用網線,連接方便,開發(fā)簡單。2.2.2 板級支持包BSPTornado目錄下config/bspname包含板級支持包BSP,它由運行VxWorks的某些硬件驅動文件組成,如有串行線的VME板、時鐘和其它設備。文件包括:Makefile, sysLib.c, sysSerial.c, sysALib.s, romInit.s, bspname.h 和 config.h.文件sysLib.c以硬件獨立方式提供VxWorks和應用程序間的板級聯(lián)系,主要包括:初始化函數(shù)- 初始化硬件到一已知狀態(tài)- 標識系統(tǒng)- 初始化設備,如SCSI或常規(guī)設備內存/地址空間函數(shù)- 得到板上內存大小- 總線地址空間- 設定/獲得非易失性RAM- 定義板的內存位圖(可選)- 為有MMU的處理器定義虛擬內存到物理內存的映射總線中斷函數(shù)- 打開/關閉總線中斷- 產生總線中斷時鐘/定時器函數(shù)- 使能/不能定時中斷- 設置定時器的周期性郵箱/位置監(jiān)視函數(shù)(可選) - 使郵箱/位置監(jiān)視中斷能在目錄config/all 的配置文件usrConfig.c和bootConfig.c負責啟動庫函數(shù)。設備驅動可調用內存和總線管理函數(shù)。板級支持包BSP負責目標板硬件的初始化,實時內核的載入等。對于硬件初始化的順序,大致可按下表中形式進行:函 數(shù)函 數(shù) 功 能所 在 文 件sysInit()(a)鎖住中斷;(b)禁用緩沖;(c)用缺省值初始化系統(tǒng)中斷表(僅i960);(d)用缺省值初始化系統(tǒng)錯誤表(僅i960);(e)初始化處理器寄存器到一缺省值;(f)使回溯失效;(g)清除所有懸置中斷;(h)激活usrInit(),指明啟動類型。sysALib.sUsrInit()(a)對bss賦零;(b)保存bootType于sysStartType;(c)調用excVecInit(),初始化所有系統(tǒng)和缺省中斷量;(d)依次調用sysHwInit(),usrKernelInit(),kernelInit().usrConfig.cusrKernelInit()依次調用classLibInit(),taskLibInit(),taskHookInit(),semBLibInit(),semMLibInit(),semCLibInit(),semOLibInit(),wdLibInit(),msgQLibInit(),qInit(),workQInit()usrKernel.ckernelInit()初始化并啟動內核。(a)激活intLockLevelSet();(b)從內存池頂部創(chuàng)建根堆棧和TCB;(c)調用taskInit(),taskActivate(),用于usrRoot();(d)調用usrRoot().kernelLib.cUsrRoot()初始化I/O系統(tǒng),驅動器,設備(在configAll.h和config.h中指定)(a)調用sysClkConnect(),sysClkRateSet(),iosInit(),ttyDrv();(b)初始化excInit(),logInit(),sigInit().(c)初始化管道,pipeDrv();(d)stdioInit(),mathSoftInit()或mathHardInit()(e)wdbConfig():配置并初始化目標代理機usrConfig.c 在大多數(shù)目標板的板級支持包中,VxWorks的入口點由兩個函數(shù):romInit()和romStart()來完成,而非sysInit()。具體基于ROM的VxWorks的初始化過程如下表所示:函數(shù)函數(shù)功能所在文件1.romInit()2.romStart()3.usrInit()4.usrKernelInit()5.kernelInit()6.usrRoot()7.Application routine(a)禁止中斷;(b)保存啟動類型;(c)硬件初始化;(d)調用romStart();(a)將數(shù)據(jù)段從ROM拷貝到RAM,清內存;(b)將代碼段從ROM拷貝到RAM,有必要的話解壓縮;(c)調用usrInit();初始化程序如果相應的配置文件被定義,對應函數(shù)被調用初始化并啟動內核初始化I/O系統(tǒng),驅動器,創(chuàng)建設備應用程序代碼romInit.sbootInit.cusrConfig.cusrKernel.ckernelLib.cusrConfig.cApplication source file2.2.3 任務調度目標板加電啟動成功后,有如下幾個任務已開始運行。他們就是VxWorks的系統(tǒng)任務。(1)根任務:tUsrRoot內核首先執(zhí)行根任務tUsrRoot,其入口點為文件config/all/usrConfig.c中的usrRoot()函數(shù),它負責初始化VxWorks工具,并創(chuàng)建注冊、異常處理、網絡通信任務和tRlogind等任務。一般來說,在所有的初始化工作完成后,根任務tUsrRoot被刪除。(2)注冊任務:tLogTask注冊任務tLogTask被VxWorks模塊用于傳送不需I/O操作的系統(tǒng)消息。(3)異常處理任務:tExcTask異常處理任務tExcTask有最高優(yōu)先級,它負責系統(tǒng)的異常情況出錯處理,不能被懸置、刪除或是改變其優(yōu)先級。(4)網絡通信任務:tNetTask網絡通信任務tNetTask負責系統(tǒng)級任務的網絡通信。(5)目標代理任務:tWdbTask如果目標代理程序運行在任務模式,目標代理任務tWdbTask被創(chuàng)建,用來響應主機目標服務器的請求。實時系統(tǒng)的一個任務可有多種狀態(tài),其中最基本的狀態(tài)有四種:就緒態(tài):任務只等待系統(tǒng)分配CPU資源;懸置態(tài):任務需等待某些不可利用的資源而被阻塞;休眠態(tài):如果系統(tǒng)不需要某一個任務工作,這個任務處于休眠狀態(tài);延遲態(tài):任務被延遲時所處狀態(tài);當系統(tǒng)函數(shù)對某一任務進行操作時,任務從一種狀態(tài)遷移到另一狀態(tài)。處于任一狀態(tài)的任務都可被刪除。VxWorks內核的任務管理提供了動態(tài)創(chuàng)建、刪除和控制任務的功能,具體實現(xiàn)通過如下一些系統(tǒng)調用:taskSpawn()創(chuàng)建(產生并激活)新任務taskInit()初始化一個新任務taskActivate()激活一個已初始化的任務taskName()由任務ID號得到任務名taskNameToId()由任務名得到任務ID號taskPriorityGet()獲得任務的優(yōu)先級taskIsSuspended()檢查任務是否被懸置taskIsReady()檢查任務是否準備運行taskTcb()得到一個任務控制塊的指針taskDelete()中止指定任務并自由內存(僅任務堆棧和控制塊)taskSafe()保護被調用任務taskSuspend()懸置一個任務taskResume()恢復一個任務taskRestart()重啟一個任務taskDelay()延遲一個任務 狀態(tài)遷移 調用就緒態(tài) - 懸置態(tài)semTake()/msgQReceive()就緒態(tài) - 延遲態(tài)taskDelay()就緒態(tài) - 休眠態(tài)taskSuspend()懸置態(tài) - 就緒態(tài)semGive()/msgQSend()懸置態(tài) - 休眠態(tài)taskSuspend()延遲態(tài) - 就緒態(tài)expired delay延遲態(tài) - 休眠態(tài)taskSuspend()休眠態(tài) - 就緒態(tài)taskResume()/taskActivate()休眠態(tài) - 懸置態(tài)taskResume()休眠態(tài) - 延遲態(tài)taskResume()多任務調度須采用一種調度算法來分配CPU給就緒態(tài)任務。Wind內核采用基于優(yōu)先級的搶占式調度法作為它的缺省策略,同時它也提供了輪轉調度法。基于優(yōu)先級的搶占式調度,它具有很多優(yōu)點。這種調度方法為每個任務指定不同的優(yōu)先級。沒有處于懸置或休眠態(tài)的最高優(yōu)先級任務將一直運行下去。當更高優(yōu)先級的任務由就緒態(tài)進入運行時,系統(tǒng)內核立即保存當前任務的上下文,切換到更高優(yōu)先級的任務。Wind內核劃分優(yōu)先級為256 級(0255)。優(yōu)先級0為最高優(yōu)先級,優(yōu)先級255為最低。當任務被創(chuàng)建時,系統(tǒng)根據(jù)給定值分配任務優(yōu)先級。然而,優(yōu)先級也可以是動態(tài)的,它們能在系統(tǒng)運行時被用戶使用系統(tǒng)調用taskPrioritySet()來加以改變,但不能在運行時被操作系統(tǒng)所改變。輪轉調度法分配給處于就緒態(tài)的每個同優(yōu)先級的任務一個相同的執(zhí)行時間片。時間片的長度可由系統(tǒng)調用KernelTimeSlice()通過輸入?yún)?shù)值來指定。很明顯,每個任務都有一運行時間計數(shù)器,任務運行時每一時間滴答加1。一個任務用完時間片之后,就進行任務切換,停止執(zhí)行當前運行的任務,將它放入隊列尾部,對運行時間計數(shù)器置零,并開始執(zhí)行就緒隊列中的下一個任務。當運行任務被更高優(yōu)先級的任務搶占時,此任務的運行時間計數(shù)器被保存,直到該任務下次運行時。2.2.4 信號量信號量VxWorks信號量是提供任務間通信、同步和互斥的最優(yōu)選擇,提供任務間最快速的通信。也是提供任務間同步和互斥的主要手段。VxWorks提供3種信號量來解決不同的問題。二進制最快的最常用的信號量,可用于同步或互斥。互斥為了解決內在的互斥問題、優(yōu)先級繼承、刪除安全和遞歸等情況而最優(yōu)化的特殊的二進制信號量。計數(shù)器類似于二進制信號量,但是隨信號量釋放的次數(shù)改變而改變。(1)二進制信號量二進制信號量能夠滿足任務間的互斥和同步,需要的系統(tǒng)開銷最小。二進制信號量可以看成一個標志,對應資源是可用還是不可用。當一個任務調用semTake ()請求一個信號量時,如果此時信號量可用,信號量會被清零,并且任務立即繼續(xù)執(zhí)行;如果信號量不可用,任務會被阻塞來等待信號量。當一個任務調用semGive ()釋放一個二進制信號量時。如果信號量已經可用,釋放信號量不會產生任何影響;如果信號量不可用并且沒有任務等待使用該信號量,信號量只是被簡單地置為可用;如果信號量不可用并且有一個或多個任務等待該信號量,最高優(yōu)先級的任務被解阻塞,信號量仍為不可用。當兩個以上的任務共享使用同一塊內存緩沖區(qū)或同一個I/O設備之類的資源時,可能會發(fā)生競爭狀態(tài)。二進制信號量可以通過對共享資源上鎖,實現(xiàn)高效的互斥訪問,不象禁止中斷或禁止搶占,二進制信號量將互斥僅僅限于對與之聯(lián)系的資源的訪問,并且比禁止中斷和禁止搶占提供更精確的互斥粒度。使用時創(chuàng)建用于保護資源的二進制信號量,初始時信號量可用。當任務需要訪問這個資源時,首先取得這個信號量,所有其它想要訪問這個資源的任務將被阻塞。當任務完成了對該資源的訪問時,釋放該信號量,允許其他任務使用該資源。因此所有對一個需要互斥訪問資源的操作由semTake ()和semGive ()對一起來實現(xiàn):semTake(semMutex,WAIT FOREVER)/*臨界區(qū),某一時刻僅被一個任務訪問*/semGive (semMutex)信號量另一種通常的用法是用于任務間的同步機制。在這種情況下,信號量代表一個任務所等待的條件或事件。最初,信號量是不可用的。一個任務或中斷處理程序釋放該信號量來通知這個事件的發(fā)生。等待該信號量的任務將被阻塞直到事件發(fā)生、該信號量可用。一旦被解阻塞,任務就執(zhí)行恰當?shù)氖录幚沓绦?。信號量在任務同步中的應用對于將中斷服務程序從冗長的事件處理中解放出來以縮短中斷響應時間是很有用的。(2)互斥信號量互斥信號量是一種特殊的二進制信號量,用于解決具有內在的互斥問題:優(yōu)先級繼承、刪除安全和對資源的遞歸訪問等情況?;コ庑盘柫颗c二進制不同點在于:它僅用于互斥;僅能由取(semTake ()它的任務釋放;不能在ISR 中釋放(semGive ()。優(yōu)先級繼承問題。優(yōu)先級倒置發(fā)生在一個高優(yōu)先級的任務被迫等待一段不確定時間,等待一個低優(yōu)先級任務完成。VxWorks允許使用優(yōu)先級繼承算法,在互斥信號量中使用選項 SEM-INVERSION-SAFE ,將使能優(yōu)先級繼承算法,優(yōu)先級繼承協(xié)議確保擁有資源的任務以阻塞在該資源上的所有任務中優(yōu)先級最高的任務的優(yōu)先級執(zhí)行,直到它釋放所擁有的所有信號量,然后該任務返回到正常狀態(tài)。因此這個“繼承的高優(yōu)先級”任務受到不會被任何中間優(yōu)先級任務搶占的保護。刪除安全問題。另一個互斥問題涉及到任務刪除。在一個受信號量保護的臨界區(qū),經常需要保護在臨界區(qū)執(zhí)行的任務不會被意外地刪除。刪除一個在臨界區(qū)執(zhí)行的任務可能引起意想不到的后果,造成保護資源的信號量不可用,可能導致資源處于破壞狀態(tài),也就導致了其他要訪問該資源的所有任務無法得到滿足。原語 taskSafe()和taskUnsafe ()提供了防止任務被意外刪除的一種方法。同時互斥信號量提供了選項SEM-DELETE-SAFE ,使用這個選項,每次調用semTake ( )時隱含地使能了taskSafe(),當每次調用semGive ()時隱含地使能了taskUnsafe ()這種方式,任務得到信號量時得到不會被刪除的保護。遞歸資源訪問問題?;コ庑盘柫磕軌虮贿f歸地獲得。這意味著信號量能夠被一個擁有該信號量的任務在該信號量最終被釋放之前多次獲取。遞歸對于滿足一些子程序即要求能夠相互調用但是也要求互斥訪問一個資源非常有用。這種情形是可能的,因為系統(tǒng)需要跟蹤哪一個任務當前擁有信號量。(3)計數(shù)器信號量計數(shù)器信號量是實現(xiàn)任務同步和互斥的另一種手段。計數(shù)器信號量除了像二進制信號量那樣工作外,還保持對信號量釋放次數(shù)的跟蹤。信號量每次釋放,計數(shù)器加一,每次獲取,計數(shù)器減一。當信號量減到0 時,試圖獲取該信號量的任務被阻塞。正如二進制信號量,當信號量釋放時,如果有任務阻塞在該信號量阻塞隊列上,那么任務解除阻塞;但是如果信號量釋放時,沒有任務阻塞在該信號量阻塞隊列上,那么計數(shù)器加一。VxWorks的信號燈操作庫有semLib、semBLib、semCLib、semMLib,分別對應通用信號燈與二進制、計數(shù)型和互斥信號燈的操作。庫中信號燈相關的函數(shù)有:semBCreate()創(chuàng)建一個二進制信號燈semCCreate()創(chuàng)建一個計數(shù)型信號燈semMCreate()創(chuàng)建一個互斥型信號燈semGive()釋放信號燈semTake()獲取信號燈semFlush()使所有被該信號燈阻塞的任務脫離阻塞狀態(tài)信號量在實現(xiàn)多任務間的通信、同步和互斥中發(fā)揮著重要的作用。因此,深入理解和正確使用VxWorks的信號量,可以提高實時系統(tǒng)中多任務間通信的效率。2.3 VMWare上安裝VxWorks2.3.1 概述VxWorks是風河公司(Windriver)開發(fā)的實時操作系統(tǒng)之一,以其優(yōu)秀的可靠性、實時性及內核的可裁減性,被廣泛應用于通信、軍事、航天、航空等關鍵行業(yè)領域。VxWorks可以適用于多種硬件體系結構,其中也包括大家日常都可以接觸到的PC體系結構。VMWare 是被廣泛應用虛擬PC系統(tǒng)軟件,他可以提供基于Inetl CPU的虛擬PC系統(tǒng)環(huán)境,包括CPU、BIOS、硬盤和其他外圍硬件設備,使您可以在一臺PC機上同時運行兩個操作系統(tǒng)。VMWare對外圍硬件設備的模擬,屏蔽了不同設備型號的差異,在硬件環(huán)境發(fā)生改變時(硬件型號變化),對于運行于VMWare上的操作系統(tǒng)影響很?。o須安裝新的驅動程序)。本文以下部分將介紹如何在VMWare軟件提供的虛擬環(huán)境上安裝VxWorks操作系統(tǒng)。由于可以在同一臺PC機上建立完整VxWorks開發(fā)環(huán)境,所以可以有效地降低項目初期的開發(fā)成本,也可以為初學者提供一個接近于真實的模擬環(huán)境。需要注意的是,由于VMWare本身是運行在Windows操作系統(tǒng)之上的,而VxWorks運行于VMWare之上,所以這個模擬環(huán)境無法保證VxWorks的實時特性。因此,Vmware上的嵌入式VxWorks操作只是單機演示作用,可以快速方便的得到一些實驗性結果,并不能徹底實現(xiàn)其他諸如實時性測試等方面的目標。2.3.2 準備工作我們假設您有一臺普通配置的PC機,并安裝了Windows2000操作系統(tǒng)。其次您需要安裝Tornado 2.2 for pcPentium開發(fā)環(huán)境。缺省安裝的Tornado 2.2 for pcPentium可能不包括pcPentium的BSP組件,但該組件可以從風河公司(Windriver)的網站免費下載。我們將在下文以WIND_BASE引用Tornado的安裝路徑。其次是要安裝VMWare軟件,這里我們使用4.0的版本。如果您還沒有該軟件,也可以從VMWare的網站下載試用版。最后,由于Tornado自帶的PC-NET網卡驅動有問題,所以需要下載AMD的PCNET網卡的VxWorks系統(tǒng)驅動,可以從AMD網站免費下載。一張1.44M的軟盤,用于制作系統(tǒng)引導盤。準備并安裝好以上軟件后,就可以開始下一步的工作了。2.3.3 開始安裝(1)編譯網卡驅動程序VMWare為運行于其上的操作系統(tǒng)提供虛擬網卡支持,該網卡類型即為AMD的PC-NET。實際上,在Tornado開發(fā)包中已經包含了該類型網卡的驅動程序,但經過測試,對于VMWare無法正常工作,所以您需要從AMD的網站下載最新的驅動程序。下載得到的是一個可執(zhí)行的安裝程序,運行該程序將得到一個壓縮包和一個幫助文件,按照該幫助的要求,將壓縮包直接釋放到Tornado目錄下。如果提示是否允許覆蓋文件,則選擇允許。此后按如下步驟完成驅動程序的編譯和替換: 打開一個控制臺窗口,運行批處理程序:$(WIND_BASE)hostx86-win32bin torVars.bat; 重新定位到$(WIND_BASE)targetsrcdrvend目錄,運行: make CPU=PENTIUM tool=gnu ln97xend.o其間會產生一些警告,但這不會影響我們的工作。 重新定位到$(WIND_BASE)targetlibpentiumPENTIUMcommon目錄,并將上一步生成的文件ln97xend.o復制到此目錄下。備份此目錄下的文件libdrv.a; 運行命令arpentium -d libdrv.a ln97xEnd.o,刪除libdrv.a中原有的ln97xEnd模塊,然后再運行命令: arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o將我們剛剛創(chuàng)建的新模塊添加進去。到此有關網卡驅動的設置就完成了。注意不要關閉這個窗口,后面還要使用。(2)修改配置文件在這一節(jié)中,我們要修改編譯VxWorks的配置頭文件Config.h中定義的一些參數(shù),使編譯出來的系統(tǒng)引導程序和VxWorks的映象符合我們的要求;同時還要修改sysLn97xEnd.c這個文件,以使系統(tǒng)的網絡功能正常運行。 定位目錄到$(WIND_BASE)targetconfigpcPentium并打開該目錄下Config.h文件; 我們首先要修改VxWorks的啟動參數(shù)。先查找到定義DEFAULT_BOOT_LINE宏的地方,修改預處理條件CPU = PENTIUM分支下的定義如下: #define DEFAULT_BOOT_LINE lnPci(0,0)your_host_name:d:vxWorks h=69 e=54 u=target pw=vxworks tn=target其中: lnPci(0,0)指定了使用第0個網卡和第0個處理器,lnPci這個標識會因為使用的驅動程序不同而有所不同,但這里用lnPci就可以了; your_host_name指定您的主機的名字,使用Windows系統(tǒng)的主機名就可以; d:vxWorks指定了VxWorks映象下載的完整路徑; h=69是主機的IP地址,就是您當前正在使用的系統(tǒng)的IP地址; e=54是目標機的IP地址,也就是未來VxWorks操作系統(tǒng)的IP地址,您只要任意指定一個不沖突的IP地址即可,這里我們假設您的目標機IP地址和主機IP地址在同一個網段內; u=target指定了FTP服務器的用戶名,這個FTP就是用來下載VxWorks映象的,后面還會提到; pw=vxwroks是用戶名對應的口令; tn=target指定目標機的名字,任意指定即可; 您可以參考Tornado自帶的手冊以獲取更多信息; 下面我們要指定使用什么樣的網卡驅動程序。首先查找“Network driver options”這段文字,之后您可以看到在該注釋后面定義了一系列的有關網卡驅動的宏定義。注意保證INCLUDE_END和INCLUDE_LN_97X_END這兩個宏處于定義狀態(tài)(define),其他的宏都處于未定義狀態(tài)(undef); 缺省情況下,VxWorks系統(tǒng)是不接受外部輸入設備(如鍵盤)的輸入,也不向外部輸出設備(如顯示器)輸出數(shù)據(jù)。為了便于調試,我們必須改變它的這種缺省狀態(tài)。我們查找定位宏INCLUDE_PC_CONSOLE,然后保證其處于定義狀態(tài)(define)即可; 到此為止,對config.h文件的修改就完成了,保存修改,然后再打開同一目錄下的sysLn97xEnd.c文件; 這一步修改的目的是要使網卡正常工作。我們先定位到“memory-mapped IO base”這段文字,然后將其前面的參數(shù)由pciRsrcendUnit.bar1修改為NONE,這樣就可以了。最后別忘了保存。 到此為止,全部的修改工作都完成了,下一步就可以開始編譯連接了。2.3.4 編譯程序這一節(jié)我們要編譯生成bootrom引導程序和VxWorks運行映象。 打開您的Tornado開發(fā)工具,在Build菜單下選擇Build Boot ROM,彈出如下對話框: 在BSP列表中選擇pcPentium,而在Image to build列表中分別選擇bootrom和gnu。完成選擇后,點擊OK按鈕就開始引導程序的編譯了。編譯產生的文件bootrom將保存在$(WIND_BASE)targetconfigpcPentium目錄下。 編譯生成bootrom后,還要創(chuàng)建一個VxWorks映象(image),也就是VxWorks操作系統(tǒng)本身的代碼。 o 創(chuàng)建一個“bootable VxWorks image”的工程; o 選擇您需要的VxWorks組件。這一步是可選的,如果您只想使用缺省的配置,那根本就不需要這一步;但如果您想使用額外的組件,例如,您可能想通過telnet連接VxWorks系統(tǒng),這時就需要在Workspace窗口的VxWorks選項卡中選擇telnet sever對應的組件,如下圖: 在這個例子中我們選擇了兩個重要的組件:Telnet server 和 Target shell 。前者使我們可以通過Telnet協(xié)議登錄到VxWorks操作系統(tǒng)中;后者則可以讓我們通過命令行控制VxWorks系統(tǒng)。完

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論