(6)Vxwork實時操作系統(tǒng)_第1頁
(6)Vxwork實時操作系統(tǒng)_第2頁
(6)Vxwork實時操作系統(tǒng)_第3頁
(6)Vxwork實時操作系統(tǒng)_第4頁
(6)Vxwork實時操作系統(tǒng)_第5頁
已閱讀5頁,還剩104頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2022-6-271第六講:第六講:VxWorks實時操作系統(tǒng)張小波老師張小波老師 2022-6-272n網(wǎng)絡(luò)產(chǎn)品實現(xiàn)方法的演進n實時系統(tǒng)nVxWorks介紹nTornado開發(fā)環(huán)境介紹nBSPn設(shè)備驅(qū)動2022-6-273實現(xiàn)方法的演進n基于PC 的架構(gòu) (80s-90s Early) 軟件實現(xiàn)n基于ASIC+MPU的架構(gòu) (90s Middle) 軟件控制,硬件線速處理2022-6-274基于PC的架構(gòu)CPU存儲器存儲器網(wǎng)網(wǎng) 卡卡PCIMAC本地緩存網(wǎng)卡網(wǎng)卡PCIPCI顯卡顯卡EthernetEthernet 主主 板板OS (Linux)API應用程序應用程序硬件源代碼(C)MAC終端B

2、IOS問題:1、接口速率問題(up to 100M);2、處理容量問題;3、安全性問題;上層軟件上層軟件本地緩存2022-6-275工作組/園區(qū)路由器的基本結(jié)構(gòu)-Cisco 7200 router CPUHost-BdramsrampcmciaPci-BLine cardLine cardLine cardLine cardLine cardLine cardEpromduartPci-B2022-6-276路由器基本結(jié)構(gòu)交換開關(guān)線卡線卡線卡線卡協(xié)議軟件網(wǎng)絡(luò)接口分類整形過濾轉(zhuǎn)發(fā)報文緩沖和 調(diào)度物理鏈路交換開關(guān)2022-6-277基于ASIC+MPU的架構(gòu)(1)輸入處理輸出處理交換路由協(xié)議擁塞控

3、制其它安全計費接納控制控制控制平面平面數(shù)據(jù)數(shù)據(jù)平面平面路由查找路由器層次結(jié)構(gòu)(硬件上層軟件)路由器層次結(jié)構(gòu)(硬件上層軟件)2022-6-278基于ASIC+MPU的架構(gòu)(2)BSPMPU存儲器存儲器ASICL2 switch /L3 Forwarding CPU總線總線MACEthernetRTOS (Vxworks)API應用程序應用程序硬件MACEthernet串口E口存儲器Tornado開發(fā)環(huán)境,C源代碼21問題:1、速率與功能受限于Chip;2、ASIC,速率低;FPGA,周期長;4、可擴展性差。2022-6-279控控制制平平面面信令消息 高高層層 建立呼叫和連接 /網(wǎng)絡(luò)層AAL 管

4、管理理平平面面 維護網(wǎng)絡(luò)、連接路由、執(zhí)行操作 /網(wǎng)絡(luò)層 CPCS+SSCS 信令實體間的連接 /鏈路層 SAR 分段重組 /鏈路層用用戶戶平平面面用戶信息 高高層層 類似 OSI 高層的功能 /會話層 CPCS+SSCS 端到端無差錯連接 /傳輸層 SAR 分段重組 /傳輸層 ATM 相當于鏈路層下邊界 PHY 相當于物理層注:AAL層對用戶信息相當L4的下邊界,對控制信息相當L2的下邊界ATM層次模型2022-6-2710單板介紹交換板SDRAMFLASH MPC860SAR 串口HDLC A P CCRAMBRAM以太網(wǎng) A P CCRAMBRAMHDLC主備控制復位電路VCRAMPRAM

5、VCRAMPRAM去主控板U2U22022-6-2711實時系統(tǒng)定義n對于給定一個時間約束量對于給定一個時間約束量 0 0,如果如果系統(tǒng)系統(tǒng)S S在在T1T1時刻接受到輸入,在時刻接受到輸入,在T2T2時刻時刻給出合理的輸出,且使給出合理的輸出,且使T2-T1T2-T1。則則稱系統(tǒng)稱系統(tǒng)S S滿足要求的時間滿足要求的時間的實時性,的實時性,通常稱系統(tǒng)通常稱系統(tǒng)S S為實時系統(tǒng)。為實時系統(tǒng)。n“正確、但遲后的結(jié)果也是錯誤的正確、但遲后的結(jié)果也是錯誤的”2022-6-2712n時間約束是相對的n關(guān)鍵因素:系統(tǒng)對外部激勵的響應時間 實時系統(tǒng)時間軟件工程科學計算事物診斷測試信號處理物理測量進程仿真飛行

6、器仿真遙測領(lǐng)域領(lǐng)域?qū)崟r系統(tǒng)開發(fā)財務處理醫(yī)療測試分析工業(yè)自動化地震分析網(wǎng)絡(luò)控制飛行仿真導彈仿真應用應用 1s100ms 10ms1ms100s50s10s1s2022-6-2713計算機系統(tǒng)的組成應用軟件H/WOperating System抽象層間件中2022-6-2714實時操作系統(tǒng)n實時操作系統(tǒng)允許應用程序滿足嚴格的時間要求n多任務內(nèi)核n實時調(diào)度(基于優(yōu)先級的搶占)n任務間通信n互斥n其它功能作為庫由Kernel調(diào)度2022-6-2715實時操作系統(tǒng)中的概念n多任務n調(diào)度n優(yōu)先權(quán)n時間片n通信和同步n資源共享n事件n互斥n信號量n郵箱2022-6-2716多任務n 目的:優(yōu)化系統(tǒng)資源(CP

7、U 時間、內(nèi)存、磁盤、驅(qū)動器.)的使用n多任務 OSn允許多個任務并發(fā)和獨立地在系統(tǒng)上運行n實現(xiàn)獨占和共享系統(tǒng)資源n根據(jù)所需的輸入/輸出資源,控制任務執(zhí)行n任務(Task)、Process、Agent、Threadn邏輯整體動態(tài)(進程)實體2022-6-2717Task與Program的區(qū)別n程序 (program)n靜態(tài)實體,由一個或多個指令序列,管理一組數(shù)據(jù)(內(nèi)部或外部變量)n 任務(task)n動態(tài)實體,運行一個或多個程序,以實現(xiàn)處理器上指定的活動2022-6-2718任務的不同狀態(tài)運行掛起阻塞刪除運行處理器處理器分配分配休眠休眠其它任務其它任務搶先搶先喚醒喚醒等待資源只等待處理器202

8、2-6-2719調(diào) 度n調(diào)度器負責任務的狀態(tài)管理和當前任務的選擇n分發(fā)器選擇由調(diào)度器推舉的當前的任務(有效的上下文切換)n處理器分配算法的判據(jù)選擇有:n任務優(yōu)先、其壽命、消耗的CPU時間、等等n用調(diào)度器動態(tài)調(diào)整2022-6-2720優(yōu)先權(quán)優(yōu)先權(quán)優(yōu)先權(quán)系統(tǒng)錯誤處理硬件事件管理設(shè)備驅(qū)動器 最短用戶任務 最長注釋 唯一重要的優(yōu)先權(quán)是任務 之間的相對優(yōu)先權(quán)2022-6-2721通信和同步n任務互操作,以便合作完成公共活動n目的n管理任務間共享的系統(tǒng)資源,避免系統(tǒng)死鎖2022-6-2722資源共享n資源可以是n軟件或硬件n局部(僅在一個任務內(nèi)使用)或公用n能共享的資源有最大的進入能力2022-6-272

9、3互 斥n避免數(shù)據(jù)或者代碼不一致的機制n互斥n當幾個任務共享非重入資源(判據(jù))時發(fā)生互斥n信號量n信號量類同于售票機2022-6-2724郵 箱n郵箱是任務之間的交換區(qū)n2個隊列與郵箱有關(guān)n一個是消息隊列n一個是任務隊列(多個發(fā)送和接受)msg1msg2msg3sendreceive2022-6-2725VxworksVxworks操作系統(tǒng)是一個操作系統(tǒng)是一個嵌入式實時操作系統(tǒng)(嵌入式實時操作系統(tǒng)(RTOSRTOS)。VxworksVxworks與其它實時與其它實時OSOS一樣,基于以下兩個重要機制:一樣,基于以下兩個重要機制: * * 多任務環(huán)境及任務間通信多任務環(huán)境及任務間通信 * * 硬

10、件中斷處理硬件中斷處理VxworksVxworks多任務內(nèi)核完成的功能是:多任務內(nèi)核完成的功能是:實時調(diào)度,任務間通信及互斥實時調(diào)度,任務間通信及互斥。其它功能則作為系統(tǒng)庫圍繞在內(nèi)核周圍,它們可根據(jù)需要進行剪裁。其它功能則作為系統(tǒng)庫圍繞在內(nèi)核周圍,它們可根據(jù)需要進行剪裁。VxworksVxworks與非實時系統(tǒng)的不同之處在于:與非實時系統(tǒng)的不同之處在于: VxworksVxworks的優(yōu)先搶占機制基于調(diào)度,的優(yōu)先搶占機制基于調(diào)度, VxworksVxworks對外部事件的反應和處理快,對外部事件的反應和處理快, VxworksVxworks容量小并且可配置(微內(nèi)核結(jié)構(gòu))容量小并且可配置(微內(nèi)核

11、結(jié)構(gòu))VxWorks2022-6-2726VxWorks組件n高性能實時內(nèi)核nPOSIX(1003.1b)兼容接口nI/O系統(tǒng)n本地文件系統(tǒng)nC/C+開發(fā)支持n共享內(nèi)存n虛擬內(nèi)存n目標機駐留工具2022-6-2727VxWorks組件(續(xù))n工具庫n性能評估工具n目標機代理n板支持包(BSP)nVxWorks仿真器和邏輯分析儀(WindView)n網(wǎng)絡(luò)組件2022-6-2728內(nèi)核(Kernel)nVxWorks的內(nèi)核叫Windn包括n多任務搶占和優(yōu)先權(quán)調(diào)度多任務搶占和優(yōu)先權(quán)調(diào)度n任務間同步和通信n中斷處理nWatchDog定時器n內(nèi)存管理多任務內(nèi)核、任務機制、任務間通信和中斷處理機制是多任務

12、內(nèi)核、任務機制、任務間通信和中斷處理機制是VxWorks運行運行環(huán)境的核心。其中,多任務和任務間通信是現(xiàn)代實時操作系統(tǒng)的基石。環(huán)境的核心。其中,多任務和任務間通信是現(xiàn)代實時操作系統(tǒng)的基石。2022-6-2729內(nèi)核多任務n任務控制塊(TCB)n任務狀態(tài)轉(zhuǎn)換n任務調(diào)度n任務控制n任務擴展nPOSIX任務調(diào)度接口(略)n任務錯誤狀態(tài):errnon任務異常處理(Exception Handle)n共享代碼和重入(Shared code and reentrancy)n系統(tǒng)任務(System Task)2022-6-2730內(nèi)核任務控制塊(TCB)n保存任務的上下文,一個任務的上下文包括:n程序執(zhí)行指

13、針nCPU寄存器和浮點寄存器n動態(tài)變量和函數(shù)調(diào)用的堆棧n標準輸入、輸出和錯誤的I/O分配n延遲定時器n時間片定時器n內(nèi)核控制結(jié)構(gòu)n信號處理器n調(diào)試和性能監(jiān)視值2022-6-2731內(nèi)核任務狀態(tài)轉(zhuǎn)換一切就緒,只差一切就緒,只差CPU 等待某種資源等待某種資源處于睡眠狀態(tài),延遲一段時間處于睡眠狀態(tài),延遲一段時間被中斷,用于調(diào)試被中斷,用于調(diào)試2022-6-2732任務狀態(tài)隊列KernelTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBCPU掛起隊列阻塞隊列睡眠隊列就緒隊列執(zhí)行內(nèi)核負責維護系統(tǒng)中內(nèi)核負責維護系統(tǒng)中所有任務的當前狀態(tài)所有任務的當前狀態(tài)。一個任務

14、的狀態(tài)轉(zhuǎn)變是一個任務的狀態(tài)轉(zhuǎn)變是 應用調(diào)用內(nèi)核調(diào)用的結(jié)果。應用調(diào)用內(nèi)核調(diào)用的結(jié)果。2022-6-2733內(nèi)核 Wind 任務調(diào)度n優(yōu)先級搶占調(diào)度(缺?。﹏優(yōu)先級高的Task搶占CPUn0255,256個優(yōu)先級,0級最高,255級最低n輪詢調(diào)度n優(yōu)先級相同時,多個Task輪流占用CPUn搶占鎖定n獨占CPU,其它高優(yōu)先級的Task不能搶占CPU2022-6-2734內(nèi)核 Wind Task調(diào)度基于優(yōu)先級的搶占調(diào)度基于優(yōu)先級的搶占調(diào)度基于優(yōu)先級的搶占調(diào)度基于優(yōu)先級的搶占調(diào)度與輪轉(zhuǎn)調(diào)度算法結(jié)合與輪轉(zhuǎn)調(diào)度算法結(jié)合2022-6-2735內(nèi)核 任務控制函數(shù)ntaskSpawn():創(chuàng)建并激活一個task(

15、定位)ntaskInit():初始化一個新taskntaskActivate():激活一個taskTask ID:32bits,指向task控制塊的指針(ID 0指調(diào)用task)Task Name:代表task的ASCII字符串nTask選項n獲取Task信息nTask刪除和刪除保險nTask控制:改變task的狀態(tài)低級操作參數(shù):所有從目標機啟動的任務以字母所有從目標機啟動的任務以字母 t開頭,所有從主機啟動的任務以字母開頭,所有從主機啟動的任務以字母 u開頭開頭2022-6-2736內(nèi)核 任務擴展函數(shù)n為擴展與task相關(guān)的功能,Wind提供勾連(hook)功能,在task創(chuàng)建、切換、刪除時

16、,自動喚起相關(guān)的勾連例程。n在TCB中有一個字段存放此擴展ntaskCreateHookAdd()每個task創(chuàng)建時增加一個例程ntaskCreateHookDelete()ntaskSwitchHookAdd()ntaskSwitchHookDelete()ntaskDeleteHookAdd()ntaskDeleteHookDelete()2022-6-2737內(nèi)核 任務錯誤狀態(tài):errnonErrno是一個預定義的全局變量n多任務情況下,每個任務有自己的errno,作為task上下文的一部分,中斷服務程序(ISR)也有自己的errnon慣例:程序返回OK(0)表示成功,ERROR(-1)

17、表示失?。蝗舴祷刂羔?,則NULL(0)表示失敗。n返回ERROR或NULL時,通常設(shè)置errno表示具體錯誤代碼nErrno總表示最近的錯誤狀態(tài),不會被清除n如果errno在錯誤狀態(tài)符號表(statSymTbl)中有對應字符串,則可以使用printErrno()顯示錯誤內(nèi)容(不能用在ISR中)n盡量使用logMsg()來顯示錯誤信息,因為它在task和ISR下都能工作2022-6-2738內(nèi)核 Errno分配nErrno編碼中使用前兩個字節(jié)表示產(chǎn)生錯誤的模塊,后兩個字節(jié)表示每個錯誤號nVxWorks系統(tǒng)的模塊號為1-500,0用于源代碼兼容n應用程序的模塊號為大于500的正數(shù)和所有負數(shù)errn

18、o4bytes模塊號錯誤狀態(tài)號2022-6-2739內(nèi)核用戶自定義errnon在用戶頭文件目錄下創(chuàng)建xxModNum.h,定義自己的模塊:#define M_lemLib (512 symbol table components error status table.n重新編譯VxWorksn如果要將錯誤代碼加入WindShell,需要將新模塊的錯誤字符串加入文件host/resource/tcl/errnoTbl.tcl或者$(HOME)/.wind/windsh.tcl中set M_lemLib expr 512 16set errnoTbl expr $M_lemLib | 1 S_le

19、mLib_LEM_INIT_FAILset errnoTbl expr $ M_lemLib | 2 S_lemLib_LEM_CLOSE_FAILset errnoTbl expr $ M_lemLib | 3 S_lemLib_MSG_TYPE_ERROR2022-6-2741內(nèi)核 任務異常處理nVxWorks的異常處理包負責所有異常處理n缺省的異常處理是掛起此task,并保存異常點的task狀態(tài),其它task繼續(xù)運行nTornado的開發(fā)工具可以查看掛起task的狀態(tài)n也可以通過信號(signal)將某硬件或軟件的異常處理與自己的處理程序關(guān)聯(lián)2022-6-2742內(nèi)核共享代碼和重入n被多

20、個task調(diào)用的代碼叫共享代碼,共享代碼必須可重入n若代碼要修改全局/靜態(tài)變量,則不可重入,否則會引起數(shù)據(jù)混亂n多數(shù)例程可重入,但如果例程foo() 還有一個對應的foo_r()例程,則foo()是不可重入的nVxWorks使用以下可重入技術(shù):n動態(tài)堆棧變量n全局變量和靜態(tài)變量由信號量守護n任務變量Taskone(void) MyFune( ); Tasktwo(void) MyFune( ); MyFune(void) 任務代碼共享2022-6-2743內(nèi)核 VxWorks系統(tǒng)任務nRoot Task,tUsrRoot是內(nèi)核執(zhí)行的第一個task,它創(chuàng)建其它task,完成任務后被停止并刪除n日

21、志Task,tLogTask記錄系統(tǒng)日志消息,而不必執(zhí)行I/On異常Task,tExcTask支持VxWorks的異常處理n網(wǎng)絡(luò)Task,tNetTask處理網(wǎng)絡(luò)的任務級別的功能n目標機代理Task,tWdbTask處理debug請求nTask可選組件ntShell、tRlogind、tTelnetd、tPortmapd2022-6-2744任務間通信Vxworks提供了一套豐富的任務間通信機制,包括:n共享數(shù)據(jù)結(jié)構(gòu)/內(nèi)存共享(Shared memory): 簡單的數(shù)據(jù)共享方法n信號量(Semaphore) : 用于基本的互斥及同步n消息隊列(Message Queue)和管道(Pipes)

22、: 用于同一CPU上任務間消息的傳遞n套接口(Socket)和遠程程序調(diào)用(RPC): 用于網(wǎng)絡(luò)上任務間的通信n信號(Signals) : 用于異常處理2022-6-2745任務間通信共享數(shù)據(jù)結(jié)構(gòu)n共享數(shù)據(jù)結(jié)構(gòu)nVxWorks中所有task存在于一個線性的地址空間中,所以task之間共享數(shù)據(jù)結(jié)構(gòu)很容易n這些數(shù)據(jù)結(jié)構(gòu)可以是n全局變量n線形緩沖區(qū)n環(huán)形緩沖區(qū)n鏈表n指針2022-6-2746任務間通信共享內(nèi)存Vxworks提供了三種共享內(nèi)存的對象(shared-memory objects)來實現(xiàn)在不同任務之間和不同CPU的任務間的高速同步和通信。n共享信號量共享信號量(shared semaph

23、oresshared semaphores):): 有二進制,記數(shù)型兩種,用于在不同CPU上的任務間的同步,和對共享數(shù)據(jù)結(jié)構(gòu)的互斥訪問n共享消息隊列(共享消息隊列(shared message queuesshared message queues):): 允許多個處理器上的任務交換消息n共享內(nèi)存分區(qū)(共享內(nèi)存分區(qū)(shared-memory partitionsshared-memory partitions):): 有系統(tǒng)類型和用戶類型可以用于為不同處理器上的任務分配公共數(shù)據(jù)空間2022-6-2747任務間通信互斥n為避免內(nèi)存訪問競爭,需要內(nèi)存訪問互鎖n有許多方法可以實現(xiàn)資源的訪問互斥:n

24、禁止中斷、禁止搶占、信號量n禁止中斷(最強大,時間要盡量短)nint lock = intLock();n . . critical region that cannot be interrupted . nintUnlock (lock); n禁止搶占(可以被中斷)ntaskLock ();n . .critical region that cannot be interrupted . ntaskUnlock (); 2022-6-2748任務間通信信號量n信號量(Semaphore)是解決互斥和任務同步的最主要手段n信號量提供比中斷禁止和搶占禁止更精細的互斥n信號量協(xié)調(diào)任務的執(zhí)行和外部事

25、件,以實現(xiàn)任務同步nWind將信號量優(yōu)化為三類,以解決不同類型的問題:n二進制:最快,最通用的信號量,用于同步和互斥n互斥:專門解決互斥問題而優(yōu)化的二進制信號量:優(yōu)先權(quán)繼承、刪除保護和遞歸n計數(shù):類似二進制,但記錄信號量發(fā)放的次數(shù),為守護資源的多個實例而優(yōu)化nPOSIX信號量(略)2022-6-2749任務間通信消息隊列n任何task或者ISR都可以向消息隊列中放入消息,多個task可以向同一個消息隊列中發(fā)送消息或者從其中接收消息n兩個task之間的雙向通信,通常需要兩個消息隊列,每個方向一個n消息隊列中的消息個數(shù)和每個消息的長度都是可變的nVxWorks支持兩種消息隊列庫:nWind Que

26、uenPOSIX Queuen超時n優(yōu)先級2022-6-2750任務間通信管道(Pipes)n管道是虛擬的I/O設(shè)備nTask使用標準的I/O例程操作管道nOpen, read, write, ioctln管道支持select函數(shù)2022-6-2751任務間通信 Task網(wǎng)絡(luò)通信nSocketsn支持TCP/UDPn與BSD 4.4 UNIX兼容n遠端過程調(diào)用(RPC)nRPC允許一個機器上的進程調(diào)用同一個機器或者別的機器上運行的過程nRPC內(nèi)部使用socket作為底層通信手段2022-6-2752任務間通信信號(Signal)n信號可以異步地改變task的執(zhí)行流程n任何task或ISR都可以

27、向某個task發(fā)送一個信號n收到信號的task立即掛起,下次被調(diào)度時運行信號處理例程n信號處理例程使用接收task的上下文和堆棧n信號處理例程應當作ISR來對待n即使接收task被阻塞,依然能夠喚醒信號處理例程n信號更適用于錯誤或異常處理,而不是一般的Task通信nWind支持兩種信號接口:nUNIX BSD風格、POSIX兼容2022-6-2753POSIX兼容nPOSIX:the Portable Operation System InterfacenISO/IEEE制定的一組接口,以支持應用程序在不同操作系統(tǒng)上的源代碼的移植,使用這些接口有助于將軟件從一個操作系統(tǒng)移植到另一個操作系統(tǒng)。n

28、實時操作系統(tǒng)對應的POSIX接口標準為1003.1b(原來的1003.4),VxWorks幾乎都支持,重要包括:n異步I/On信號量n消息隊列n內(nèi)存管理n排隊信號n調(diào)度n時鐘和定時器2022-6-2754POSIX接口nVxWorks Wind內(nèi)核包括: POSIX接口和專為VxWorks設(shè)計的接口,對應兩種不同調(diào)度。nPOSIX調(diào)度基于進程(不可直接訪問內(nèi)存,父子關(guān)系)基于FIFO,優(yōu)先數(shù)越高,優(yōu)先級越高nWind調(diào)度基于任務(可直接訪問內(nèi)存)基于優(yōu)先級的搶占式調(diào)度,優(yōu)先數(shù)越低,優(yōu)先級越高nPOSIX時鐘和定時器,支持多個虛擬時鐘nPOSIX內(nèi)存上鎖接口,支持分頁和交換技術(shù)2022-6-27

29、55中斷服務代碼(ISR)n為盡快響應中斷請求,中斷服務例程在task上下文以外的特別的上下文中運行,因而喚醒ISR,不需要切換任務上下文n使用intConnect(),可以將C函數(shù)與任何中斷連接起來n有些結(jié)構(gòu)支持獨立的中斷堆棧,有些不支持,由BSP決定nISR的特別限制(沒有TCB):nISR不能調(diào)用可能使自己被阻塞的例程nISR不能分配和釋放內(nèi)存,或調(diào)用包含分配和釋放內(nèi)存的函數(shù)nISR不能通過I/O訪問設(shè)備,因為可能阻塞nISR使用logMsg()來向控制臺(console)打印消息nISR不能使用浮點協(xié)處理器nISR可以使用所有VxWorks的工具庫,支持errno2022-6-2756

30、中斷服務代碼nISR出現(xiàn)異常時無法掛起,VxWorks將異常描述存放到低端內(nèi)存,然后重新啟動系統(tǒng);VxWorks boot ROM測試低端內(nèi)存,并將異常描述打印到控制臺上n可以為某些事件預留最高級別的中斷,實現(xiàn)0時延響應nISR到Task的通信n共享內(nèi)存和環(huán)形緩沖區(qū)n信號量(ISR只能釋放信號量)n消息隊列(使用NO_WAIT參數(shù))n管道(只能write)n信號(ISR用信號通知Task)2022-6-2757WatchDog定時器nVxWorks提供Watchdog Timer機制,允許任何C函數(shù)與一個特定的時間延遲相聯(lián)系。通常,作為系統(tǒng)中斷服務程序的一部分來維護。n利用Watchdog來處

31、理任務時限vwdCreate() 分配并初始化一個watchdog定時器vwdDelete() 終止并刪除一個watchdog定時器vwdStart() 啟動一個watchdog定時器vwdCancel() 取消一個正在計時的watchdog2022-6-2758內(nèi) 容n網(wǎng)絡(luò)產(chǎn)品實現(xiàn)方法的演進n實時系統(tǒng)nVxWorks介紹基本定義內(nèi)核(Wind)任務間通信POSIX、ISR、WatchdogI/O系統(tǒng)及其他nTornado開發(fā)環(huán)境介紹nBSPn設(shè)備驅(qū)動2022-6-2759VxWorks的I/O系統(tǒng)nVxWorks的I/O系統(tǒng)為各種設(shè)備提供簡單的、統(tǒng)一的、與設(shè)備無關(guān)的接口,包括:n面向字符的設(shè)

32、備,如終端n隨機訪問塊設(shè)備,如磁盤n虛擬設(shè)備,如task間的管道和socketn監(jiān)視和控制設(shè)備,如數(shù)字/模擬I/O設(shè)備n訪問遠端設(shè)備的網(wǎng)絡(luò)設(shè)備nVxWorks為基本I/O和有緩沖區(qū)I/O提供標準C庫n基本I/O庫與UNIX兼容;有緩沖區(qū)I/O庫與ANSI C兼容nVxWorks的I/O系統(tǒng)設(shè)計使之比大多數(shù)I/O系統(tǒng)更快更靈活,這對實時系統(tǒng)很重要2022-6-2760VxWorks的I/O系統(tǒng)2022-6-2761文件、設(shè)備及驅(qū)動n在VxWorks中,應用程序通過打開文件來訪問I/O設(shè)備n文件指下面兩種事物之一:n未結(jié)構(gòu)化的“原始”設(shè)備,如串行通信通道或者任務間管道n位于一個結(jié)構(gòu)化的、隨機訪問的

33、、包含文件系統(tǒng)的設(shè)備上的邏輯文件nI/O設(shè)備有兩個級別:基本I/O和有緩沖區(qū)I/On文件名和缺省設(shè)備:n/usrNFS網(wǎng)絡(luò)設(shè)備nHost:Non-NFS網(wǎng)絡(luò)設(shè)備nDev:dosFs文件系統(tǒng)設(shè)備2022-6-2762基本I/On基本I/O在VxWorks中是最低級的I/O,其接口與標準C庫的I/O原語兼容ncreat() 創(chuàng)建一個文件nremove() 刪除一個文件nopen() 打開一個文件(也可創(chuàng)建一個文件) nclose() 關(guān)閉一個文件nread() 讀一個已經(jīng)創(chuàng)建或打開的文件nwrite() 寫一個已經(jīng)創(chuàng)建或打開的文件nftruncate () 將一個文件切割成指定大小nioctl()

34、 對文件或設(shè)備執(zhí)行特定控制功能n在基本I/O級別,文件用文件描述字(fd)指示,它是一個整數(shù),在creat()或open()時返回nFd不用后應及時關(guān)閉,以節(jié)約資源2022-6-2763標準輸入、標準輸出和標準錯誤n下面的文件描述字(fd)保留作特殊用途:n0 = 標準輸入 n1 = 標準輸出n2 = 標準錯誤輸出n它們不會由create( )返回,但可以重定向到其它fdn系統(tǒng)缺省情況下將標準fd重定向到控制臺,任務缺省情況下使用全局重定向的定義n它們可以被全局重定向:nioGlobalStdSet (stdFd, fileFd);n每個任務的重定向?qū)⒏采w全局定義nioTaskStdSet (

35、0, stdFd, fileFd);2022-6-2764ioctl( )n為了運行某些不適合于其它基本I/O的I/O函數(shù),使用ioctl( )設(shè)置或查詢一些屬性,譬如:n當前設(shè)備可輸入多少字節(jié)n設(shè)置設(shè)備的特定選項n獲取某個文件系統(tǒng)的信息n。nIoctl( )的參數(shù)是fd、指示請求函數(shù)的代碼、和一個函數(shù)需要的參數(shù):nresult = ioctl (fd, function, arg); n將一個tty設(shè)備的數(shù)據(jù)波特率設(shè)為9600的例子:nstatus = ioctl (fd, FIOBAUDRATE, 9600); 2022-6-2765等待在多個fd上的select( )n將任務掛起于多個文

36、件描述字或者超時后返回n與Unix和Windows兼容nselectLib提供兩種支持n任務級別支持:任務等待多個設(shè)備激活n設(shè)備驅(qū)動支持:等待設(shè)備I/O的同時檢測掛起的任務2022-6-2766有緩存的I/O:Stdion低級I/O調(diào)用會帶來一些開銷,為提高I/O訪問的靈活性和效率VxWorks提供了有緩存的I/O機制nStdio的I/O函數(shù)提供透明的緩存機制,提高訪問效率nFILE *fp;nfp = fopen (/usr/foo, r); n標準輸入、輸出、和出錯nStdinnStdoutnStderr2022-6-2767其它格式化I/On特殊情況: nprintf( ), sprin

37、tf( ), and sscanf( )屬于屬于fioLib,沒有緩存,沒有緩存n附加函數(shù): nprintErr( ) and fdprintf( )n消息日志n提供日志功能n避免當前任務訪問I/On可以重定向到其它I/O2022-6-2768異步輸入輸出n異步輸入輸出(AIO):讓一般內(nèi)部處理和I/O操作同步進行n提高任務的效率nAIO的例程(見參考手冊)nAIO控制塊nAIO的使用2022-6-2769本地文件系統(tǒng)nVxWorks包括多種使用塊設(shè)備(磁盤)的本地文件系統(tǒng)nVxWorks的I/O結(jié)構(gòu)使VxWorks可以同時有多種文件系統(tǒng):nMS-DOS兼容文件系統(tǒng):dosFsn功能強大nRT

38、-11兼容文件系統(tǒng):rt11Fsn無分層文件組織結(jié)構(gòu),文件連續(xù)n原始磁盤文件系統(tǒng):rawFsn整個磁盤作為一個文件nSCSI序列文件系統(tǒng):tapeFsn磁帶的一卷作為一個文件nCD-ROM文件系統(tǒng):cdromFsnISO 96602022-6-2770虛擬內(nèi)存n虛擬內(nèi)存支持有內(nèi)存管理單元(MMU)的目標板2022-6-2771Tornado (1)Tornado提供了提供了Vxworks系統(tǒng)開發(fā)的集成開發(fā)環(huán)境系統(tǒng)開發(fā)的集成開發(fā)環(huán)境,其中,其中Tornado源代碼編輯器源代碼編輯器包括下列特性包括下列特性: :標準文本控制能力標準文本控制能力C和和C+ 語法元素用不同顏色語法元素用不同顏色調(diào)制集

39、成:編輯窗口跟蹤代碼的執(zhí)行調(diào)制集成:編輯窗口跟蹤代碼的執(zhí)行 編譯集成:項目管理將編譯警告和編譯錯誤編譯集成:項目管理將編譯警告和編譯錯誤 直接和編輯窗口中的相應代碼對應起直接和編輯窗口中的相應代碼對應起來。來。2022-6-2772Tornado (2)nTornado集成開發(fā)環(huán)境由以下幾個部分組成:WindSHCrossWindBrowserWindCodigEditorTargetServer應用程序VxWorksTargetAgent目標系統(tǒng)Tornado開發(fā)環(huán)境(PC)2022-6-2773Vxworks/Tornado開發(fā)方式目標CPU: Vxworks 在其上運行 的一個單板計算機

40、;Tornado PC主機:有一根串行線與目標機相連(初始化時主機作為終 端用),Vxworks核二進制文件駐留在其盤上,核 的下載及運行Tornado 工具通過以太網(wǎng)口進行。VxWorks目標板Tornado主機RS232EthernetAGENTSERVER2022-6-2774C+ 開發(fā)支持nTornado自帶GNU C+編譯器nTornado包括最新版本的iostream庫和標準模板庫的SGI實現(xiàn)nTornado的交互開發(fā)工具如Debugger、Shell等都支持C+nTornado還提供Wind Foundation Classes:nVxWorks Wrapper Class li

41、brary nTools.h+ library from Rogue Wave 2022-6-2775目標機駐留工具n除了駐留在主機中的工具外,部分工具駐留在目標機中:nTarget-resident shellnSymbal tablenModule loader/unloader2022-6-2776工具庫n中斷處理支持:支持硬件中斷和軟件中斷nWatchDog定時器n消息日志:記錄出錯或狀態(tài)消息n內(nèi)存分配:可管理多個獨立的內(nèi)存池n字符串格式化和掃描:printf(), scanf()等n線形和環(huán)形緩沖區(qū)處理:可同時訪問FIFO而不用互鎖n鏈表操作:lstLib包含創(chuàng)建和處理雙向鏈表的全集

42、nASNI C庫2022-6-2777性能評估n執(zhí)行計時器(Execution Timer):測量程序運行時間nSpy工具:提供每個task使用CPU的信息n占用CPU的時間n中斷占用的時間n空閑時間nWindView提供更強大的監(jiān)視功能2022-6-2778VxWorks仿真器(VxSim)nVxWorks仿真器是一個模仿VxWorks目標機的程序,作為原型和測試環(huán)境n可以在一個主機上運行多個仿真器n不涉及到硬件驅(qū)動2022-6-2779Tornado開發(fā)環(huán)境2022-6-2780Tonado開發(fā)環(huán)境(續(xù))2022-6-2781Tornado開發(fā)環(huán)境(續(xù))2022-6-2782VxWorks

43、操作系統(tǒng)組成SCSI ControllerSerial ControllerClock TimerEthernet ControllerHardwareSCSI DriverBSPNetwork DriverHardware-Dependent SoftwareI/O SystemsWind KernelVxWorks LibrariesTCP/IPHardware-Independent SoftwareFile systemTool-Applications抽象層固件2022-6-2783板支持包(BSP)n為各種目標板的硬件功能提供了統(tǒng)一的軟件接口n它們包括:n硬件初始化n中斷處理和產(chǎn)生

44、n硬件時鐘和定時器管理n內(nèi)存映射和分配nBSP還包括boot Rom和其它啟動機制nsysLib和sysALib庫是VxWorks可移植的核心2022-6-2784 CPU 上電復位 基本配置初始化 ROM 拷貝到 RAM 并跳到 RAM 入口 硬件初始化 包括通信口 初始化 Vxworks 核 啟動 Vxworks 核 重新執(zhí)行目標機 的硬件初始化 執(zhí)行用戶程序 Vxworks操作系統(tǒng)將一切與硬件有關(guān)操作系統(tǒng)將一切與硬件有關(guān)的功能模塊都放在的功能模塊都放在BSP庫中。該庫中。該BSP庫是硬庫是硬件與軟件的接口,處理硬件的初始化、中件與軟件的接口,處理硬件的初始化、中斷處理與產(chǎn)生、硬件時鐘與定

45、時管理、局斷處理與產(chǎn)生、硬件時鐘與定時管理、局部和總線內(nèi)存空間的映射、內(nèi)存大小定義,部和總線內(nèi)存空間的映射、內(nèi)存大小定義,等等等等。能夠自行啟動目標機、初始化目標。能夠自行啟動目標機、初始化目標機、能夠與機、能夠與host通信以下載通信以下載Vxworks核、把核、把控制權(quán)交給控制權(quán)交給Vxworks核來調(diào)用用戶應用程核來調(diào)用用戶應用程序等功能。序等功能。板支持包(BSP)2022-6-2785VxWorks中的設(shè)備nttyDrv Terminal driver nptyDrv Pseudo-terminal drivernpipeDrv Pipe drivernmemDrv Pseudo m

46、emory device drivernnfsDrv NFS client drivernnetDrv Network driver for remote file accessnramDrv RAM driver for creating a RAM disknscsiLib SCSI interface library n- Other hardware-specific drivers2022-6-2786VxWorks與主機系統(tǒng)的I/O差別n設(shè)備配置:在VxWorks中設(shè)備驅(qū)動可以動態(tài)安裝和卸載n文件描述字:在Windows和Unix中,fd是進程中唯一的;在VxWorks中fd是全局

47、唯一的,標準輸入輸出例外(0,1,2)nI/O控制:Unix和VxWorks中傳給ioctl( )的參數(shù)可能不同n驅(qū)動例程:Unix下設(shè)備驅(qū)動運行于系統(tǒng)模式下,不可搶占;VxWorks下的設(shè)備驅(qū)動運行于線程模式下,可搶占。2022-6-2787內(nèi)部結(jié)構(gòu)n多數(shù)系統(tǒng)的設(shè)備驅(qū)動只提供少數(shù)低級I/O例程,如輸入、輸出等;大部分工作由I/O系統(tǒng)完成。n驅(qū)動易實現(xiàn)n設(shè)備動作盡可能類似n驅(qū)動編寫人員很難完成I/O系統(tǒng)未提供的協(xié)議nVxWorks中I/O系統(tǒng)用于將用戶請求交給適當?shù)脑O(shè)備驅(qū)動,每個驅(qū)動根據(jù)自己的情況處理用戶的I/O請求。nVxWorks提供高級例程庫用于設(shè)備驅(qū)動的編寫n為標準設(shè)備寫驅(qū)動很容易,編

48、碼量小n可以根據(jù)情況用非標準方式實現(xiàn)用戶請求2022-6-2788設(shè)備驅(qū)動程序n驅(qū)動初始化例程xxDrv( )n安裝驅(qū)動、分配數(shù)據(jù)結(jié)構(gòu)、連接中斷服務例程、初始化硬件n設(shè)備創(chuàng)建xxDevCreate( )n給驅(qū)動增加一個設(shè)備,參數(shù)包括緩沖區(qū)大小、設(shè)備地址等n為設(shè)備初始化數(shù)據(jù)結(jié)構(gòu)、信號量和硬件等n基本I/O功能nxxOpen()nxxRead()nxxWrite()nxxIoctl()n中斷服務例程xxInterrupt( )2022-6-2789驅(qū)動安裝nI/O系統(tǒng)維護一個驅(qū)動表,將用戶的I/O請求轉(zhuǎn)換為適當?shù)尿?qū)動程序n使用iosDrvInstall()動態(tài)安裝驅(qū)動,參數(shù)為新驅(qū)動的7個I/O例程

49、的地址,iosDrvInstall()將地址放入驅(qū)動表的空閑條目,返回此條目的索引,稱為驅(qū)動號。n文件系統(tǒng)在驅(qū)動表中有自己的條目,它們在文件系統(tǒng)庫初始化時創(chuàng)建。2022-6-2790驅(qū)動安裝舉例2022-6-2791設(shè) 備n一些驅(qū)動可以為某種設(shè)備的多個實例服務n在VxWorks中,數(shù)據(jù)結(jié)構(gòu)設(shè)備頭(DEV_HDR)定義設(shè)備n設(shè)備名n設(shè)備的驅(qū)動的編號(Index)nDEV_HDR保存在駐留內(nèi)存的設(shè)備列表(device_list)中nDEV_HDR是設(shè)備描述字(device descriptor)的開始部分,后者包括特定設(shè)備的數(shù)據(jù):n設(shè)備地址n緩沖區(qū)n信號量n設(shè)備描述字只要以DEV_HDR開頭便可,

50、可包含任何與設(shè)備相關(guān)的信息2022-6-2792設(shè)備列表和增加設(shè)備n調(diào)用iosDevAdd()動態(tài)增加非塊設(shè)備,參數(shù)為新設(shè)備的描述字的地址、設(shè)備名和驅(qū)動編號n驅(qū)動程序只需要填寫描述字中與設(shè)備相關(guān)信息,不需要填寫設(shè)備頭;iosDevAdd()在設(shè)備頭中填入設(shè)備名稱和驅(qū)動編號,然后加入設(shè)備列表n增加塊設(shè)備需要調(diào)用與此塊設(shè)備文件系統(tǒng)相關(guān)的設(shè)備初始化例程,這個例程將自動調(diào)用iosDevAdd()2022-6-2793增加設(shè)備的例子2022-6-2794文件描述字n可以同時對一個設(shè)備打開多個fdn一個設(shè)備的驅(qū)動維護I/O系統(tǒng)設(shè)備信息和與fd相關(guān)的信息(如文件偏移量)n也可以對一個非塊設(shè)備打開多個fd,如tty,這些fd沒有附加信息,所以對它們的寫操作效果相同2022-6-2795Fd表n文件用open()或creat()打開,I/O系統(tǒng)在設(shè)備列表中搜索與文件名最匹配的設(shè)備,找到后用設(shè)備頭中的驅(qū)動編號查找

溫馨提示

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

評論

0/150

提交評論