vxworks入門(mén)介紹_第1頁(yè)
vxworks入門(mén)介紹_第2頁(yè)
vxworks入門(mén)介紹_第3頁(yè)
vxworks入門(mén)介紹_第4頁(yè)
vxworks入門(mén)介紹_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 VxWorks入門(mén)介紹 2010/10/1 目錄 VxWorks簡(jiǎn)介 BSP及系統(tǒng)執(zhí)行流程 中斷 任務(wù)調(diào)度 任務(wù)切換 任務(wù)創(chuàng)建 定時(shí)器 目錄 任務(wù)間通訊 信號(hào)量 二進(jìn)制信號(hào)量 消息隊(duì)列 socket 集成開(kāi)發(fā)環(huán)境Tornado的使用 VxWorks簡(jiǎn)介 VxWorks組成 VxWorks操作系統(tǒng)由任務(wù)的管理與調(diào)度、任務(wù)的同步與通信、動(dòng)態(tài)內(nèi)存的管理、時(shí)鐘的管理、I/O管理、文件系統(tǒng)等幾部分組成 VxWorks簡(jiǎn)介 對(duì)于VxWorks ,用戶(hù)可裁減掉程序員認(rèn)為沒(méi)有使用到的功能,直到只剩下最簡(jiǎn)內(nèi)核(可以只有10k左右) 一般使用的VxWorks為標(biāo)準(zhǔn)的單CPU版本。VxFusion為標(biāo)準(zhǔn)的多CPU

2、版本,應(yīng)用程序在多個(gè)CPU上運(yùn)行,但仍然象在一個(gè)CPU 上運(yùn)行那樣進(jìn)行數(shù)據(jù)的交換、通信與同步。 VxWorks簡(jiǎn)介 VxWorks使用統(tǒng)一的API,對(duì)于VxWorks支持的不同的CPU、VxWorks的不同版本,API都是一樣的。VxWorks的API是由操作系統(tǒng)內(nèi)核提供的服務(wù)原語(yǔ)搭建起來(lái)的。服務(wù)原語(yǔ),是不可打斷的,這樣可以保證系統(tǒng)調(diào)用的時(shí)間盡量小、盡量是常量和可確定 BSP BSP是系統(tǒng)用來(lái)管理外設(shè)的部分,由兩部分組成:初始化、驅(qū)動(dòng)程序。所謂初始化是指從系統(tǒng)上電復(fù)位開(kāi)始直到wind kernel和usrRoot根任務(wù)啟動(dòng)的這段時(shí)間,系統(tǒng)的執(zhí)行過(guò)程。驅(qū)動(dòng)程序就是一些包含I/O操作的子函數(shù)。 初

3、始化包括:CPU Init、Board Init、System Init。CPU Init初始化CPU的內(nèi)部寄存器。Board Init初始化智能I/O的寄存器,將device打通。System Init為系統(tǒng)的運(yùn)行準(zhǔn)備數(shù)據(jù)結(jié)構(gòu),進(jìn)行數(shù)據(jù)初始化。 BSP 系統(tǒng)上電代碼執(zhí)行流程 執(zhí)行流程 中斷 中斷是實(shí)時(shí)系統(tǒng)非常重要的組成部分,與linux及windows相比, VxWorks對(duì)于中斷的相應(yīng)速度和中斷處理程序的處理速度要高很多,實(shí)時(shí)性最好 對(duì)于中斷處理程序,可能引起阻塞的都不能使用,printf可能引起阻塞,如果在中斷處理程序里面需要輸出調(diào)試信息,可以使用logMsg來(lái)輸出。中斷里面也不要試圖獲

4、得信號(hào)量,接收消息隊(duì)列里面的消息等操作。 中斷 中斷包含三層含義 中斷引腳號(hào)(或從中斷控制器中得到) 中斷號(hào) 中斷向量(對(duì)x86是中斷號(hào)*4)中斷處理程序和中斷向量必須連接再允許后才能被激活 中斷 對(duì)于中斷服務(wù)程序,越簡(jiǎn)短越好,為提高VxWorks的中斷服務(wù)程序與任務(wù)的合作性能,最好的機(jī)制是信號(hào)量。下面例子中我們會(huì)看到標(biāo)準(zhǔn)的中斷處理過(guò)程。 中斷 典型的中斷處理過(guò)程示例: 1。中斷連接: intConnect ( IV_IRQ6, (FUNCPTR) Isr1, 0); 參量1:連接的中斷向量 參量2:中斷服務(wù)程序 參量3:中斷服務(wù)程序的參量 中斷 中斷允許: 2。intEnable( (int

5、)IV_IRQ6 ); 參量:中斷向量 3。中斷處理程序 中斷 Isr1() 關(guān)中斷; 清中斷; semGive(SemId1);/*釋放信號(hào)量*/ 中斷 4。中斷處理任務(wù) task1() for(;) semTake (SemId1, WAIT_FOREVER) 開(kāi)中斷; 任務(wù)間調(diào)度 VxWorks無(wú)條件的使用基于優(yōu)先級(jí)的任務(wù)間調(diào)度 對(duì)于同等優(yōu)先級(jí)的任務(wù),如果基于時(shí)間片輪循沒(méi)有打開(kāi),任務(wù)采取先到先運(yùn)行,運(yùn)行完畢再交出cpu,如果打開(kāi),則輪流使用cpu。 任務(wù)里如果有死循環(huán),比它優(yōu)先級(jí)低的任務(wù)都不能運(yùn)行 任務(wù)切換 任務(wù)切換速度:us量級(jí),Cache關(guān)閉時(shí)上升到10us量級(jí)。 任務(wù)的創(chuàng)建 VxW

6、orks創(chuàng)建任務(wù),如下例所示創(chuàng)建名為task1的任務(wù): taskSpawn(“tTask1”,55,0,10000,(FUNCPTR) task1,0,0,0,0,0,0,0,0,0,0); 參量1:任務(wù)名 參量2: 任務(wù)優(yōu)先級(jí) 任務(wù)的創(chuàng)建 參量3:創(chuàng)建時(shí)可選參量 參量4:任務(wù)堆棧尺寸 參量5:創(chuàng)建的任務(wù) 參量615:任務(wù)的參量 定時(shí)器 VxWorks使用3種定時(shí)器 time0:用于系統(tǒng)時(shí)鐘,可用sysClkRateSet()改變速率,默認(rèn)值時(shí)60次/秒,一般我們改為100次/秒,系統(tǒng)時(shí)鐘變?yōu)?0ms等級(jí)。 VxWorks下的watchdog基于timer0,因?yàn)槭窃趇nterrupt尺度,使

7、用必須謹(jǐn)慎,否則會(huì)降低系統(tǒng)效率 定時(shí)器 time1:用于輔助時(shí)鐘,可用sysAuxClkRateSet()改變速度,其精度可以很高,例如1ms,除驅(qū)動(dòng)外,一般不使用。 time2:用于時(shí)標(biāo)(timestamp)。從系統(tǒng)開(kāi)始運(yùn)行時(shí)就一直遞增,可以用來(lái)獲得系統(tǒng)運(yùn)行時(shí)間,在windview工具中被使用。用戶(hù)程序也可以通過(guò)sysTimestamp()得到運(yùn)行時(shí)間。一般不使用。 Watchdog定時(shí)器 使用舉例申明:WDOG_ID WdId1; 初始化創(chuàng)建:WdId1 = wdCreate(); 初始化啟動(dòng):wdStart(WdId1 , 1, (FUNCPTR)function1, 0) 參數(shù)1:定時(shí)

8、器ID參數(shù)2:延時(shí)tick數(shù) Watchdog定時(shí)器參數(shù)3:定時(shí)器到要調(diào)用的函數(shù)參數(shù)4:要調(diào)用函數(shù)的參數(shù)定時(shí)要調(diào)用的函數(shù)function1 wdStart(WdId1 , 1, (FUNCPTR)function1, 0) Watchdog定時(shí)器 定時(shí)器里面運(yùn)行的代碼與中斷有同等的優(yōu)先級(jí),對(duì)于中斷所有的約束定時(shí)器同樣要遵守,會(huì)引起阻塞的都不能使用。比如不能使用printf打印,不能接收消息里面的消息,不能試圖獲得一個(gè)信號(hào)量等。 任務(wù)間通訊 信號(hào)量 消息隊(duì)列 管道 全局變量 socket 信號(hào)量 信號(hào)量提供了任務(wù)間最快速通信,可以實(shí)現(xiàn)任務(wù)間同步和互斥。 互斥用于資源管理,上鎖對(duì)共享資源的訪(fǎng)問(wèn)。

9、同步可以協(xié)調(diào)任務(wù)間的執(zhí)行。 信號(hào)量 信號(hào)量的三種類(lèi)型 二進(jìn)制 互斥 計(jì)數(shù)信號(hào)量 信號(hào)量 互斥信號(hào)量本質(zhì)也是一種二進(jìn)制信號(hào)量,主要用于解決內(nèi)在互斥的問(wèn)題,優(yōu)先級(jí)繼承等情況而優(yōu)化的特殊的二進(jìn)制信號(hào)量 計(jì)數(shù)信號(hào)量會(huì)隨著信號(hào)量釋放的次數(shù)改變而改變 二進(jìn)制信號(hào)量最基本,最常用 二進(jìn)制信號(hào)量 最常用最快的信號(hào)量,用于同步和互斥 創(chuàng)建信號(hào)量的時(shí)候,隊(duì)列類(lèi)型已經(jīng)確定。 等待信號(hào)量的任務(wù)可以按照優(yōu)先級(jí)(SEM_Q_PRIORITY) 或先進(jìn)先出( SEM_Q_FIFO)的順序排隊(duì)。 二進(jìn)制信號(hào)量 二進(jìn)制同步信號(hào)量使用舉例: 申明:SEM_ID SemId1; 初始化: SemId1=semBCreate(SEM

10、_Q_FIFO,SEM_EMPTY); 二進(jìn)制信號(hào)量 任務(wù)一釋放信號(hào)量SemId1Task1() semGive(SemId1); 任務(wù)二獲得信號(hào)量后繼續(xù)執(zhí)行,否則等 待此信號(hào)量 二進(jìn)制信號(hào)量task2()For(;) semTake (SemId1, WAIT_FOREVER) ; 二進(jìn)制信號(hào)量 二進(jìn)制互斥信號(hào)量使用舉例: 申明:SEM_ID SemId1; 初始化: SemId1= semBCreate(SEM_Q_PRIORITY ,SEM_FULL); 二進(jìn)制信號(hào)量 使用function1()semTake(SemId1,WAIT_FOREVER); /*需要保護(hù)的代碼*/semGiv

11、e(SemId1); 消息隊(duì)列 任務(wù)間通訊使用的最常用的方式 允許長(zhǎng)度可變,數(shù)目可變的消息排隊(duì) 用在單CPU任務(wù)間通訊 任何任務(wù)可以發(fā)送消息到消息隊(duì)列 任何任務(wù)可以從消息隊(duì)列接收消息 兩個(gè)任務(wù)若需要全雙工通信,需要兩個(gè)隊(duì)列,一發(fā)一收 消息隊(duì)列使用舉例 申明:MSG_Q_ID MsgQ1; 創(chuàng)建: MsgQ1 = msgQCreate(500,300,MSG_Q_FIFO); 參數(shù)1:排隊(duì)的最大消息數(shù)量 參數(shù)2:每個(gè)消息允許的最大長(zhǎng)度 參數(shù)3:操作方式,fifo或優(yōu)先級(jí) 消息隊(duì)列 發(fā)送msgQSend(MsgQ1, pmsgbuf, length, NO_WAIT, MSG_PRI_NORMAL

12、);參數(shù)1:隊(duì)列ID參數(shù)2:要發(fā)送的消息指針參數(shù)3:要發(fā)送的消息長(zhǎng)度參數(shù)4:等待的tick數(shù)目 消息隊(duì)列 參數(shù)5:操作方式,MSG_PRI_NORMAL 或 MSG_PRI_URGENT 消息隊(duì)列 接收Task1()for(;) msgQReceive(MsgQ1, m_buffer, 500, WAIT_FOREVER); 消息隊(duì)列 參量1:隊(duì)列ID 參量2:接收消息的buffer 參量3:buffer的最大長(zhǎng)度 參量4:等待的tick數(shù)目,NO_WAIT不進(jìn)不進(jìn) 行等待,行等待,WAIT_FOREVER永遠(yuǎn)永遠(yuǎn) 等待等待 socket 網(wǎng)絡(luò)是VxWorks和其它系統(tǒng)聯(lián)系的主要途徑。 VxWorks實(shí)現(xiàn)了與BSD4.4 TCP/IP兼容的網(wǎng)絡(luò)協(xié)議棧。 通常使用socket編程接口,客戶(hù)/服務(wù)器編程來(lái)實(shí)現(xiàn)VxWorks與其他系統(tǒng),如linux,windows 等其它系統(tǒng)之間的通信 socket SOCKET編程舉例 例子較長(zhǎng),具體可以參見(jiàn)VxWorks Network Programmers Guide5.5 7.2 BSD SOCKET 7.2.2 Datagram Sockets (UDP) 7.2.3 Stream Sockets (TCP) Tornado工具使用 Tornado整個(gè)開(kāi)發(fā)系統(tǒng)包含三部分組成 VxWorks:運(yùn)行在目標(biāo)板上的高性

溫馨提示

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

評(píng)論

0/150

提交評(píng)論