Vxworks基礎(chǔ)PPT課件_第1頁
Vxworks基礎(chǔ)PPT課件_第2頁
Vxworks基礎(chǔ)PPT課件_第3頁
Vxworks基礎(chǔ)PPT課件_第4頁
Vxworks基礎(chǔ)PPT課件_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、.,1,Vxworks簡介,最成功的實時操作系統(tǒng)1981,Windriver,嵌入式咨詢公司TCP/IP,NFS工具集WIND內(nèi)核1995,tornado集成開發(fā)環(huán)境收購SDS、DIAB、pSOS,.,2,Vxworks操作系統(tǒng)是一個嵌入式實時操作系統(tǒng)(RTOS)。Vxworks與其它實時OS一樣,基于以下兩個重要機制:*多任務(wù)環(huán)境及任務(wù)間通信*硬件中斷處理Vxworks多任務(wù)內(nèi)核完成的功能是:實時調(diào)度,任務(wù)間通信及互斥。其它功能則作為系統(tǒng)庫圍繞在內(nèi)核周圍,它們可根據(jù)需要進行剪裁。Vxworks與非實時系統(tǒng)的不同之處在于:Vxworks的優(yōu)先搶占機制基于調(diào)度,Vxworks對外部事件的反應(yīng)和處

2、理快,Vxworks容量小并且可配置(微內(nèi)核結(jié)構(gòu)),VxWorks(1),.,3,Vxworks提供了一套豐富的任務(wù)間通信機制,包括:內(nèi)存共享(Sharedmemory):簡單的數(shù)據(jù)共享方法信號量(Semaphore):用于基本的互斥及同步消息隊列(Messagequeues)和管道(pipe):用于同一CPU上任務(wù)間消息的傳遞套接口(Socket)和遠(yuǎn)程程序調(diào)用(RPC):用于網(wǎng)絡(luò)上任務(wù)間的通信信號(Signal):用于異常處理此外,Vxworks提供了三種共享內(nèi)存的對象(shared-memoryobjects)來實現(xiàn)運行在不同CPU上的任務(wù)間的高速同步和通信。共享信號量(sharedse

3、maphores):有二進制,記數(shù)型兩種共享消息隊列(sharedmessagequeues)共享內(nèi)存分區(qū)(shared-memorypartitions):有系統(tǒng)類型和用戶類型,VxWorks(2),.,4,Tornado(1),Tornado提供了Vxworks系統(tǒng)開發(fā)的集成開發(fā)環(huán)境,其中Tornado源代碼編輯器包括下列特性:標(biāo)準(zhǔn)文本控制能力C和C+語法元素用不同顏色調(diào)制集成:編輯窗口跟蹤代碼的執(zhí)行編譯集成:項目管理將編譯警告和編譯錯誤直接和編輯窗口中的相應(yīng)代碼對應(yīng)起來。,.,5,Tornado(2),Tornado集成開發(fā)環(huán)境由以下幾個部分組成:,.,6,目標(biāo)CPU:Vxworks在其

4、上運行的一個單板計算機TornadoPC主機:有一根串行線與目標(biāo)機相連(初始化時主機作為終端用)Vxworks核二進制文件駐留在其盤上,核的下載及運行Tornado工具通過以太網(wǎng)口進行,Ethernet,AGENT,SERVER,.,7,Vxworks/Tornado開發(fā)方式,目標(biāo)CPU:Vxworks在其上運行的一個單板計算機;TornadoPC主機:有一根串行線與目標(biāo)機相連(初始化時主機作為終端用),Vxworks核二進制文件駐留在其盤上,核的下載及運行Tornado工具通過以太網(wǎng)口進行。,Ethernet,AGENT,SERVER,.,8,Tornado開發(fā)環(huán)境,.,9,Tonado開發(fā)

5、環(huán)境(續(xù)),.,10,Tornado開發(fā)環(huán)境(續(xù)),.,11,Vxworks操作系統(tǒng)將一切與硬件有關(guān)的功能模塊都放在BSP庫中。該BSP庫是硬件與軟件的接口,處理硬件的初始化、中斷處理與產(chǎn)生、硬件時鐘與定時管理、局部和總線內(nèi)存空間的映射、內(nèi)存大小定義,等等。能夠自行啟動目標(biāo)機、初始化目標(biāo)機、能夠與host通信以下載Vxworks核、把控制權(quán)交給Vxworks核來調(diào)用用戶應(yīng)用程序等功能。,板支持包(BSP),.,12,.,13,Tornado,Tasktwo(void)MyFune();,MyFune(void),任務(wù),代碼共享,.,50,內(nèi)核VxWorks系統(tǒng)任務(wù),RootTask,tUsrR

6、oot是內(nèi)核執(zhí)行的第一個task,它創(chuàng)建其它task,完成任務(wù)后被停止并刪除日志Task,tLogTask記錄系統(tǒng)日志消息,而不必執(zhí)行I/O異常Task,tExcTask支持VxWorks的異常處理網(wǎng)絡(luò)Task,tNetTask處理網(wǎng)絡(luò)的任務(wù)級別的功能目標(biāo)機代理Task,tWdbTask處理debug請求Task可選組件tShell、tRlogind、tTelnetd、tPortmapd,.,51,任務(wù)間通信,共享數(shù)據(jù)結(jié)構(gòu)/內(nèi)存共享(Sharedmemory):簡單的數(shù)據(jù)共享方法信號量(Semaphore):用于基本的互斥及同步消息隊列(MessageQueue)和管道(Pipes):用于同一

7、CPU上任務(wù)間消息的傳遞套接口(Socket)和遠(yuǎn)程程序調(diào)用(RPC):用于網(wǎng)絡(luò)上任務(wù)間的通信信號(Signals):用于異常處理,.,52,任務(wù)間通信共享數(shù)據(jù)結(jié)構(gòu),共享數(shù)據(jù)結(jié)構(gòu)VxWorks中所有task存在于一個線性的地址空間中,所以task之間共享數(shù)據(jù)結(jié)構(gòu)很容易這些數(shù)據(jù)結(jié)構(gòu)可以是全局變量線形緩沖區(qū)環(huán)形緩沖區(qū)鏈表指針,.,53,任務(wù)間通信互斥,為避免內(nèi)存訪問競爭,需要內(nèi)存訪問互鎖有許多方法可以實現(xiàn)資源的訪問互斥:禁止中斷、禁止搶占、信號量禁止中斷(最強大,時間要盡量短)intlock=intLock();.U

8、nlock(lock);禁止搶占(可以被中斷)taskLock();,.,54,任務(wù)間通信信號量,信號量(Semaphore)是解決互斥和任務(wù)同步的最主要手段信號量提供比中斷禁止和搶占禁止更精細(xì)的互斥信號量協(xié)調(diào)任務(wù)的執(zhí)行和外部事件,以實現(xiàn)任務(wù)同步Wind將信號量優(yōu)化為三類,以解決不同類型的問題:二進制:最快,最通用的信號量,用于同步和互斥互斥:專門解決互斥問題而優(yōu)化的二進制信號量:優(yōu)先權(quán)繼承、刪除保護和遞歸計數(shù):類似二進制,但記錄信號量發(fā)放的次數(shù),為守護資源的多個實例而優(yōu)化,.,55,任務(wù)間通信消息隊列,任何task或者ISR都可以向消息隊列中放入消息,多個task可以向同一個消息隊列中發(fā)送消

9、息或者從其中接收消息兩個task之間的雙向通信,通常需要兩個消息隊列,每個方向一個消息隊列中的消息個數(shù)和每個消息的長度都是可變的VxWorks支持兩種消息隊列庫:WindQueuePOSIXQueue超時,.,56,任務(wù)間通信管道(Pipes),管道是虛擬的I/O設(shè)備Task使用標(biāo)準(zhǔn)的I/O例程操作管道Open,read,write,ioctl管道支持select函數(shù),.,57,任務(wù)間通信Task網(wǎng)絡(luò)通信,Sockets支持TCP/UDP與BSD4.4UNIX兼容遠(yuǎn)端過程調(diào)用(RPC)RPC允許一個機器上的進程調(diào)用同一個機器或者別的機器上運行的過程RPC內(nèi)部使用socket作為底層通信手段,.

10、,58,任務(wù)間通信信號(Signal),信號可以異步地改變task的執(zhí)行流程任何task或ISR都可以向某個task發(fā)送一個信號收到信號的task立即掛起,下次被調(diào)度時運行信號處理例程信號處理例程使用接收task的上下文和堆棧信號處理例程應(yīng)當(dāng)作ISR來對待即使接收task被阻塞,依然能夠喚醒信號處理例程信號更適用于錯誤或異常處理,而不是一般的Task通信,.,59,POSIX、ISR、WatchDog,.,60,POSIX兼容,POSIX:thePortableOperationSystemInterfaceISO/IEEE制定的一組接口,以支持應(yīng)用程序在不同操作系統(tǒng)上的源代碼的移植,使用這些

11、接口有助于將軟件從一個操作系統(tǒng)移植到另一個操作系統(tǒng)。實時操作系統(tǒng)對應(yīng)的POSIX接口標(biāo)準(zhǔn)為1003.1b(原來的1003.4),VxWorks幾乎都支持,重要包括:異步I/O、信號量、消息隊列、內(nèi)存管理、排隊信號調(diào)度、時鐘和定時器,.,61,POSIX接口,VxWorksWind內(nèi)核包括:POSIX接口和專為VxWorks設(shè)計的接口,對應(yīng)兩種不同調(diào)度。POSIX調(diào)度基于進程(不可直接訪問內(nèi)存,父子關(guān)系)基于FIFO,優(yōu)先數(shù)越高,優(yōu)先級越高Wind調(diào)度基于任務(wù)(可直接訪問內(nèi)存)基于優(yōu)先級的搶占式調(diào)度,優(yōu)先數(shù)越低,優(yōu)先級越高POSIX時鐘和定時器,支持多個虛擬時鐘,.,62,中斷服務(wù)代碼(ISR)

12、,為盡快響應(yīng)中斷請求,中斷服務(wù)例程在task上下文以外的特別的上下文中運行,因而喚醒ISR,不需要切換任務(wù)上下文使用intConnect(),可以將C函數(shù)與任何中斷連接起來有些結(jié)構(gòu)支持獨立的中斷堆棧,有些不支持,由BSP決定ISR的特別限制(沒有TCB):ISR不能調(diào)用可能使自己被阻塞的例程ISR不能分配和釋放內(nèi)存,或調(diào)用包含分配和釋放內(nèi)存的函數(shù)ISR不能通過I/O訪問設(shè)備,因為可能阻塞ISR使用logMsg()來向控制臺(console)打印消息,.,63,中斷服務(wù)代碼,ISR出現(xiàn)異常時無法掛起,VxWorks將異常描述存放到低端內(nèi)存,然后重新啟動系統(tǒng);VxWorksbootROM測試低端內(nèi)

13、存,并將異常描述打印到控制臺上可以為某些事件預(yù)留最高級別的中斷,實現(xiàn)0時延響應(yīng)ISR到Task的通信共享內(nèi)存和環(huán)形緩沖區(qū)信號量(ISR只能釋放信號量)消息隊列(使用NO_WAIT參數(shù))管道(只能write)信號(ISR用信號通知Task),.,64,WatchDog定時器,VxWorks提供WatchdogTimer機制,允許任何C函數(shù)與一個特定的時間延遲相聯(lián)系。通常,作為系統(tǒng)中斷服務(wù)程序的一部分來維護。利用Watchdog來處理任務(wù)時限wdCreate()分配并初始化一個watchdog定時器wdDelete()終止并刪除一個watchdog定時器wdStart()啟動一個watchdog定

14、時器wdCancel()取消一個正在計時的watchdog,.,65,I/O系統(tǒng),VxWorks的I/O系統(tǒng)提供對多種設(shè)備的統(tǒng)一訪問基本I/O例程:creat(),remove(),open(),close(),read(),write(),ioctl().高級I/O例程:printf(),scanf()VxWorks提供標(biāo)準(zhǔn)緩沖I/O例程fopen(),fclose(),fread(),fwrite(),getc(),putc()VxWorks的I/O系統(tǒng)還提供POSIX兼容的異步I/O在執(zhí)行任務(wù)其它動作的同時執(zhí)行輸入和輸出VxWorks可動態(tài)安裝和卸載設(shè)備驅(qū)動而無需重新啟動系統(tǒng),.,66,

15、VxWorks的I/O系統(tǒng),VxWorks的I/O系統(tǒng)為各種設(shè)備提供簡單的、統(tǒng)一的、與設(shè)備無關(guān)的接口,包括:面向字符的設(shè)備,如終端隨機訪問塊設(shè)備,如磁盤虛擬設(shè)備,如task間的管道和socket監(jiān)視和控制設(shè)備,如數(shù)字/模擬I/O設(shè)備訪問遠(yuǎn)端設(shè)備的網(wǎng)絡(luò)設(shè)備VxWorks為基本I/O和有緩沖區(qū)I/O提供標(biāo)準(zhǔn)C庫VxWorks的I/O系統(tǒng)設(shè)計使之比大多數(shù)I/O系統(tǒng)更快更靈活,這對實時系統(tǒng)很重要,.,67,VxWorks的I/O系統(tǒng),.,68,文件、設(shè)備及驅(qū)動,在VxWorks中,應(yīng)用程序通過打開文件來訪問I/O設(shè)備文件指下面兩種事物之一:未結(jié)構(gòu)化的“原始”設(shè)備,如串行通信通道或者任務(wù)間管道位于一個結(jié)

16、構(gòu)化的、隨機訪問的、包含文件系統(tǒng)的設(shè)備上的邏輯文件I/O設(shè)備有兩個級別:基本I/O和有緩沖區(qū)I/O文件名和缺省設(shè)備:/usrNFS網(wǎng)絡(luò)設(shè)備Host:Non-NFS網(wǎng)絡(luò)設(shè)備Dev:dosFs文件系統(tǒng)設(shè)備,.,69,基本I/O,基本I/O在VxWorks中是最低級的I/O,其接口與標(biāo)準(zhǔn)C庫的I/O原語兼容creat()創(chuàng)建一個文件open()打開一個文件(也可創(chuàng)建一個文件)close()關(guān)閉一個文件read()讀一個已經(jīng)創(chuàng)建或打開的文件write()寫一個已經(jīng)創(chuàng)建或打開的文件ioctl()對文件或設(shè)備執(zhí)行特定控制功能在基本I/O級別,文件用文件描述字(fd)指示,它是一個整數(shù),在creat()或o

17、pen()時返回Fd不用后應(yīng)及時關(guān)閉,以節(jié)約資源,.,70,ioctl(),為了運行某些不適合于其它基本I/O的I/O函數(shù),使用ioctl()設(shè)置或查詢一些屬性,譬如:當(dāng)前設(shè)備可輸入多少字節(jié)設(shè)置設(shè)備的特定選項獲取某個文件系統(tǒng)的信息Ioctl()的參數(shù)是fd、指示請求函數(shù)的代碼、和一個函數(shù)需要的參數(shù):result=ioctl(fd,function,arg);將一個tty設(shè)備的數(shù)據(jù)波特率設(shè)為9600的例子:status=ioctl(fd,FIOBAUDRATE,9600);,.,71,有緩存的I/O:Stdio,低級I/O調(diào)用會帶來一些開銷,為提高I/O訪問的靈活性和效率VxWorks提供了有緩

18、存的I/O機制Stdio的I/O函數(shù)提供透明的緩存機制,提高訪問效率FILE*fp;fp=fopen(/usr/foo,r);標(biāo)準(zhǔn)輸入、輸出、和出錯StdinStdoutStderr,.,72,其它格式化I/O,特殊情況:printf(),sprintf(),andsscanf()屬于fioLib,沒有緩存附加函數(shù):printErr()andfdprintf()消息日志提供日志功能避免當(dāng)前任務(wù)訪問I/O可以重定向到其它I/O,.,73,VxWorks中的設(shè)備,ttyDrvTerminaldriverptyDrvPseudo-terminaldriverpipeDrvPipedrivermemD

19、rvPseudomemorydevicedrivernfsDrvNFSclientdrivernetDrvNetworkdriverforremotefileaccessramDrvRAMdriverforcreatingaRAMdiskscsiLibSCSIinterfacelibrary-Otherhardware-specificdrivers,.,74,VxWorks與主機系統(tǒng)的I/O差別,設(shè)備配置:在VxWorks中設(shè)備驅(qū)動可以動態(tài)安裝和卸載文件描述字:在Windows和Unix中,fd是進程中唯一的;在VxWorks中fd是全局唯一的,標(biāo)準(zhǔn)輸入輸出例外(0,1,2)I/O控制:Un

20、ix和VxWorks中傳給ioctl()的參數(shù)可能不同驅(qū)動例程:Unix下設(shè)備驅(qū)動運行于系統(tǒng)模式下,不可搶占;VxWorks下的設(shè)備驅(qū)動運行于線程模式下,可搶占。,.,75,內(nèi)部結(jié)構(gòu),多數(shù)系統(tǒng)的設(shè)備驅(qū)動只提供少數(shù)低級I/O例程,如輸入、輸出等;大部分工作由I/O系統(tǒng)完成。驅(qū)動易實現(xiàn)設(shè)備動作盡可能類似驅(qū)動編寫人員很難完成I/O系統(tǒng)未提供的協(xié)議VxWorks中I/O系統(tǒng)用于將用戶請求交給適當(dāng)?shù)脑O(shè)備驅(qū)動,每個驅(qū)動根據(jù)自己的情況處理用戶的I/O請求。VxWorks提供高級例程庫用于設(shè)備驅(qū)動的編寫為標(biāo)準(zhǔn)設(shè)備寫驅(qū)動很容易,編碼量小可以根據(jù)情況用非標(biāo)準(zhǔn)方式實現(xiàn)用戶請求,.,76,設(shè)備驅(qū)動程序,驅(qū)動初始化例程

21、xxDrv()安裝驅(qū)動、分配數(shù)據(jù)結(jié)構(gòu)、連接中斷服務(wù)例程、初始化硬件設(shè)備創(chuàng)建xxDevCreate()給驅(qū)動增加一個設(shè)備,參數(shù)包括緩沖區(qū)大小、設(shè)備地址等為設(shè)備初始化數(shù)據(jù)結(jié)構(gòu)、信號量和硬件等基本I/O功能xxOpen(),xxRead(),xxWrite(),xxIoctl()中斷服務(wù)例程xxInterrupt(),.,77,驅(qū)動安裝,I/O系統(tǒng)維護一個驅(qū)動表,將用戶的I/O請求轉(zhuǎn)換為適當(dāng)?shù)尿?qū)動程序使用iosDrvInstall()動態(tài)安裝驅(qū)動,參數(shù)為新驅(qū)動的7個I/O例程的地址,iosDrvInstall()將地址放入驅(qū)動表的空閑條目,返回此條目的索引,稱為驅(qū)動號。文件系統(tǒng)在驅(qū)動表中有自己的條目,它們在文件系統(tǒng)庫初始化時創(chuàng)建。,.,78,驅(qū)動安裝舉例,.,79,設(shè)備,一些驅(qū)動可以為某種設(shè)備的多個實例服務(wù)在VxWorks中,數(shù)據(jù)結(jié)構(gòu)設(shè)備頭(DEV_HDR)定義設(shè)備設(shè)備名,設(shè)備的驅(qū)動的編號(Index)DEV_HDR保存在駐留內(nèi)存的設(shè)備列表(device_list)中DEV_HDR是設(shè)備描述字(devicedescriptor)的開始部分,后者包括特定設(shè)備的數(shù)據(jù):設(shè)備地址,緩沖區(qū),信號量設(shè)備描述字只要以DEV_HDR開頭便可,可包

溫馨提示

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

評論

0/150

提交評論