欧美理论视频,少妇视频在线,色婷婷国产精品http://www.bjzhda.cnzh-cn曙海教育集團(tuán)論壇http://www.bjzhda.cnRss Generator By Dvbbs.Netofficeoffice@126.comimages/logo.gif曙海教育集團(tuán)論壇基于VxWorks環(huán)境的嵌入式系統(tǒng)復(fù)合通信模式http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1433&Page=1wangxinxin2010-11-17 14:41:44摘要:在嵌入式系統(tǒng)與VxWorks實(shí)時(shí)操作系統(tǒng)應(yīng)用愈加廣泛的背景下,結(jié)合嵌入式系統(tǒng)對(duì)于各類(lèi)實(shí)時(shí)通信方式的不同需要,提出基于控制應(yīng)用的復(fù)合通信模式;以Radstone公司的PPCx系列單板機(jī)為例,給出實(shí)現(xiàn)方法,并對(duì)數(shù)據(jù)通信的產(chǎn)時(shí)性與安全性作了研究。片對(duì)于各類(lèi)嵌入式操作系統(tǒng)的數(shù)據(jù)測(cè)驗(yàn)具有很大的參考價(jià)值。

關(guān)鍵詞:VxWorks 嵌入式系統(tǒng) 實(shí)時(shí)性 數(shù)據(jù)通信

引言

隨著信息技術(shù)的不斷發(fā)展和更新,嵌入式操作系統(tǒng)以其速率高、穩(wěn)定、可配置內(nèi)核的優(yōu)勢(shì)正得到越來(lái)越廣泛的應(yīng)用,包括醫(yī)學(xué)、圖像處理、軍事、工業(yè)控制、電信等許多領(lǐng)域。嵌入式系統(tǒng)必須采用特殊有效的實(shí)時(shí)操作系統(tǒng),VxWorks正是一個(gè)具有高性能的實(shí)時(shí)操作系統(tǒng),成為嵌入式系統(tǒng)操作內(nèi)核的最佳選擇之一。隨著嵌入式系統(tǒng)在網(wǎng)絡(luò)當(dāng)中的應(yīng)用不斷加強(qiáng),具有多種數(shù)據(jù)通道的復(fù)合通信模式顯得列為必要。本文根據(jù)基于VxWorks的嵌入式系統(tǒng)對(duì)于數(shù)據(jù)通信的不同要求,提出一個(gè)嵌入式系統(tǒng)復(fù)合通信模型,研究幾種具有代表性的數(shù)據(jù)通信方式,并論述在VxWorks下的實(shí)現(xiàn)方法及其一些關(guān)鍵技術(shù)。

1 嵌入式系統(tǒng)復(fù)合通信模型的設(shè)計(jì)

嵌入式系統(tǒng)在控制領(lǐng)域應(yīng)用十分廣泛,例如在工業(yè)控制當(dāng)中常常利用嵌入式系統(tǒng)作為中央控制機(jī),完成信息采集、分系統(tǒng)監(jiān)管、系統(tǒng)決策等等重要功能。硬件往往離不開(kāi)軟件的支持。VxWorks操作系統(tǒng)是目前功能最全的、獨(dú)立于處理器的嵌入式實(shí)時(shí)操作系統(tǒng)之一。考慮如何基于VxWorks實(shí)現(xiàn)嵌入式系統(tǒng)的復(fù)合通信方式是有意義的。由于此時(shí)嵌放式系統(tǒng)已經(jīng)不再是孤立系統(tǒng),而是處于某種拓?fù)渚W(wǎng)絡(luò)結(jié)構(gòu)當(dāng)中,因此,有必采取復(fù)合通信模式以適應(yīng)系統(tǒng)擴(kuò)展、集中控制和遠(yuǎn)程信息傳輸?shù)男枰?刂茩C(jī)應(yīng)當(dāng)具備優(yōu)良的系統(tǒng)總線、可靠的控制網(wǎng)絡(luò)、高速傳輸通道接口以及遠(yuǎn)程數(shù)據(jù)管道。綜合以上考慮,圖1給出了一個(gè)控制機(jī)的復(fù)合通信模型。

控制機(jī)本身采用VME總線標(biāo)準(zhǔn),可以嵌入多塊單板機(jī),具有良好的系統(tǒng)擴(kuò)展性。為了適應(yīng)不同的通信要求,外圍有三種通信接口。其中光纖通信傳輸速率很高,適合作為大流量數(shù)據(jù)通道,例如信號(hào)處理機(jī)數(shù)據(jù)傳輸管道。串口通信設(shè)備簡(jiǎn)單、成本較低,傳輸速率適中且安全性高,可以作為遠(yuǎn)程數(shù)據(jù)通道。以太網(wǎng)則由于其極佳的增容性、穩(wěn)定性,適合于局域網(wǎng)絡(luò)控制體系。

2 復(fù)合通信模式特點(diǎn)分析

為了對(duì)以上復(fù)合通信模型加以說(shuō)明,下面對(duì)片幾種通信模式的特點(diǎn)進(jìn)行分析。

(1)總線標(biāo)準(zhǔn)

目前常用的總線標(biāo)準(zhǔn)有多種,基中VME總線支持多處理器系統(tǒng),最多可以容納21塊插件。地址總線32位,數(shù)據(jù)總線32位,數(shù)據(jù)傳輸速率可以達(dá)到80Mb/s。VME總線能處理7級(jí)中斷,具備高速的實(shí)時(shí)響應(yīng)能力。VME總線采用主-從結(jié)構(gòu),主功能模塊傳輸數(shù)據(jù)之間必須先使用中央仲裁器,也稱(chēng)為系統(tǒng)控制器,具有總線仲裁功能。VME數(shù)據(jù)傳輸總線是高速異步并行的,模塊間數(shù)據(jù)傳輸是通過(guò)連鎖的握手信號(hào)實(shí)現(xiàn)的。具有高可靠性,同時(shí)其模板結(jié)構(gòu)具有良好的抗震性,適應(yīng)較為惡劣的工作環(huán)境[1]。

(2)控制網(wǎng)絡(luò)

控制網(wǎng)絡(luò)一般采用局域網(wǎng)。由于TCP/IP協(xié)議是一個(gè)標(biāo)準(zhǔn)的企業(yè)網(wǎng)絡(luò)協(xié)議,是比較完善的、公認(rèn)的最有效的互聯(lián)協(xié)議,因此目前流行的操作系統(tǒng)都支持TCP/IP協(xié)議,TCP/IP協(xié)議還是個(gè)穩(wěn)定的、對(duì)稱(chēng)的、支持交叉平臺(tái)的Client/Server方式的結(jié)構(gòu),并為應(yīng)用程序提供了標(biāo)準(zhǔn)接口,對(duì)于集中控制的嵌入式系統(tǒng)采用基于TCP/IP的網(wǎng)絡(luò)通信無(wú)疑是方便而且有效的。

(3)高速數(shù)據(jù)接口

目前來(lái)看,光纖通道作為高速數(shù)據(jù)通信是最為有利的。它是一種利用光纖(苦口婆心銅纜)作為物理鏈路的高性能串行數(shù)據(jù)接口,支持SCSI、IP等上層數(shù)據(jù)傳輸協(xié)議,具有可靠性高、速度快和傳輸距離的特點(diǎn),可用來(lái)連接大型機(jī)、服務(wù)器和存儲(chǔ)設(shè)備以實(shí)現(xiàn)高速大容量的信息傳輸。對(duì)于分離的嵌入式硬件系統(tǒng)而言,采用光纖通道作為高速I(mǎi)/O數(shù)據(jù)接口無(wú)疑是一種很好的選擇。

(4)遠(yuǎn)程數(shù)據(jù)通道

由于控制機(jī)的遠(yuǎn)程數(shù)據(jù)傳輸需要較高的安全性,同時(shí)一般只需單路傳輸,如果使用光纖電纜顯示成本高而且不需要那么高傳輸?shù)膸挘虼丝梢钥紤]使用串行口通信。串行口在嵌入式系統(tǒng)當(dāng)中是一類(lèi)重要的數(shù)據(jù)通信接口。由于RS-422標(biāo)準(zhǔn)串行口通信采用了雙線傳輸,大大增加了抗共模干擾的能力,最大數(shù)據(jù)傳輸速度可以達(dá)到10Mb/s,這對(duì)于遠(yuǎn)程數(shù)據(jù)交換具有極大的優(yōu)勢(shì),因此可用于遠(yuǎn)程信息交換。

3 復(fù)合通信方式的實(shí)現(xiàn)與關(guān)鍵技術(shù)

由于本文的討論與單板機(jī)生產(chǎn)商所提供的板級(jí)支持包有關(guān),而不同類(lèi)型的單板機(jī)所提供的板級(jí)支持包(BSP、ESP)也會(huì)略有不同,為了不失一般性同時(shí)具有一定先進(jìn)性,本文采用英國(guó)Radstone公司生產(chǎn)的PPCx系列單板機(jī)作示例。PPCx系列單板機(jī)功能集成度高、擴(kuò)展性強(qiáng)、性能穩(wěn)定,可以添加多種外圍存儲(chǔ)設(shè)備、支持高分辨顯示,是一種理想的單板機(jī)系統(tǒng)。

3.1 基于VME總線的DMA通信方式

在VME總線上,每個(gè)單板機(jī)如果要訪問(wèn)其它單板機(jī)的RAM,必須通信VME總線地址映射。因此,每塊板上有兩個(gè)地址譯碼器,一個(gè)用于VME總線地址→本地地址譯碼,而另一個(gè)用于本地地址→VME總線地址譯碼,這樣就會(huì)存在多個(gè)不同的存儲(chǔ)器地址映射。如果想要訪問(wèn)某個(gè)單板機(jī)的RAM,需要知道該單板機(jī)的RAM本地址所映射成的VME總線地址,然后通過(guò)訪問(wèn)VME總線地址映射到自身的本地地址而訪問(wèn)到系統(tǒng)控制器,甚至可以將其看成自身的RAM地址。多處理器地址映射關(guān)系如圖2所示。

綜上所述,對(duì)于某一VME總線中的任務(wù)一塊板而言,只要獲得了它的本地地址到VME總線地址的映射關(guān)系,就可以從板外來(lái)訪問(wèn)該板的RAM。VxWorks標(biāo)準(zhǔn)函數(shù)庫(kù)sysLib當(dāng)中提供了函數(shù)sysLocaltoBusAddr(),可以直接獲得本地地址的VME總線地址。這樣,當(dāng)前主機(jī)只需調(diào)用該函數(shù)獲得自身RAM地址到VME地址映射,其它的主機(jī)就可以根據(jù)該映射得到的VME總線地址訪問(wèn)該主機(jī)。因此,當(dāng)需要對(duì)于外板的某些控制寄存器進(jìn)行位元操作的進(jìn)修,這種方法就顯得尤其重要:因?yàn)橥鶝](méi)有函數(shù)能夠僅僅對(duì)于外板RAM的某個(gè)字節(jié)進(jìn)行操作,更無(wú)法定位到位操作。

為了進(jìn)一步提高數(shù)據(jù)傳輸速率,可使用PPC4A上的VME控制芯片Tundra中集成的DMA控制器。它支持基于VME總線的DMA數(shù)據(jù)傳輸方式,而DMA是外存數(shù)據(jù)傳輸最有效的一種方式。具體步驟如下:

①安裝DMA驅(qū)動(dòng)程序,調(diào)用函數(shù)dmaDrv();

②建立DMA設(shè)備,調(diào)用函數(shù)dmaDevCreate();

③打開(kāi)DMA進(jìn)行讀寫(xiě),調(diào)用函數(shù)open()、write()、read()。

DMA設(shè)備句柄就是一個(gè)類(lèi)似于文件指針的數(shù)據(jù)類(lèi)型,所以可以像一個(gè)標(biāo)準(zhǔn)數(shù)據(jù)操作來(lái)對(duì)待。開(kāi)啟設(shè)備后即可調(diào)用文件讀寫(xiě)標(biāo)準(zhǔn)函數(shù)進(jìn)行讀寫(xiě)操作。通過(guò)較為嚴(yán)格的測(cè)試,DMA數(shù)據(jù)傳輸速率可以達(dá)到40Mb/s以上,并且不發(fā)生數(shù)據(jù)傳輸錯(cuò)誤。

為了保證主機(jī)對(duì)于其它主機(jī)DMA傳輸數(shù)據(jù)的實(shí)時(shí)響應(yīng),應(yīng)當(dāng)產(chǎn)生VME總線中斷信號(hào)通知該主機(jī)。當(dāng)某個(gè)主機(jī)發(fā)送數(shù)據(jù)完畢后,須調(diào)用VxWorks提供的函數(shù)sysBusIntGen ()t向VME總線產(chǎn)生一個(gè)級(jí)別為intLevel、中斷號(hào)為intNum的中斷信號(hào)。

接收端主機(jī)事先建立一個(gè)與該級(jí)別中斷信號(hào)對(duì)應(yīng)的客戶中斷服務(wù)程序,并將該客戶中斷服務(wù)程序鏈接到所要求級(jí)別的中斷號(hào)上,從而實(shí)現(xiàn)對(duì)其進(jìn)行實(shí)時(shí)響應(yīng)。當(dāng)主機(jī)接收到屬于自己的中斷信號(hào)后,會(huì)立刻自動(dòng)調(diào)用該中斷服務(wù)程序。這時(shí)可利用中斷服務(wù)程序釋放一個(gè)信號(hào)燈,通過(guò)該信號(hào)燈驅(qū)動(dòng)相應(yīng)的數(shù)據(jù)處理模塊,從而實(shí)現(xiàn)實(shí)時(shí)操作。如下面的全程:

/*客戶中斷服務(wù)程序*/

void intHdlr(SEM_ID semId)

void intHdlr(SEM_ID semId)

{

/*釋放信號(hào)燈*/

semGive(semId);

}

/*等待信號(hào)燈的處理模塊*/

void processsModle(void)

{

/*等待信號(hào)燈*/

semTake(semld);

/*處理模塊代碼*/

}

VME總線共有7個(gè)中斷級(jí)別,排除系統(tǒng)使用的中斷號(hào),客戶自定義中斷號(hào)可從18設(shè)置到32。這樣能夠?yàn)樽銐蚨嗟闹鳈C(jī)設(shè)置中斷服務(wù)程序,從而實(shí)現(xiàn)VxWorks操作系統(tǒng)下的多主機(jī)VME總線實(shí)時(shí)高速通信。

3.2 串行口通信

在VxWorks中,將I/O系統(tǒng)設(shè)計(jì)成為任何類(lèi)型的設(shè)備提供一個(gè)簡(jiǎn)單、統(tǒng)一、獨(dú)立于設(shè)備的接口,所以串行口通信軟件的設(shè)計(jì)和VME通信具有相似之處。在VxWorks中,任何對(duì)于串行口的操作仍然可以視為對(duì)一個(gè)文件的操作,而不必了解關(guān)于設(shè)備或程序驅(qū)動(dòng)實(shí)現(xiàn)的細(xì)節(jié)。在串行口通信軟件的設(shè)計(jì)不中,利用RRCx的增強(qiáng)軟件包ESP可對(duì)驅(qū)動(dòng)成功后的串行口設(shè)備進(jìn)行操作。系統(tǒng)首先調(diào)用ESP軟件提供的esccDrv()安裝串行驅(qū)動(dòng)程序,隨后調(diào)用esccDevCreate()將指定的串口設(shè)備添加到系統(tǒng)中,當(dāng)串口初始化完成后,與DMA操作方式類(lèi)似,在使用之前利用open()打開(kāi)相應(yīng)串口,依據(jù)串口打開(kāi)時(shí)的讀寫(xiě)標(biāo)志,調(diào)用函數(shù)write()、read()對(duì)串口進(jìn)行只讀操作、只寫(xiě)操作或同時(shí)進(jìn)行讀寫(xiě)操作。

對(duì)于串口通信,仍然要關(guān)心數(shù)據(jù)接收的實(shí)時(shí)性。可采用中斷方式,利用VxWorks提供的select函數(shù)的事件觸發(fā)機(jī)制,將讀串口的任務(wù)阻塞使其一直等待數(shù)據(jù),當(dāng)有數(shù)據(jù)來(lái)到的時(shí)候該任務(wù)會(huì)立刻自動(dòng)響應(yīng),提高系統(tǒng)的實(shí)時(shí)性。

3.3 基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信

網(wǎng)絡(luò)通信一般可通過(guò)套接口(socket)實(shí)現(xiàn)。VxWorks提供了標(biāo)準(zhǔn)的BSD socket調(diào)用,具有兩種類(lèi)型:Stream socket(全雙工流類(lèi)型)、Datagram sockets(數(shù)據(jù)攝類(lèi)型)。前者支持TCP協(xié)議,后者支持UDP協(xié)議。任何一個(gè)任務(wù)都可以打開(kāi)一或多個(gè)socket,其它任務(wù)的socket可與之連接。客戶端程序首先調(diào)用socket()個(gè)函數(shù)產(chǎn)生用于與各分系統(tǒng)連接的套接口,并為每個(gè)套接口返回一個(gè)ID號(hào),然后初始化一個(gè)套接口結(jié)構(gòu)體,為其賦上該ID號(hào)以及服務(wù)端的IP地址和端口號(hào),并將具作為函數(shù)connect()的參數(shù),調(diào)用connect()函數(shù)主動(dòng)去連接客戶端。服務(wù)端則需調(diào)用bind()函數(shù)將自身IP和端口號(hào)綁定,以保證客戶端正確識(shí)別。為了確保服務(wù)器能夠?qū)崟r(shí)接收客戶端的數(shù)據(jù),當(dāng)服務(wù)端與客戶端建立連接之后,必須嵌入循環(huán),利用read()語(yǔ)句不斷等待客戶數(shù)據(jù)。同時(shí)客戶端每次發(fā)送數(shù)據(jù)之后也應(yīng)等待服務(wù)端回復(fù),建立握手機(jī)制。一個(gè)完整的socket網(wǎng)絡(luò)應(yīng)該可以用圖3來(lái)描述。值得指出的是,read調(diào)用具有一個(gè)PEEK選項(xiàng),即向接收緩沖區(qū)探測(cè)是否有數(shù)據(jù)而并不真正取出數(shù)據(jù),根據(jù)它的返回值可以判斷出網(wǎng)絡(luò)的狀態(tài)。這個(gè)功能適用于網(wǎng)絡(luò)查錯(cuò)。

3.4 光纖通道

由于光纖通道(fibre channel)接口并非VxWorks自身具備的組件,因此,VxWorks內(nèi)核上實(shí)現(xiàn)光纖通信也需要加載相關(guān)的驅(qū)動(dòng)程序;同時(shí),主機(jī)也需安裝光纖通信適配器,然后通過(guò)光纖電纜連接。下面仍以PPCx系列單板機(jī)為例來(lái)說(shuō)明。

這里采用QLA2200作為光纖通道適栩器。QLA2200/66是Qlogic公司生產(chǎn)的、目前應(yīng)用最為廣泛的光纖通道適配器。它主要包括四個(gè)功能模塊:高速RISC處理器,包括千兆位收發(fā)模塊、通道控制、幀緩存等的FC接口,有三個(gè)通道PCI總線DMA控制器以及ISP2200A的外存儲(chǔ)器。RRCx的ESP為該適配器QLA2200提供了驅(qū)動(dòng)程序,支持基于交換機(jī)、仲裁環(huán)以及點(diǎn)對(duì)點(diǎn)等三種拓?fù)浣Y(jié)構(gòu)的SCSI、IP和低開(kāi)銷(xiāo)訪問(wèn)(LLA)協(xié)議,其固件協(xié)議層結(jié)構(gòu)如圖4所示。

當(dāng)VxWorks啟動(dòng)之后,需要調(diào)用QLA2200的初始化函數(shù)ql22Init(),該函數(shù)的功能是驅(qū)動(dòng)PPCx主板上QLA2200的PCI板卡,包括SCSI、IP固件協(xié)議初始化。此時(shí),可在光纖通道上建立基于SCSI或IP協(xié)議的數(shù)據(jù)通信模式;而LLA實(shí)際上一種不具備協(xié)議管理的點(diǎn)對(duì)點(diǎn)通信模式,可節(jié)約大量系統(tǒng)開(kāi)銷(xiāo),故稱(chēng)之為低開(kāi)銷(xiāo)方式。它可以建立一種類(lèi)似于服務(wù)器/客戶機(jī)的通信機(jī)制,即服務(wù)端可以實(shí)時(shí)響應(yīng)客戶端的數(shù)據(jù)請(qǐng)求,但它同樣缺乏握手安全機(jī)制。因此,如果客戶端連續(xù)發(fā)送兩次大批量數(shù)據(jù),將會(huì)由于服務(wù)器來(lái)不及接收導(dǎo)致該兩批數(shù)據(jù)首尾發(fā)生沖突,故需加以改進(jìn)。LLA的服務(wù)器/客戶機(jī)通信機(jī)制是通過(guò)調(diào)用函數(shù)ql22laHookAttach()在服務(wù)端設(shè)備一個(gè)掛鉤函數(shù)來(lái)實(shí)現(xiàn)的。每當(dāng)客戶端向服務(wù)端發(fā)送數(shù)據(jù),該掛鉤函數(shù)將會(huì)立刻自動(dòng)響應(yīng),因此,可以在掛鉤函數(shù)當(dāng)設(shè)置VxWorks消息隊(duì)列,將接收幀緩存區(qū)中的數(shù)據(jù)取出。如下面的程序:

BOOL ql22LlaClientInputHook()

{…

/*將緩存區(qū)數(shù)據(jù)發(fā)送到服務(wù)端本地消息隊(duì)列當(dāng)中去*/

msgQsend(ServerQueue,ClientData,Length,NO_WAIT,0);

}

采用消息隊(duì)列接收數(shù)據(jù)則是由于它具有消息自動(dòng)追加功能,可以保證數(shù)據(jù)在高速拷貝時(shí)不被覆蓋。當(dāng)傳輸完畢后,服務(wù)端就可以將消息隊(duì)列當(dāng)中的數(shù)據(jù)取出來(lái)進(jìn)一步處理。客戶端則應(yīng)當(dāng)在每次發(fā)送數(shù)據(jù)完畢之后等待服務(wù)端的回答,首到得到確認(rèn)之后才可以進(jìn)行下一步發(fā)送。因此,客戶端必須設(shè)備回復(fù)等待,這可以利用信號(hào)燈來(lái)實(shí)現(xiàn)。LLA具有很高的傳輸速率。根據(jù)測(cè)試,在實(shí)施了握手通信機(jī)制后,傳輸速率可達(dá)50Mb/s以上,而且實(shí)現(xiàn),系統(tǒng)開(kāi)銷(xiāo)很小,適應(yīng)于點(diǎn)對(duì)點(diǎn)的主機(jī)高速通信。

4 結(jié)論

本嵌入式系統(tǒng)復(fù)合通信模式具有多種通信接口,可適應(yīng)不同的數(shù)據(jù)通信需要。同時(shí),由于VxWorks高效的實(shí)時(shí)性以及強(qiáng)大的兼容性,使得復(fù)合通信的實(shí)現(xiàn)變得更加容易并且具有良好的實(shí)時(shí)性和安全性。通過(guò)實(shí)際運(yùn)行,系統(tǒng)內(nèi)部各個(gè)模塊運(yùn)行穩(wěn)定,軟件的模塊實(shí)時(shí)調(diào)度表示良好,經(jīng)長(zhǎng)時(shí)間的運(yùn)行未發(fā)現(xiàn)通信阻塞。該復(fù)合通信模式可適用于工業(yè)控制、醫(yī)療等多方面,具有廣泛的適應(yīng)性。

 

 來(lái)源:[http://www.jdzj.com]機(jī)電之家·機(jī)電行業(yè)電子商務(wù)平臺(tái)!

]]>
嵌入式數(shù)據(jù)庫(kù)支持風(fēng)河的VxWorkshttp://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1432&Page=1wangxinxin2010-11-17 14:28:01<!--[if !supportEmptyParas]--> <!--[endif]-->

Mimer Information Technology announced the availability of its Mimer SQL Embedded database management system (DBMS) for Wind River’s VxWorks real-time operating system. Mimer SQL Embedded for VxWorks combines a full function enterprise class DBMS with a hard real-time data management extension with predictable and deterministic response times. This makes it possible to develop advanced hard real-time applications for process industry, automotive and consumer devices with access to the full SQL feature set.

Mimer Information Technology is a new member of Wind River’s partner program, and is now ready to launch the Mimer SQL Embedded product for Wind River’s VxWorks real-time operating system. Mimer SQL Embedded is a small footprint relational DBMS for embedded devices and appliances. Despite its small footprint, Mimer SQL Embedded is multi-user with full standard SQL support including features like stored procedures and triggers. Mimer SQL Embedded’s well-proven, efficient and self-tuning DBMS kernel gives a zero maintenance run-time environment, reduces the time-to-market for embedded solutions and enables software component reuse.

Mimer SQL Embedded for VxWorks is extended with Mimer SQL Real-Time that combines predictable hard real-time and non-real-time database access. Mimer SQL Real-Time allows data management in embedded real-time applications to be taken to a higher level while still maintaining real-time predictability and fine-grained control.

Mimer SQL Embedded highlights:

  • Full SQL support
  • Stored procedures and triggers
  • Full concurrency control (non-locking)
  • Small footprint (down to 30 KB RAM for full server)
  • Zero maintenance (no ‘vacuum’ needed)
  • Hard real-time support with deterministic response times (Mimer SQL Real-Time)


“We see Wind River’s VxWorks as an important platform for Mimer with many new business opportunities for us, since this is a platform widely used by the automotive, process-control and robotic industry with a growing need for enterprise class DBMS functionality with hard real-time data access”, says Stefan Eck, Marketing Director, Mimer Information Technology. “We’re also looking forward to establish a close relationship with Wind River and its partners”, concludes Stefan Eck.

Mimer SQL Embedded and Mimer SQL Real-Time are available for VxWorks 5 and 6.

“We welcome Mimer as a Wind River partner and are very pleased with that they now make their Mimer SQL database technology available for VxWorks”, says Warren Kurisu, senior director of product management, Wind River. “Mimer’s small, real-time attributes nicely complement those of VxWorks, and will meet the needs of many of our customers.

]]>
VxWorks_BSP移植_http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1431&Page=1wangxinxin2010-11-17 14:25:10VxWorks_BSP移植_1
 icepeak 發(fā)表于 2006-5-29 8:33:00
好多天沒(méi)更新blog了,中間忙著整另外一個(gè)blog,所以無(wú)暇顧及.現(xiàn)在,把前幾天學(xué)習(xí)筆記送上來(lái)!

在講述BSP的移植之前,先討論一下Vxworks的啟動(dòng)過(guò)程:

ARM系統(tǒng)中,系統(tǒng)上電后會(huì)自動(dòng)加載并運(yùn)行位于0地址的指令,通常在這個(gè)地方會(huì)放置一條跳轉(zhuǎn)指令,使它跳轉(zhuǎn)到_romInit()(初始化的入口)

romInit()進(jìn)行處理器模式的設(shè)置,關(guān)閉中斷,初始化內(nèi)存以及一些必要的硬件配置.

romInit()執(zhí)行完上述工作以后,跳轉(zhuǎn)到romStart(),它負(fù)責(zé)將ROM映像copy到RAM中,如果ROM映像中不含Vxworks內(nèi)核,那么啟動(dòng)代碼要負(fù)責(zé)將

Vxworks內(nèi)核加載到RAM中去.接下來(lái)要開(kāi)始運(yùn)行Vxworks內(nèi)核的入口程序sysInit(),它主要實(shí)現(xiàn)一些與romInit()類(lèi)似的功能,然后還是調(diào)用

Vxworks內(nèi)核的第一個(gè)例程usrInit(),usrInit()會(huì)根據(jù)BSP的設(shè)置,最終完成整個(gè)內(nèi)核的前期初始化工作.在usrInit最后,由kernelInit()激

活多任務(wù)環(huán)境,并創(chuàng)建一個(gè)任務(wù)來(lái)安裝設(shè)備驅(qū)動(dòng)程序.同時(shí)啟動(dòng)設(shè)備,初始化Vxworks系統(tǒng)庫(kù),調(diào)用應(yīng)用程序.
 

VxWorks_BSP移植_2
 icepeak 發(fā)表于 2006-5-29 8:49:00
弄清楚VxWorks啟動(dòng)的順序后,我們來(lái)討論BSP的移植,VxWorks的BSP在先前的日志中已經(jīng)有說(shuō)明,大家可以查閱了解它和bootloader的區(qū)別和

聯(lián)系.

不同的Target的BSP都不同,同種CPU的不同板子也會(huì)不同,所以移植修改是不可避免的,我們可以參考$(WIND_BASE)\target\config下的BSP

文件,找一個(gè)比較接近的來(lái)修改!關(guān)于這個(gè)目錄的組織結(jié)構(gòu),網(wǎng)上有很多介紹,這里不贅述.

首先要重點(diǎn)修改的就是Makefilie文件和config.h文件,這兩個(gè)文件跟目標(biāo)板的硬件配置有很大的關(guān)系,主要是CPU類(lèi)型,內(nèi)存的大小和目標(biāo)板

的外圍設(shè)備的配置情況.關(guān)于這兩個(gè)文件的修改下次會(huì)詳細(xì)注釋!     

]]>
Vxworks嵌入式操作系統(tǒng)下網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1430&Page=1wangxinxin2010-11-17 14:21:48引 言
  VxWorks操作系統(tǒng)是美國(guó)WindRiver公司于1983年設(shè)計(jì)開(kāi)發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),是嵌入式開(kāi)發(fā)環(huán)境的關(guān)鍵組成部分。良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開(kāi)發(fā)環(huán)境,在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域占據(jù)一席之地。它以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)、彈道制導(dǎo)、飛機(jī)導(dǎo)航等。
  

1 嵌入式系統(tǒng)
  嵌入式系統(tǒng)是以嵌入式計(jì)算機(jī)為技術(shù)核心,面向用戶、面向產(chǎn)品、面向應(yīng)用,軟硬件可裁減的,適用于對(duì)功能、可靠性、成本、體積、功耗等綜合性嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。和通用計(jì)算機(jī)不同,嵌入式系統(tǒng)是針對(duì)具體應(yīng)用的專(zhuān)用系統(tǒng),目的就是要把一切變得更簡(jiǎn)單、更方便、更普遍、更適用;它的硬件和軟件都必須高效率地設(shè)計(jì),量體裁衣、去除冗余,力爭(zhēng)在同樣的硅片面積上實(shí)現(xiàn)更高的性能。

  嵌入式系統(tǒng)主要由嵌入式處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及特定的應(yīng)用程序等四部分組成,是集軟硬件于一體的可獨(dú)立工作的“器件”;用于實(shí)現(xiàn)對(duì)其它設(shè)備的控制、監(jiān)視或管理等功能。

  嵌入式系統(tǒng)應(yīng)具有的特點(diǎn)是:要求高可靠性;在惡劣的環(huán)境或突然斷電的情況下,要求系統(tǒng)仍然能夠正常工作;許多嵌入式應(yīng)用要求實(shí)時(shí)處理能力,這就要求嵌入式操作系統(tǒng)(EOS)具有實(shí)時(shí)處理能力;嵌入式系統(tǒng)中的軟件代碼要求高質(zhì)量、高可靠性,一般都固化在只讀存儲(chǔ)器中或閃存中,也就是說(shuō)軟件要求固態(tài)化存儲(chǔ),而不是存儲(chǔ)在磁盤(pán)等載體中。

2 設(shè)備驅(qū)動(dòng)程序

Vxworks5.4中驅(qū)動(dòng)程序主要分為三種:字符、塊以及網(wǎng)絡(luò)驅(qū)動(dòng)程序。本文所介紹的網(wǎng)卡驅(qū)動(dòng)程序則屬于網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序。

2.1 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)

網(wǎng)絡(luò)的各功能部件圖1所示,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序?qū)嶋H上是處理硬件和上層協(xié)議之間的接口程序。網(wǎng)絡(luò)傳輸協(xié)議層分發(fā)數(shù)據(jù)在應(yīng)用程序接口和網(wǎng)絡(luò)接口之間。網(wǎng)絡(luò)化網(wǎng)絡(luò)協(xié)議(如IP協(xié)議)發(fā)送數(shù)據(jù)在網(wǎng)絡(luò)主機(jī)之間。連接/接口層使能主機(jī)隸屬于硬件到相同物理媒質(zhì)的通信。

在Vxworks5.4中,網(wǎng)卡驅(qū)動(dòng)程序又分為END(Enhanced Network Driver)和BSD兩種。它們分別處于如圖2所示結(jié)構(gòu)中。

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">2.1.1 BSD驅(qū)動(dòng)程序設(shè)計(jì)

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">在Vxworks5.4中,網(wǎng)絡(luò)驅(qū)動(dòng)程序都是基于BSD UNIX版本4.3基礎(chǔ)上的,這些驅(qū)動(dòng)程序都定義在一個(gè)全局例程中,那就是attach子程序,xxattach( )子程序中包含5個(gè)函數(shù)指針,它們都被映射到ifnet結(jié)構(gòu)中,這5個(gè)函數(shù)可見(jiàn)表1,它們?cè)贗P協(xié)議層任何地方被調(diào)用。

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">表1 網(wǎng)絡(luò)接口處理

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">

驅(qū)動(dòng)程序指定函數(shù)

函數(shù)指針

功能

xxInit( )

if_init

初始化接口

xxOutput( )

if_output

對(duì)要傳輸?shù)妮敵龇纸M進(jìn)行排隊(duì)

xxIoctl( )

if_ioctl

處理I/O控制命令

xxReset( )

if_reset

復(fù)位接口設(shè)備

xxWatchdog( )

if_watchdog (optional)

周期性接口例程

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">驅(qū)動(dòng)程序入口xxattach( )調(diào)用ether_attach( )來(lái)把上述5個(gè)函數(shù)映射到ifnet結(jié)構(gòu)中,ether_attach( )調(diào)用如下:

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">ether_attach(
    (IFNET *) & pDrvCtrl->idr,
    unit,
    "xx",
    (FUNCPTR) NULL,
    (FUNCPTR) xxIoctl,
    (FUNCPTR) ether_output( ), /* generic ether_output */
    (FUNCPTR) xxReset
);
pDrvCtrl->idr.ac_if.if_start = (FUNCPTR)xxTxStartup;
上述參數(shù)中,需要一個(gè)接口數(shù)據(jù)記錄(INTERFACE Data Record (idr)),unit號(hào)和設(shè)備名,下面四個(gè)參數(shù)就是相關(guān)驅(qū)動(dòng)程序的函數(shù)指針。第一個(gè)函數(shù)指針指的是init( )例程,這個(gè)例程可要可不要,第二個(gè)函數(shù)指針指的是ioctl( )接口,它允許上層來(lái)控制設(shè)備狀態(tài);第三個(gè)函數(shù)指針指的是把數(shù)據(jù)包送到物理層;最后一個(gè)函數(shù)指針指的是如果TCP/IP堆棧決定需要復(fù)位的話,它就復(fù)位這個(gè)設(shè)備。

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">接著下面那一句代碼表示添加數(shù)據(jù)傳輸例程到IDR,ether_output( )例程被調(diào)用后,傳輸開(kāi)始例程就被TCP/IP協(xié)議堆棧調(diào)用。

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">在這個(gè)入口驅(qū)動(dòng)程序中還包括設(shè)備的初始化、發(fā)送和接收描述符的初始化等。

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">2.1.2 END驅(qū)動(dòng)程序設(shè)計(jì)

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">END驅(qū)動(dòng)程序是基于MUX模式,網(wǎng)絡(luò)驅(qū)動(dòng)程序被劃分為協(xié)議組件和硬件組件。MUX數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層之間的接口,它管理網(wǎng)絡(luò)協(xié)議接口和低層硬件接口之間的交互;將硬件從網(wǎng)絡(luò)協(xié)議的細(xì)節(jié)中隔離出來(lái);刪除使用輸入鉤例程來(lái)過(guò)濾接收從協(xié)議來(lái)的數(shù)據(jù)包,和刪除了使用輸出鉤例程來(lái)過(guò)濾協(xié)議包的發(fā)送;并且鏈路層上的驅(qū)動(dòng)程序需要訪問(wèn)網(wǎng)絡(luò)層(IP或其他協(xié)議)時(shí),也會(huì)調(diào)用相關(guān)的MUX例程。值得注意的是,網(wǎng)絡(luò)層協(xié)議和數(shù)據(jù)鏈路層驅(qū)動(dòng)程序不能直接通訊,它們必須通過(guò)MUX。如圖3所示: 

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt">

CHAR-indent-count: 2.0; mso-CHAR-indent-size: 10.5pt"> 

2.3將驅(qū)動(dòng)程序加載到Vxworks系統(tǒng)中

要對(duì)所設(shè)計(jì)的驅(qū)動(dòng)程序進(jìn)行測(cè)試,首先就必須把驅(qū)動(dòng)程序加載到Vxworks IMAGE中,并且給設(shè)備分配一個(gè)IP,這樣才能有利于網(wǎng)間測(cè)試。

首先,修改configNet.h文件,添加如下代碼:

#ifdef INCLUDE_DM_9102_END

#define DM_9102_BUFF_LOAN_0      1

#define DM_9102_LOAD_FUNC        sysDm9102EndLoad

#define DM_9102_LOAD_STR_0       ""

IMPORT END_OBJ * DM_9102_LOAD_FUNC (CHAR *, void *);

和END_TBL_ENTRY endDevTbl [] 中添加

#ifdef INCLUDE_DM_9102_END

    {0, DM_9102_LOAD_FUNC, DM_9102_LOAD_STR_0, TRUE, NULL, FALSE},

#endif /* INCLUDE_DM_9102_END */

其次,編輯config.h文件,添加如下代碼:

#define INCLUDE_DM_9102_END      /* DAVICOM 9102 FAST ETHERNET CONTROLLER */

最后,編輯sysLib.c文件,添加如下代碼:

/* include dm9102 End driver SUPPORT routines */

#ifdef INCLUDE_DM_9102_END

IMPORT STATUS sysDm9102PciInit (void);

#endif /* INCLUDE_DM_9102_END */


/* include dm9102End driver SUPPORT routines */

#ifdef INCLUDE_DM_9102_END

#include "sysDm9102End.c"

#endif /* INCLUDE_DM_9102_END */

#ifdef INCLUDE_DM_9102_END

   sysDm9102PciInit ();

#endif /* INCLUDE_DM_9102_END */

通過(guò)上述過(guò)程相應(yīng)的添加程序,然后重新編譯Vxworks,這樣就將所設(shè)計(jì)的網(wǎng)卡驅(qū)動(dòng)程序添加到Vxworks內(nèi)核中了。

2.4 PCI設(shè)備檢測(cè)

如果所設(shè)計(jì)的網(wǎng)卡是基于PCI總線的,那么在程序開(kāi)始就需要對(duì)PCI設(shè)備進(jìn)行檢測(cè),在Vxworks5.4中有專(zhuān)門(mén)的PCI函數(shù)來(lái)檢測(cè)設(shè)備的總線號(hào)、設(shè)備號(hào)和功能號(hào)。首先利用pciFindDevice( )函數(shù)對(duì)給定VendorID和DeviceID的設(shè)備進(jìn)行檢測(cè),檢測(cè)完后同時(shí)給出了設(shè)備的總線號(hào)、設(shè)備號(hào)和功能號(hào);接下來(lái)就是獲得該設(shè)備的中斷號(hào)、基地址(包括IO和內(nèi)存)。Vxworks中pciConfigLib.h文件中定義PCI總線的常量。如中斷號(hào):PCI_CFG_BRG_INT_LINE,IO基地址:PCI_CFG_BASE_ADDRESS_0,內(nèi)存基地址:PCI_CFG_BASE_ADDRESS_1等等。所以利用函數(shù)pciConfigInByte和pciConfigInLong就可以很容易地獲得設(shè)備的中斷號(hào)和基地址。

2.5 調(diào)試方法

為了方便調(diào)試網(wǎng)卡驅(qū)動(dòng)程序,推薦利用串口對(duì)程序進(jìn)行下載并將Vxworks image拷貝到軟盤(pán)中以從軟盤(pán)來(lái)加載它。調(diào)試的時(shí)候首先應(yīng)該給網(wǎng)卡分配一個(gè)IP(利用usrNetIfConfig函數(shù)),然后利用ping來(lái)對(duì)網(wǎng)卡進(jìn)行測(cè)試。

3  結(jié)語(yǔ)

  利用上述方法所設(shè)計(jì)的網(wǎng)卡后,不久可以利用它來(lái)進(jìn)行程序下載,而且能滿足網(wǎng)卡所有的功能,包括對(duì)TCP/IP和UDP/IP(組播、廣播和單播)進(jìn)行了測(cè)試。


]]>
PowerPC+VxWorks嵌入計(jì)算機(jī)與軟件技術(shù)開(kāi)發(fā)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1429&Page=1wangxinxin2010-11-17 14:20:27? MPC8245嵌入計(jì)算機(jī)板

? MPC8541E嵌入計(jì)算機(jī)板

? MPC8560嵌入計(jì)算機(jī)板

? PowerPC開(kāi)發(fā)板系列
- PowerPC405EP開(kāi)發(fā)板
- PowerPC8245開(kāi)發(fā)板
- PowerPC8247開(kāi)發(fā)板
- PowerPC8280開(kāi)發(fā)板
- PowerPC8349開(kāi)發(fā)板

? 定制的PowerPC嵌入計(jì)算機(jī)板卡 如下:
- PowerPC405EP嵌入計(jì)算機(jī)板
- PowerPC405GPr嵌入計(jì)算機(jī)板
- PowerPC440GX嵌入計(jì)算機(jī)板
- MPC8260嵌入計(jì)算機(jī)板
- MPC8349嵌入計(jì)算機(jī)板
- MPC8536嵌入計(jì)算機(jī)板
- MPC8641D嵌入計(jì)算機(jī)板
- MPC7448嵌入式計(jì)算機(jī)板
- 1394接口協(xié)議棧for VxWorks
- USB2.0接口協(xié)議棧for VxWorks
- PATA接口硬盤(pán)存儲(chǔ)協(xié)議棧for VxWorks
- SATA接口硬盤(pán)存儲(chǔ)協(xié)議棧for VxWorks
- 高性能網(wǎng)絡(luò)協(xié)議棧for VxWorks
- 聲卡設(shè)備驅(qū)動(dòng)for VxWorks
- PowerPC在線配置FPGA方案for VxWorks
- 集成數(shù)據(jù)I/O與FPGA的PowerPC嵌入式系統(tǒng)for VxWorks

? 應(yīng)用于汽車(chē)電子的PowerPC嵌入式系統(tǒng)技術(shù)開(kāi)發(fā)
- 汽車(chē)電子OSEK/VDX嵌入式系統(tǒng)產(chǎn)品
- MPC5500 MPC5534 MPC5561等MPC55xx系列嵌入式電控板

]]>
VxWorks學(xué)習(xí)筆記——實(shí)戰(zhàn)之在VMWare上安裝VxWorks操作系統(tǒng)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1428&Page=1wangxinxin2010-11-17 14:18:55準(zhǔn)備工作
我們假設(shè)您有一臺(tái)普通配置的PC機(jī),并安裝了Windows2000操作系統(tǒng)。其次您需要安裝Tornado 2.2 for pcPentium開(kāi)發(fā)環(huán)境。缺省安裝的Tornado 2.2 for pcPentium可能不包括pcPentium的BSP組件,但該組件可以從風(fēng)河公司(Windriver)的網(wǎng)站免費(fèi)下載。
我們將在下文以WIND_BASE引用Tornado的安裝路徑。
其次是要安裝VMWare軟件,這里我們使用4.0的版本。如果您還沒(méi)有該軟件,也可以從VMWare的網(wǎng)站下載試用版。
最后,由于Tornado自帶的PC-NET網(wǎng)卡驅(qū)動(dòng)有問(wèn)題,所以需要下載AMD的PC-NET網(wǎng)卡的VxWorks系統(tǒng)驅(qū)動(dòng),可以從AMD網(wǎng)站免費(fèi)下載。
一張1.44M的軟盤(pán),用于制作系統(tǒng)引導(dǎo)盤(pán)。
準(zhǔn)備并安裝好以上軟件后,就可以開(kāi)始下一步的工作了。
 
開(kāi)始安裝
編譯網(wǎng)卡驅(qū)動(dòng)程序
VMWare為運(yùn)行于其上的操作系統(tǒng)提供虛擬網(wǎng)卡支持,該網(wǎng)卡類(lèi)型即為AMD的PC-NET。實(shí)際上,在Tornado開(kāi)發(fā)包中已經(jīng)包含了該類(lèi)型網(wǎng)卡的驅(qū)動(dòng)程序,但經(jīng)過(guò)測(cè)試,對(duì)于VMWare無(wú)法正常工作,所以您需要從AMD的網(wǎng)站下載最新的驅(qū)動(dòng)程序。
下載得到的是一個(gè)可執(zhí)行的安裝程序,運(yùn)行該程序?qū)⒌玫揭粋(gè)壓縮包和一個(gè)幫助文件,按照該幫助的要求,將壓縮包直接釋放到Tornado目錄下。如果提示是否允許覆蓋文件,則選擇允許。
此后按如下步驟完成驅(qū)動(dòng)程序的編譯和替換:
  • 打開(kāi)一個(gè)控制臺(tái)窗口,運(yùn)行批處理程序:$(WIND_BASE)\host\x86-win32\bin\ torVars.bat;
  • 重新定位到$(WIND_BASE)\target\src\drv\end目錄,運(yùn)行:
make CPU=PENTIUM tool=gnu ln97xend.o
其間會(huì)產(chǎn)生一些警告,但這不會(huì)影響我們的工作。
  • 重新定位到$(WIND_BASE)\target\lib\pentium\PENTIUM\common目錄,并將上一步生成的文件ln97xend.o復(fù)制到此目錄下。備份此目錄下的文件libdrv.a;
  • 運(yùn)行命令arpentium -d libdrv.a ln97xEnd.o,刪除libdrv.a中原有的ln97xEnd模塊,然后再運(yùn)行命令:
arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o
將我們剛剛創(chuàng)建的新模塊添加進(jìn)去。
到此有關(guān)網(wǎng)卡驅(qū)動(dòng)的設(shè)置就完成了。注意不要關(guān)閉這個(gè)窗口,后面還要使用。
 
修改配置文件
在這一節(jié)中,我們要修改編譯VxWorks的配置頭文件Config.h中定義的一些參數(shù),使編譯出來(lái)的系統(tǒng)引導(dǎo)程序和VxWorks的映象符合我們的要求;同時(shí)還要修改sysLn97xEnd.c這個(gè)文件,以使系統(tǒng)的網(wǎng)絡(luò)功能正常運(yùn)行。
  • 定位目錄到$(WIND_BASE)\target\config\pcPentium并打開(kāi)該目錄下Config.h文件;
  • 我們首先要修改VxWorks的啟動(dòng)參數(shù)。先查找到定義DEFAULT_BOOT_LINE宏的地方,修改預(yù)處理?xiàng)l件CPU == PENTIUM分支下的定義如下:
#define DEFAULT_BOOT_LINE \
"lnPci(0,0)your_host_name:d:\\vxWorks h=192.168.80.169 e=192.168.80.254 u=target pw=vxworks tn=target"
其中:
  • lnPci(0,0)指定了使用第0個(gè)網(wǎng)卡和第0個(gè)處理器,lnPci這個(gè)標(biāo)識(shí)會(huì)因?yàn)槭褂玫尿?qū)動(dòng)程序不同而有所不同,但這里用lnPci就可以了;
  • your_host_name指定您的主機(jī)的名字,使用Windows系統(tǒng)的主機(jī)名就可以;
  • d:\\vxWorks指定了VxWorks映象下載的完整路徑;
  • h=192.168.80.169是主機(jī)的IP地址,就是您當(dāng)前正在使用的系統(tǒng)的IP地址;
  • e=192.168.80.254是目標(biāo)機(jī)的IP地址,也就是未來(lái)VxWorks操作系統(tǒng)的IP地址,您只要任意指定一個(gè)不沖突的IP地址即可,這里我們假設(shè)您的目標(biāo)機(jī)IP地址和主機(jī)IP地址在同一個(gè)網(wǎng)段內(nèi);
  • u=target指定了FTP服務(wù)器的用戶名,這個(gè)FTP就是用來(lái)下載VxWorks映象的,后面還會(huì)提到;
  • pw=vxwroks是用戶名對(duì)應(yīng)的口令;
  • tn=target指定目標(biāo)機(jī)的名字,任意指定即可;
您可以參考Tornado自帶的手冊(cè)以獲取更多信息;
  • 下面我們要指定使用什么樣的網(wǎng)卡驅(qū)動(dòng)程序。首先查找“Network driver options”這段文字,之后您可以看到在該注釋后面定義了一系列的有關(guān)網(wǎng)卡驅(qū)動(dòng)的宏定義。注意保證INCLUDE_END和INCLUDE_LN_97X_END這兩個(gè)宏處于定義狀態(tài)(define),其他的宏都處于未定義狀態(tài)(undef);
  • 缺省情況下,VxWorks系統(tǒng)是不接受外部輸入設(shè)備(如鍵盤(pán))的輸入,也不向外部輸出設(shè)備(如顯示器)輸出數(shù)據(jù)。為了便于調(diào)試,我們必須改變它的這種缺省狀態(tài)。我們查找定位宏INCLUDE_PC_CONSOLE,然后保證其處于定義狀態(tài)(define)即可;
  • 到此為止,對(duì)config.h文件的修改就完成了,保存修改,然后再打開(kāi)同一目錄下的sysLn97xEnd.c文件;
  • 這一步修改的目的是要使網(wǎng)卡正常工作。我們先定位到“memory-mapped IO base”這段文字,然后將其前面的參數(shù)由pciRsrc[endUnit].bar[1]修改為NONE,這樣就可以了。最后別忘了保存。
到此為止,全部的修改工作都完成了,下一步就可以開(kāi)始編譯連接了。
 
編譯程序
這一節(jié)我們要編譯生成bootrom引導(dǎo)程序和VxWorks運(yùn)行映象。
  • 打開(kāi)您的Tornado開(kāi)發(fā)工具,在Build菜單下選擇Build Boot ROM,彈出如下對(duì)話框:
 

BSP列表中選擇pcPentium,而在Image to build列表中分別選擇bootrom和gnu。完成選擇后,點(diǎn)擊OK按鈕就開(kāi)始引導(dǎo)程序的編譯了。編譯產(chǎn)生的文件bootrom將保存在$(WIND_BASE)\target\config\pcPentium目錄下。
  • 編譯生成bootrom后,還要?jiǎng)?chuàng)建一個(gè)VxWorks映象(image),也就是VxWorks操作系統(tǒng)本身的代碼。
    • 創(chuàng)建一個(gè)“bootable VxWorks image”的工程;
    • 選擇您需要的VxWorks組件。這一步是可選的,如果您只想使用缺省的配置,那根本就不需要這一步;但如果您想使用額外的組件,例如,您可能想通過(guò)telnet連接VxWorks系統(tǒng),這時(shí)就需要在Workspace窗口的VxWorks選項(xiàng)卡中選擇telnet sever對(duì)應(yīng)的組件,如下圖:

在這個(gè)例子中我們選擇了兩個(gè)重要的組件:Telnet server 和 Target shell 。前者使我們可以通過(guò)Telnet協(xié)議登錄到VxWorks操作系統(tǒng)中;后者則可以讓我們通過(guò)命令行控制VxWorks系統(tǒng)。
    • 完成選擇后,即可開(kāi)始編譯程序;
 
  • 到此我們已經(jīng)生成了VxWorks的系統(tǒng)引導(dǎo)程序和運(yùn)行時(shí)的代碼映象。這里還要提醒讀者,在您每次修改完系統(tǒng)的配置信息(如:config.h)后,都要重新創(chuàng)建一個(gè)工程來(lái)編譯VxWorks映象,以免出現(xiàn)代碼不一致的問(wèn)題。
  • 將生成的名為“vxworks”的文件復(fù)制到D盤(pán)根目錄下。這個(gè)路徑是由上面我們所設(shè)置的DEFAULT_BOOT_LINE宏中的路徑參數(shù)決定的,必須保持二者一致。
制作引導(dǎo)磁盤(pán)
現(xiàn)在開(kāi)始制作VxWorks系統(tǒng)引導(dǎo)磁盤(pán),用于引導(dǎo)裝載VxWorks運(yùn)行映象。
我們回到“編譯網(wǎng)卡驅(qū)動(dòng)程序”一節(jié)中所打開(kāi)的控制臺(tái)窗口,定位目錄到$(WIND_BASE)\target\config\pcPentium,插入您已經(jīng)格式化好的軟盤(pán),然后運(yùn)行:
mkboot a: bootrom
該命令將在軟盤(pán)上建立VxWorks系統(tǒng)引導(dǎo)分區(qū),并將引導(dǎo)程序復(fù)制到軟盤(pán)上。
這里再額外向您介紹一個(gè)虛擬軟盤(pán)的工具:RamDiskNT,它可以在內(nèi)存中建立一個(gè)虛擬的軟盤(pán),對(duì)于提高VxWorks的啟動(dòng)速度有很大幫助。
 
配置FTP服務(wù)器
這里的FTP服務(wù)器用于在系統(tǒng)成功引導(dǎo)后,下載VxWorks的運(yùn)行時(shí)映象。我們這里使用Tornado開(kāi)發(fā)環(huán)境自帶的FTP服務(wù)器。
  • 打開(kāi)Tornado FTP Server,選擇“Security”菜單下的“Users/Rights”子菜單,彈出如下對(duì)話框:

當(dāng)User Name為“target”時(shí),修改“Home Directory”為D盤(pán)根目錄(此路徑由上面的DEFAULT_BOOT_LINE參數(shù)決定),同時(shí)修改口令為“vxworks”,最后點(diǎn)擊“Done”按鈕完成修改;
  • 為了便于調(diào)試,我們還要打開(kāi)FTP Server的日志功能。選擇“Logging”菜單下的“Logging Options”子菜單,彈出如下對(duì)話框,其中除了“Winsock Calls”外,讓其他選項(xiàng)全都處于開(kāi)啟狀態(tài)。
  • 保持FTP Server窗口處于打開(kāi)狀態(tài)(這樣FTP服務(wù)器就處于運(yùn)行狀態(tài))。
 
創(chuàng)建VxWorks系統(tǒng)
  • 打開(kāi)您的VMWare Workstation,在File->New菜單下選擇創(chuàng)建一個(gè)新的虛擬機(jī)(Virtual Machine),按照其向?qū)椭瓿商摂M機(jī)的配置。在選擇操作系統(tǒng)類(lèi)型時(shí),選擇“Other”,其余選項(xiàng)均使用缺省值就可以了。
  • 完成以上配置后,點(diǎn)擊右側(cè)窗口中的“Start this virtual machine”,系統(tǒng)即開(kāi)始引導(dǎo)運(yùn)行,如下圖所示:

 

在引導(dǎo)過(guò)程中,您會(huì)遇到一個(gè)7秒鐘的等待,以決定是使用缺省的引導(dǎo)參數(shù),還是手動(dòng)輸入引導(dǎo)參數(shù)。這里我們選擇前者,所以不需要做任何工作。
成功引導(dǎo)后,系統(tǒng)會(huì)自動(dòng)從FTP Server下載映象,并開(kāi)始運(yùn)行,得到如下畫(huà)面:
 
 
到此,我們已經(jīng)成功的在VMWare上安裝了VxWorks操作系統(tǒng)。
需要注意的是,上面的畫(huà)面會(huì)因?yàn)檫x擇組件的不同而略微有所不同(例如,如果您沒(méi)有選擇target shell,就不會(huì)出現(xiàn)命令行提示符),但一般不會(huì)影響后續(xù)操作。
配置聯(lián)機(jī)調(diào)試環(huán)境
裝好系統(tǒng)后,您肯定還希望將自己編寫(xiě)的應(yīng)用程序下載到目標(biāo)機(jī)進(jìn)行調(diào)試,下面我們就完成這一部分的配置工作。
打開(kāi)您的Tornado開(kāi)發(fā)環(huán)境,選擇“Tools->Target Server->Configure”菜單,彈出如下對(duì)話框:
“Description”中任意填寫(xiě)一個(gè)名字,這里是“net00”;在“Available Back”中選擇“wdbrpc”,并在下面的IP地址框中填寫(xiě)目標(biāo)機(jī)的IP地址,這里是“192.168.80.254”(由DEFAULT_BOOT_LINE參數(shù)決定);將“Target Server Properties”下拉框更改至“Core File and Symbols”,并在“File Path”一項(xiàng)中選擇您的映象的完整路徑,這里是“D:\vxWorks”(由DEFAULT_BOOT_LINE參數(shù)決定)。
完成以上兩項(xiàng)配置,點(diǎn)擊“Launch”按鈕,就可以啟動(dòng)Target Server了。
再回到Tornado開(kāi)發(fā)環(huán)境,在工具條上的Target Server下拉框列表中選擇“192.168.80.254@your_host_name”。這時(shí)您會(huì)發(fā)現(xiàn)工具條中一些原先處于“禁用”狀態(tài)的工具按鈕,現(xiàn)在都已經(jīng)處于“激活”狀態(tài)了。
現(xiàn)在您就可以開(kāi)始聯(lián)機(jī)調(diào)試您的VxWorks應(yīng)用程序了]]>
基于VxWorks的配電子站http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1427&Page=1wangxinxin2010-11-17 14:11:27

  IEC60870-5-104規(guī)定控制站(即配電主站)作為客戶機(jī),而被控站(即配電子站)作為服務(wù)器。

  基于網(wǎng)絡(luò)的IEC60870-5-104規(guī)約通信報(bào)文格式:I格式-可計(jì)數(shù)的信息傳輸功能;S格式-可計(jì)數(shù)的確認(rèn)功能;U格式-啟動(dòng),停止,測(cè)試功能。

  通信流程圖如圖2所示。

圖片點(diǎn)擊可在新窗口打開(kāi)查看

  圖2 IEC60870-5-104規(guī)約通信流程圖

  3.4 BSP開(kāi)發(fā)

  BSP是針對(duì)具體的硬件平臺(tái),用戶所編寫(xiě)的啟動(dòng)代碼和部分設(shè)備驅(qū)動(dòng)程序的集合。BSP所實(shí)現(xiàn)的功能包括初始化和驅(qū)動(dòng)部分設(shè)備。BSP需要支持處理器復(fù)位、初始化、驅(qū)動(dòng)串口和必要的時(shí)鐘處理等。

  3.5 功能實(shí)現(xiàn)

  從配電終端讀取數(shù)據(jù):配電終端裝置通過(guò)CAN2.0B規(guī)約將YC、YX量等數(shù)據(jù)傳送至配電子站,并將數(shù)據(jù)填入已開(kāi)辟的緩沖區(qū)。使用緩沖區(qū)操作使得系統(tǒng)對(duì)底層驅(qū)動(dòng)程序的調(diào)用機(jī)會(huì)大大減少,將大量的數(shù)據(jù)實(shí)時(shí)的保存下來(lái),以便于查詢和轉(zhuǎn)發(fā)。

  轉(zhuǎn)發(fā)緩沖區(qū)數(shù)據(jù):配電子站需要將從配電終端裝置獲取的數(shù)據(jù)有選擇地轉(zhuǎn)發(fā)到配電主站上去,或者接受配電主站有選擇的查詢。遙測(cè)改變,配電子站具有上送功能。

  發(fā)送數(shù)據(jù)到配電主站:配電子站通過(guò)以太網(wǎng)將從配電終端讀取的數(shù)據(jù)傳送到配電主站,遵循基于網(wǎng)絡(luò)的IEC60870-5-104遠(yuǎn)動(dòng)傳輸規(guī)約。

  4 系統(tǒng)測(cè)試和實(shí)驗(yàn)

  4.1 系統(tǒng)測(cè)試平臺(tái)

  系統(tǒng)硬件測(cè)試平臺(tái)主要用于測(cè)試配電子站與配電終端之間的CAN通信以及配電子站與配電主站之間的以太網(wǎng)通信。測(cè)試中配電終端裝置采用國(guó)電南瑞的DAT-1000系列產(chǎn)品,主要與DAT-1L和DAT-1LA裝置進(jìn)行通信。而主站則采用在PC機(jī)上通過(guò)與模擬主站進(jìn)行通信來(lái)測(cè)試以太網(wǎng)通信。

  4.2 測(cè)試與實(shí)驗(yàn)結(jié)果

  經(jīng)過(guò)嚴(yán)格的測(cè)試和苛刻的實(shí)驗(yàn),基于嵌入式硬件平臺(tái)的配電子站能夠按照要求完成與配電主站和配電終端之間的通信。采用CAN總線通信方式與多個(gè)FTU進(jìn)行通信,通信抗干擾力強(qiáng),通信速度快,不丟失遙測(cè)量及SOE等。采用以太網(wǎng)通過(guò)基于網(wǎng)絡(luò)的IEC60870-5-104遠(yuǎn)動(dòng)傳輸規(guī)約與配電主站進(jìn)行通信,系統(tǒng)可靠性高,通信速度快,完全符合配電自動(dòng)化系統(tǒng)通信要求。

]]>
基于Vxworks嵌入式下網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1426&Page=1wangxinxin2010-11-17 14:09:32  嵌入式系統(tǒng)是以嵌入式計(jì)算機(jī)為技術(shù)核心,面向用戶、面向產(chǎn)品、面向應(yīng)用,軟硬件可裁減的,適用于對(duì)功能、可靠性、成本、體積、功耗等綜合性嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。和通用計(jì)算機(jī)不同,嵌入式系統(tǒng)是針對(duì)具體應(yīng)用的專(zhuān)用系統(tǒng),目的就是要把一切變得更簡(jiǎn)單、更方便、更普遍、更適用;它的硬件和軟件都必須高效率地設(shè)計(jì),量體裁衣、去除冗余,力爭(zhēng)在同樣的硅片面積上實(shí)現(xiàn)更高的性能。

  嵌入式系統(tǒng)主要由嵌入式處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及特定的應(yīng)用程序等四部分組成,是集軟硬件于一體的可獨(dú)立工作的“器件”;用于實(shí)現(xiàn)對(duì)其它設(shè)備的控制、監(jiān)視或管理等功能。

  嵌入式系統(tǒng)應(yīng)具有的特點(diǎn)是:要求高可靠性;在惡劣的環(huán)境或突然斷電的情況下,要求系統(tǒng)仍然能夠正常工作;許多嵌入式應(yīng)用要求實(shí)時(shí)處理能力,這就要求嵌入式操作系統(tǒng)(EOS)具有實(shí)時(shí)處理能力;嵌入式系統(tǒng)中的軟件代碼要求高質(zhì)量、高可靠性,一般都固化在只讀存儲(chǔ)器中或閃存中,也就是說(shuō)軟件要求固態(tài)化存儲(chǔ),而不是存儲(chǔ)在磁盤(pán)等載體中。

  2.設(shè)備驅(qū)動(dòng)程序

  Vxworks5.4中驅(qū)動(dòng)程序主要分為三種:字符、塊以及網(wǎng)絡(luò)驅(qū)動(dòng)程序。本文所介紹的網(wǎng)卡驅(qū)動(dòng)程序則屬于網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序。

  ·網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)

  網(wǎng)絡(luò)的各功能部件圖1所示,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序?qū)嶋H上是處理硬件和上層協(xié)議之間的接口程序。網(wǎng)絡(luò)傳輸協(xié)議層分發(fā)數(shù)據(jù)在應(yīng)用程序接口和網(wǎng)絡(luò)接口之間。網(wǎng)絡(luò)化網(wǎng)絡(luò)協(xié)議(如IP協(xié)議)發(fā)送數(shù)據(jù)在網(wǎng)絡(luò)主機(jī)之間。連接/接口層使能主機(jī)隸屬于硬件到相同物理媒質(zhì)的通信。

  在Vxworks5.4中,網(wǎng)卡驅(qū)動(dòng)程序又分為END(Enhanced Network Driver)和BSD兩種。

  ·BSD驅(qū)動(dòng)程序設(shè)計(jì)

  在Vxworks5.4中,網(wǎng)絡(luò)驅(qū)動(dòng)程序都是基于BSD UNIX版本4.3基礎(chǔ)上的,這些驅(qū)動(dòng)程序都定義在一個(gè)全局例程中,那就是attach子程序,xxattach( )子程序中包含5個(gè)函數(shù)指針,它們都被映射到ifnet結(jié)構(gòu)中,它們?cè)贗P協(xié)議層任何地方被調(diào)用。

需要一個(gè)接口數(shù)據(jù)記錄(Interface Data Record (idr)),unit號(hào)和設(shè)備名,下面四個(gè)參數(shù)就是相關(guān)驅(qū)動(dòng)程序的函數(shù)指針。第一個(gè)函數(shù)指針指的是init( )例程,這個(gè)例程可要可不要,第二個(gè)函數(shù)指針指的是ioctl( )接口,它允許上層來(lái)控制設(shè)備狀態(tài);第三個(gè)函數(shù)指針指的是把數(shù)據(jù)包送到物理層;最后一個(gè)函數(shù)指針指的是如果TCP/IP堆棧決定需要復(fù)位的話,它就復(fù)位這個(gè)設(shè)備。

  接著下面那一句代碼表示添加數(shù)據(jù)傳輸例程到IDR,ether_output( )例程被調(diào)用后,傳輸開(kāi)始例程就被TCP/IP協(xié)議堆棧調(diào)用。

  在這個(gè)入口驅(qū)動(dòng)程序中還包括設(shè)備的初始化、發(fā)送和接收描述符的初始化等。

  ·END驅(qū)動(dòng)程序設(shè)計(jì)

  END驅(qū)動(dòng)程序是基于MUX模式,網(wǎng)絡(luò)驅(qū)動(dòng)程序被劃分為協(xié)議組件和硬件組件。MUX數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層之間的接口,它管理網(wǎng)絡(luò)協(xié)議接口和低層硬件接口之間的交互;將硬件從網(wǎng)絡(luò)協(xié)議的細(xì)節(jié)中隔離出來(lái);刪除使用輸入鉤例程來(lái)過(guò)濾接收從協(xié)議來(lái)的數(shù)據(jù)包,和刪除了使用輸出鉤例程來(lái)過(guò)濾協(xié)議包的發(fā)送;并且鏈路層上的驅(qū)動(dòng)程序需要訪問(wèn)網(wǎng)絡(luò)層(IP或其他協(xié)議)時(shí),也會(huì)調(diào)用相關(guān)的MUX例程。值得注意的是,網(wǎng)絡(luò)層協(xié)議和數(shù)據(jù)鏈路層驅(qū)動(dòng)程序不能直接通訊,它們必須通過(guò) MUX。如圖3所示:

]]>
VxWorks環(huán)境下雙冗余以太網(wǎng)卡技術(shù)在底層驅(qū)動(dòng)中的實(shí)現(xiàn)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1425&Page=1wangxinxin2010-11-17 14:06:49 隨著以太網(wǎng)的穩(wěn)定性、抗干擾性和帶寬問(wèn)題的逐步改善,以太網(wǎng)正在大規(guī)模進(jìn)入工業(yè)控制領(lǐng)域。用于工業(yè)過(guò)程控制、通信、航天器和導(dǎo)航系統(tǒng)中的網(wǎng)絡(luò)對(duì)可靠性及其響應(yīng)故障的快速性要求極高。當(dāng)前,冗余設(shè)計(jì)作為一種提高設(shè)備可靠性的有效方法,已經(jīng)得到了廣泛的應(yīng)用。對(duì)于網(wǎng)絡(luò)系統(tǒng)中的單個(gè)節(jié)點(diǎn),常常需要對(duì)網(wǎng)卡進(jìn)行雙冗余備份,即每個(gè)節(jié)點(diǎn)都采用2塊網(wǎng)卡(或2個(gè)網(wǎng)口),中間用集線器或交換機(jī)互連,當(dāng)正常通信的網(wǎng)卡或線路出現(xiàn)故障時(shí),該節(jié)點(diǎn)能自動(dòng)地切換到備份網(wǎng)卡進(jìn)行通信。圖1為冗余網(wǎng)絡(luò)的一種典型聯(lián)接形式。 

        具有雙冗余網(wǎng)卡的節(jié)點(diǎn)雖然有2塊網(wǎng)卡,2條通道,但對(duì)于高層應(yīng)用系統(tǒng)來(lái)說(shuō),仍呈現(xiàn)單網(wǎng)卡的特征。具體來(lái)講,2塊網(wǎng)卡共有1個(gè)物理地址,1個(gè)IP地址。根據(jù)TCP/IP參考模型,TCP/IP協(xié)議族可以分為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和鏈路層4層,冗余網(wǎng)卡技術(shù)可以在其中各個(gè)層面中實(shí)現(xiàn)。 



        VxWorks、MUX與網(wǎng)卡驅(qū)動(dòng)程序 

        嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks的網(wǎng)絡(luò)協(xié)議棧與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的接口有2種:一種是標(biāo)準(zhǔn)的BSD4.4Driver,它將Driver和協(xié)議緊密關(guān)聯(lián)在一起,不利于多協(xié)議的支持;另一種標(biāo)準(zhǔn)是VxWorks特有的,它將Driver和協(xié)議棧隔離開(kāi),使二者通過(guò)一個(gè)稱(chēng)為MUX的薄層相連,使得網(wǎng)絡(luò)服務(wù)免受特定的網(wǎng)絡(luò)接口驅(qū)動(dòng)程序的影響,達(dá)到Driver獨(dú)立于具體協(xié)議的目的,從而實(shí)現(xiàn)多協(xié)議的支持,三者間的關(guān)系如圖2所示。 



            目前版本的MUX支持2種網(wǎng)絡(luò)驅(qū)動(dòng)程序接口模式:增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng)程序接口( END)和網(wǎng)絡(luò)協(xié)議工具包(NPT)驅(qū)動(dòng)程序接口。現(xiàn)以END型網(wǎng)卡驅(qū)動(dòng)為例介紹如何在VxWorks5.4下的NE2000兼容網(wǎng)卡驅(qū)動(dòng)程序中實(shí)現(xiàn)雙網(wǎng)卡冗余設(shè)計(jì)。正常情況下,協(xié)議驅(qū)動(dòng)程序通過(guò)MUX層提供的NIC的句柄來(lái)提交請(qǐng)求,這個(gè)句柄是調(diào)用EndLoaD()獲得的;然后MUX層調(diào)用網(wǎng)卡驅(qū)動(dòng)程序中的接口函數(shù),實(shí)現(xiàn)高層協(xié)議驅(qū)動(dòng)程序的請(qǐng)求。 

        在應(yīng)用層實(shí)現(xiàn)雙冗余網(wǎng)卡技術(shù)的分析 

        在系統(tǒng)中對(duì)網(wǎng)卡進(jìn)行雙冗余備份,即1塊網(wǎng)卡在正常工作時(shí)使用,另1塊網(wǎng)卡作為備份。備份用的網(wǎng)卡處于激活狀態(tài)。在正常通信的網(wǎng)卡出現(xiàn)故障或系統(tǒng)需要時(shí),備份用的網(wǎng)卡能實(shí)時(shí)地、自動(dòng)地切換到繼續(xù)工作。顯然,這就要求2塊網(wǎng)卡只能使用同1個(gè)物理地址和同1個(gè)IP地址。從應(yīng)用程序的角度看,只會(huì)看見(jiàn)1塊網(wǎng)卡在工作,不關(guān)心是哪塊網(wǎng)卡在工作及如何切換。 

        理論上講,冗余網(wǎng)卡技術(shù)可以在OSI各層中實(shí)現(xiàn),而且越在底層實(shí)現(xiàn),檢測(cè)和切換的速度越快,效果應(yīng)該越好。其他利用應(yīng)用層實(shí)現(xiàn)雙冗余網(wǎng)卡的主要方法是在程序中發(fā)起任務(wù),以查詢的方式不斷對(duì)當(dāng)前工作網(wǎng)卡的工作狀態(tài)進(jìn)行判斷,當(dāng)判斷出當(dāng)前使用的網(wǎng)卡處于非正常狀態(tài)的時(shí)候,將刪除當(dāng)前網(wǎng)卡的路由,在主機(jī)列表中刪除當(dāng)前主機(jī)名,并解除網(wǎng)卡與協(xié)議的綁定;然后進(jìn)行備份網(wǎng)卡的配置:為備份網(wǎng)卡綁定協(xié)議,設(shè)置子網(wǎng)掩碼和IP地址。用此種方法實(shí)際測(cè)試,測(cè)試中使裝有雙網(wǎng)卡的主機(jī)不斷向外發(fā)送廣播報(bào)文,同時(shí)用網(wǎng)絡(luò)分析軟件接收。測(cè)得2個(gè)網(wǎng)口的切換時(shí)間平均為120ms,在切換期間有很多廣播報(bào)文丟失。可見(jiàn)在應(yīng)用層實(shí)現(xiàn)雙網(wǎng)卡冗余備份技術(shù),網(wǎng)卡切換速度慢,不利于網(wǎng)絡(luò)的可靠性和實(shí)時(shí)性。 

        在驅(qū)動(dòng)程序中的實(shí)現(xiàn) 

        在VxWorks系統(tǒng)中,相同類(lèi)型的網(wǎng)卡使用同一個(gè)驅(qū)動(dòng)程序,網(wǎng)卡之間由驅(qū)動(dòng)程序提供的句柄來(lái)區(qū)別。MUX調(diào)用NIC驅(qū)動(dòng)程序的接口函數(shù)時(shí),都會(huì)把網(wǎng)卡的句柄傳入函數(shù)中。這就為在驅(qū)動(dòng)程序中實(shí)現(xiàn)雙網(wǎng)卡冗余備份提供了基礎(chǔ)。因此要實(shí)現(xiàn)網(wǎng)卡的雙冗余備份,最理想的辦法是在NIC驅(qū)動(dòng)程序中實(shí)現(xiàn)。 

        數(shù)據(jù)結(jié)構(gòu) 
        網(wǎng)卡驅(qū)動(dòng)程序中最關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)是有關(guān)網(wǎng)卡特性的數(shù)據(jù)結(jié)構(gòu)。每種網(wǎng)卡都有它自己的特性,包括它的單元號(hào)、中斷向量、I/O基址、物理地址等。 

        系統(tǒng)啟動(dòng)時(shí),在網(wǎng)卡驅(qū)動(dòng)的裝載函數(shù)中ne2000EndLoad( )中,會(huì)為設(shè)備初始化1個(gè)數(shù)據(jù)結(jié)構(gòu),并分配一個(gè)指針指向這個(gè)結(jié)構(gòu)。這時(shí)定義2個(gè)全局指針: 

        NE2000END-DEVICE * pDrvCtrl-0; 
        NE2000END-DEVICE * pDrvCtrl-1; 

        在網(wǎng)卡初始化時(shí)把這2個(gè)指針?lè)謩e指向2塊網(wǎng)卡的數(shù)據(jù)結(jié)構(gòu),通過(guò)這2個(gè)指針的定義,在MUX調(diào)用NIC驅(qū)動(dòng)程序的接口函數(shù)時(shí),可以根據(jù)網(wǎng)卡的好壞或系統(tǒng)的需要來(lái)選擇pDrvCtrl-0或pDrvCtrl-1,以調(diào)整工作網(wǎng)卡。 

        發(fā)送和接收處理 
        在上層驅(qū)動(dòng)程序通過(guò)MUX調(diào)用NIC驅(qū)動(dòng)程序的發(fā)送函數(shù)時(shí),會(huì)傳入網(wǎng)卡的句柄,指定要使用的網(wǎng)卡。通常情況下,驅(qū)動(dòng)程序會(huì)根據(jù)該句柄向相應(yīng)網(wǎng)卡發(fā)出指令,把報(bào)文發(fā)出去。在雙網(wǎng)卡冗余備份驅(qū)動(dòng)程序中,根據(jù)需要來(lái)指定發(fā)送數(shù)據(jù)要使用的網(wǎng)卡,而不一定使用MUX指定的網(wǎng)卡。如先讀2塊網(wǎng)卡的Link信號(hào)寄存器,判斷網(wǎng)絡(luò)連線的通斷,再?zèng)Q定使用哪一塊網(wǎng)卡來(lái)發(fā)送數(shù)據(jù)。 

        在接收?qǐng)?bào)文的時(shí)候,通常是在中斷中進(jìn)行處理。因?yàn)橐蕴W(wǎng)在物理層上的特點(diǎn),2塊網(wǎng)卡都能收到報(bào)文,不同的是只有與高層協(xié)議綁定的網(wǎng)卡收到的數(shù)據(jù)才能向上傳遞。在雙網(wǎng)卡冗余備份驅(qū)動(dòng)程序中,不是由MUX指定的網(wǎng)卡句柄來(lái)向上傳送數(shù)據(jù),而是根據(jù)當(dāng)前網(wǎng)卡的工作狀態(tài)向上層傳送數(shù)據(jù),即使數(shù)據(jù)是從另一塊網(wǎng)卡上接收來(lái)的或另一塊網(wǎng)卡沒(méi)有和高層協(xié)議綁定。 

        單物理地址的處理 
        通常每塊網(wǎng)卡有1個(gè)全世界范圍內(nèi)唯一的物理地址,它保存在網(wǎng)卡的PROM中。網(wǎng)卡初始化時(shí),要從PROM中讀出物理地址,把它存放在適當(dāng)?shù)募拇嫫骱蛿?shù)據(jù)結(jié)構(gòu)中。 

        要使2塊網(wǎng)卡能相互備份,它們必須有相同的物理地址和IP地址。在雙網(wǎng)卡冗余備份驅(qū)動(dòng)程序中,可以用其中1塊網(wǎng)卡的物理地址。方法有2種:在驅(qū)動(dòng)程序初始化時(shí)只讀1塊網(wǎng)卡的PROM中的物理地址;或者在網(wǎng)卡驅(qū)動(dòng)程序中的ne2000EnetAddrGet()函數(shù)中作修改,完全可以給網(wǎng)卡設(shè)定任意的物理地址(只要避免了同一網(wǎng)絡(luò)中的沖突)。 

        單IP地址處理 
        至于2塊網(wǎng)卡采用相同的IP地址,可以這樣實(shí)現(xiàn):在安裝2塊網(wǎng)卡時(shí),只讓1塊網(wǎng)卡有IP地址,另1塊網(wǎng)卡沒(méi)有IP地址。因?yàn)榻o網(wǎng)卡綁定IP地址是在IP協(xié)議所在的網(wǎng)絡(luò)層實(shí)現(xiàn)的,所以在網(wǎng)絡(luò)層以下切換網(wǎng)卡對(duì)上層來(lái)說(shuō)是完全透明的。應(yīng)用程序自始自終只看見(jiàn)1塊網(wǎng)卡在工作。圖3是從應(yīng)用程序的角度看雙網(wǎng)卡備份的示意圖。 

        效果分析 
        通過(guò)對(duì)比實(shí)驗(yàn),在應(yīng)用層實(shí)現(xiàn)雙網(wǎng)卡冗余備份的平均網(wǎng)卡切換時(shí)間是120ms,在驅(qū)動(dòng)層實(shí)現(xiàn)雙網(wǎng)卡冗余備份的平均網(wǎng)卡切換時(shí)間是5ms,相對(duì)于在應(yīng)用層或其他高層中實(shí)現(xiàn),效率較高,大大縮短雙網(wǎng)卡的切換時(shí)間,從而降低切換時(shí)網(wǎng)絡(luò)通信丟包的機(jī)率。 

 ]]>
基于VxWorks嵌入式操作系統(tǒng)的SNMP應(yīng)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1424&Page=1wangxinxin2010-11-17 10:46:26 摘  要:本文介紹了基于VxWorks操作系統(tǒng)下設(shè)備管理的基本流程,同時(shí)給出了設(shè)計(jì)代理的詳細(xì)過(guò)程。

關(guān)鍵字:實(shí)時(shí)操作系統(tǒng) 簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議 代理

1. 引言

  簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)已經(jīng)成為目前網(wǎng)絡(luò)管理方面事實(shí)上的標(biāo)準(zhǔn)。同命名一樣,它的操作非常簡(jiǎn)單易行,所以引起了越來(lái)越多的商家的注意,在計(jì)算機(jī)、通信和自動(dòng)化等各個(gè)領(lǐng)域都發(fā)揮了很大的作用。同時(shí),VxWorks嵌入式操作系統(tǒng)又由于其出色的實(shí)時(shí)性和穩(wěn)定性受到業(yè)界的廣泛的好評(píng),所以如何實(shí)現(xiàn)在VxWorks系統(tǒng)上通過(guò)SNMP協(xié)議對(duì)設(shè)備進(jìn)行管理是我們面臨的一個(gè)很重要的課題。

2. SNMP及系統(tǒng)簡(jiǎn)介

  VxWorks操作系統(tǒng)是美國(guó)WindRiver公司設(shè)計(jì)開(kāi)發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng),具有以下特點(diǎn):

  1.高效的代碼和良好的可裁剪性采用微內(nèi)核結(jié)構(gòu),內(nèi)核可裁減至幾十B 字節(jié),對(duì)于資源相對(duì)緊張的嵌入式系統(tǒng)具有非常好的適應(yīng)性。

  2.豐富的接口資源和大量的第三方產(chǎn)品為VxWorks的廣泛應(yīng)用奠定了堅(jiān)實(shí)的基礎(chǔ)

  3.良好的移植性,可以移植到不同的處理器平臺(tái),包括PPC、ARM和X86等不同的處理器。

  4.良好的開(kāi)發(fā)環(huán)境,非常好的開(kāi)發(fā)環(huán)境Tornado并在不斷升級(jí)

  WindNet SNMP代理將工業(yè)標(biāo)準(zhǔn)網(wǎng)絡(luò)管理引入實(shí)時(shí)嵌入系統(tǒng)中,實(shí)現(xiàn)了對(duì)嵌入式設(shè)備管理的接口。應(yīng)用上只需配置其初始化過(guò)程和應(yīng)用系統(tǒng)提供的部分接口就可以方便實(shí)現(xiàn)對(duì)嵌入式設(shè)備的管理,同時(shí)支持多種SNMP版本的支持,現(xiàn)在已經(jīng)可以支持SNMPv3最高版本。SNMP的工作過(guò)程可以如圖1所示: 


圖 1 SNMP 基本框架

3. 處理流程

  3.1 初始化過(guò)程

  Vxworks是通過(guò)調(diào)用usrSnmpInit( )函數(shù)來(lái)啟動(dòng)SNMP服務(wù)的,所以對(duì)于VxWorks微內(nèi)核,一定要包含usrSnmpInit( )函數(shù)。它然后創(chuàng)建任務(wù)名為tSnmpd的任務(wù),這個(gè)任務(wù)的函數(shù)入口點(diǎn)為snmpIoMain( )。在庫(kù)snmpIoLib.c中提供了該函數(shù)的部分源代碼,用戶可以加入自己的代碼,比如讀某些配置文件和私有的配置信息等。snmpIoMain( )然后調(diào)用snmpdInitFinish( )函數(shù)來(lái)完成整個(gè)代理的初始化過(guò)程。然后snmpInitFinish( )通過(guò)snmpIoTrapSend( )函數(shù)發(fā)送coldStart的trap,表示整個(gè)初始化過(guò)程完畢。這里需要注意的是所有其他的初始化和配置工作一定要在snmpInitFinish( )調(diào)用之前,然后系統(tǒng)回到snmpIoMain( )函數(shù)體,開(kāi)始和管理站之間的收發(fā)包過(guò)程。

  3.2 數(shù)據(jù)包處理

  數(shù)據(jù)包的處理過(guò)程是通過(guò)snmpIoBody( )的這個(gè)守護(hù)進(jìn)程開(kāi)始的,它的主要工作是監(jiān)視 UDP 161端口,如果管理站有請(qǐng)求發(fā)送過(guò)來(lái),它把請(qǐng)求發(fā)給snmpdPktProcess( )來(lái)處理,通過(guò)snmpIoCommunityValidate( )檢查共同體的名稱(chēng)是否正確。然后調(diào)用用戶自己的程序完成請(qǐng)求,對(duì)于SET操作,還要調(diào)用snmpIoWrite( )來(lái)完成整個(gè)操作。這里要注意的是用戶要提供自己的代碼完成請(qǐng)求,比如說(shuō)對(duì)某一個(gè)變量的讀取,一定要給出對(duì)應(yīng)的具體位置,這部分可以通過(guò)修改snmpdLib.c中的函數(shù)來(lái)完成。

  對(duì)于trap的處理有單獨(dú)的一套流程,首先如果一件意外事件發(fā)生,比如冷啟動(dòng),調(diào)用snmpdTrapSend( )函數(shù)來(lái)處理。對(duì)于trap,可以通過(guò)用戶自定義的方式來(lái)實(shí)現(xiàn)系統(tǒng)需要的trap。一般來(lái)講,它通過(guò)snmpIoWrite( )函數(shù)把信息傳遞給管理站。

  3.3 退出代理

  如果用戶想中止代理,可以調(diào)用函數(shù)snmpdExit( )來(lái)完成,同時(shí)會(huì)釋放各種資源。

  以上部分流程圖如圖2所示:


圖 2 基本流程

4. 擴(kuò)展MIB模塊

  對(duì)默認(rèn)的SNMP配置,代理已經(jīng)包含了包括MIB-II和其他的基本MIB庫(kù),但對(duì)于有些環(huán)境不需要部分庫(kù),同時(shí)需要加入基于本設(shè)備和本廠家的私有MIB,所以很有必要對(duì)MIB進(jìn)行擴(kuò)展和裁減,也利于對(duì)嵌入式設(shè)備的標(biāo)準(zhǔn)化管理。以下介紹整個(gè)過(guò)程。

  1. 定義管理信息

  這步主要用來(lái)定義SNMP需要管理的信息,其中部分信息已經(jīng)通過(guò)標(biāo)準(zhǔn)MIB實(shí)現(xiàn),實(shí)際只要加入就可以了。

  2. 創(chuàng)建MIB定義

  根據(jù)ASN.1標(biāo)準(zhǔn)語(yǔ)法創(chuàng)建MIB。

  一般有以下形式:

  DEFINITIONS ::= BEGIN

  —— Title: EXAMPLE

  IMPORTS

  MODULE-IDENTITY,

  OBJECT-TYPE

  FROM SNMPv2-SMI

  ……

  windDemo MODULE-IDENTITY

  LAST-UPDATED "2004-9-26"

  ORGANIZATION

  CONTACT-INFO

  Phone:……

  Email:……

  DESCRIPTION

  "This is a example"

  ::= { demos 1 }

  windObjects OBJECT IDENTIFIER ::= { windDemo 1 }

  sysState OBJECT-TYPE

  SYNTAX INTEGER

  MAX-ACCESS read-write

  STATUS current

  DESCRIPTION

  "EXAMPLE"

  ::= { sysconfig 1 }

  END

  3. 檢查正確性,轉(zhuǎn)換成.h和.c文件

  可以應(yīng)用mibcomp –check工具來(lái)檢驗(yàn)MIB文件的正確性,利于mibcomp –o生成相應(yīng)的.h和.c文件。

  4. 編譯MIB文件

  將MIB文件加入到已經(jīng)存MIB模塊中。通常有靜態(tài)和動(dòng)態(tài)兩種方式。

  靜態(tài)類(lèi)似于通常的編譯文件的全過(guò)程。這里主要介紹動(dòng)態(tài)方式,因?yàn)檫@種方式可以實(shí)現(xiàn)在原始模塊照常工作的情況下加入或卸載新模塊。首先通過(guò)mibcomp –l命令將新的MIB文件編譯成模塊。然后用命令ld在shell下實(shí)現(xiàn)MIB的動(dòng)態(tài)加載。

5. 總結(jié)

  VxWorks將SNMP應(yīng)用到整個(gè)系統(tǒng),實(shí)現(xiàn)了對(duì)嵌入式設(shè)備的標(biāo)準(zhǔn)化管理,利于對(duì)同不同的管理站進(jìn)行接口。SNMP不僅實(shí)現(xiàn)了對(duì)嵌入式設(shè)備的管理還提供了監(jiān)視整個(gè)系統(tǒng)正常運(yùn)行的基本功能,同時(shí)還可以通過(guò)對(duì)CPU的檢查實(shí)現(xiàn)發(fā)現(xiàn)軟件方面的漏洞。總之,將SNMP應(yīng)用到微內(nèi)核,會(huì)在嵌入式這個(gè)自動(dòng)化領(lǐng)域發(fā)揮出越來(lái)越大的作用。

]]>
VxWorks系統(tǒng)BSP配置文件及生成下載http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1423&Page=1wangxinxin2010-11-17 10:45:28#define CONSOLE_BAUD_RATE 57600


#undef INCLUDE_ENV_VARS /* unix compatable environment variables */
#undef INCLUDE_TIMEX /* timexLib for exec timing */
#undef INCLUDE_HW_FP
#undef INCLUDE_TFTP_CLIENT /* used by autoboot from ftp server*/

#define INCLUDE_SW_FP
#define INCLUDE_ELF
#define INCLUDE_NET_SHOW
#define INCLUDE_PING
#undef INCLUDE_DEMO /* only for vxWorks bsp test */
#define ETHERNET_ADR_SET /* only for bootrom used */
#define INCLUDE_USER_APPL /* Startup the user''s application in dos makefile project */
#undef PCIDEBUG

#ifdef INCLUDE_USER_APPL
#define USER_APPL_INIT _appEntry()
#endif

#endif /* INCconfigh */
#if defined(PRJ_BUILD)
#include "prjParams.h"
#endif



Makefile文件配置

# Makefile - make rules for board
#
#*/

CPU = PPC40x
TOOL = gnu

TGT_DIR=$(WIND_BASE)/target
include $(TGT_DIR)/h/make/defs.bsp
include $(TGT_DIR)/h/make/make.$(CPU)$(TOOL)
include $(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE)

## Only redefine make definitions below this point, or your definitions will
## be overwritten by the makefile stubs above.


TARGET_DIR = xxx
VENDOR = IBM
BOARD = xxx

RELEASE = vxWorks vxWorks.st bootrom_uncmp.hex

USR_ENTRY = usrInit


# ROM_TEXT_ADRS, ROM_SIZE, RAM_HIGH_ADRS, 和RAM_LOW_ADRS 在config.h,Makefile和Makefile.*文件中 # 都要定義,且必須要保持一致,


ROM_TEXT_ADRS = fff80100                 # ROM 起始地址
ROM_SIZE = 0007f000                      # ROM 空間大小

RAM_LOW_ADRS = 00010000                  # RAM 低地址 vxWorks */
RAM_HIGH_ADRS = 00C00000                 # RAM 高地址存儲(chǔ) bootrom */

HEX_FLAGS = -a 100

#ADDED_CFLAGS = -gdwarf -O0 # for debug

MACH_EXTRA = appentry.o                # 注意:這里加載用戶的程序模塊,程序調(diào)用在usrRoot()

BOOTCONFIG = bootconfig.c               # bsp bootconfig.c for bootrom


## Only redefine make definitions above this point, or the expansion of
## makefile target dependencies may be incorrect.

include $(TGT_DIR)/h/make/rules.bsp
include $(TGT_DIR)/h/make/rules.$(WIND_HOST_TYPE)

  Tornado for x86下BSP的生成,下載和Target Server的配置實(shí)例,Pentium主機(jī),3Com網(wǎng)卡,軟盤(pán)引導(dǎo),ftp下載VxWorks映像。

     1.在C:\Tornado\target\config\pcPentium目錄下修改BSP文件config.h。

#elif (CPU_VARIANT == PENTIUM)
#define DEFAULT_BOOT_LINE 
"elt(0,0)HOST:c:\\Tornado\\target\\config\\pcPentium\\vxWorks 
h=90.0.0.3 e=90.0.0.50 u=target pw=target tn=target"

#define INCLUDE_ELT //3Com網(wǎng)卡
#define INCLUDE_END //END驅(qū)動(dòng)

2.打開(kāi)Tornado選擇新建一個(gè)bootable vxworks image,選擇建 A BSP,選擇
  pcPentium,建完后編譯就可以在相應(yīng)的目錄下生成vxworks的映像文件。

3.制作bootrom;選擇Build Boot Rom,選擇pcPentium,再選擇bootrom_uncmp,
  生成 bootrom_uncmp。拷貝 bootrom_uncmp到host\x86-win32\bin下,插入空白
  盤(pán)到軟區(qū),在dos界面進(jìn)入目錄host\x86-win32\bin下,用命令"mkboot a: 
  bootrom_uncmp "生成引導(dǎo)盤(pán) 

4. 在Start > Programs > Tornado2 > FTP Server,點(diǎn)開(kāi)Security下的
  user/rights菜單,新建用戶User Name:target,Password:target,Home 
  Directory為VxWorks映像所在目錄如 C:\Tornado\target\config\pcPentium\。
  注意這些配置要和config.h中的一致。

5.將bootrom的啟動(dòng)盤(pán)插入目標(biāo)機(jī)的軟驅(qū),啟動(dòng)目標(biāo)機(jī),系統(tǒng)從軟驅(qū)啟動(dòng),隨后登
  陸FTP,從主機(jī)下載vxworks文件,目標(biāo)機(jī)提示7秒內(nèi)按任意鍵選擇Boot方式(手工
  ,自動(dòng)),手工方式可對(duì)FTP用戶,口令,IP等參數(shù)進(jìn)行修改。
  通常是等待7秒后系統(tǒng)autoboot。
  

屏幕顯示:

Attached TCP/IP interface to elt0.
Attaching network interface lo0... done. //TCP/IP網(wǎng)絡(luò)連接成功

Loading... 602128 //通過(guò)ftp下載VxWorks映像
Starting at 0x01080000 //下載成功,從RAM_LOW_ADRS 0x01080000
開(kāi)始執(zhí)行VxWorks系統(tǒng)

Attached TCP/IP interface to elt unit 0
Attaching interface lo0...done //TCP/IP網(wǎng)絡(luò)連接成功
(注意這里網(wǎng)絡(luò)初始化成功和上邊的不同,上邊是Bootrom映像網(wǎng)絡(luò)初始化來(lái)下載VxWorks,這里VxWorks系統(tǒng)初始化網(wǎng)絡(luò)。)

VxWorks

Copyright 1984-1998 Wind River Systems, Inc.

CPU: xxxx --- Intel x82 
VxWorks: 5.4
BSP version: 1.2/4
Creation date: Jan xx 2001
WDB: Ready.

至此目標(biāo)機(jī)系統(tǒng)啟動(dòng)完成。


6.配置Target Server下載應(yīng)用程序.

打開(kāi)Tornado,在Tools菜單下選擇Target Sever再選擇configure進(jìn)行配置(Tools 
> Target Server > Configure > New)給出Target Server名字描述如net00.在
(Target Server Properties > Back End)選擇WdbRpc. Target Name/IP Address 
框內(nèi)輸入Target的IP: 90.0.0.50. 
Core File and Symbols選項(xiàng)(Target Server Properties > Core File and 
Symbols): C:\Tornado\target\config\pcPentium\vxWorks等等。
配置的內(nèi)容根據(jù)系統(tǒng)的具體情況定。點(diǎn)擊Launch啟動(dòng)Target Sever,隨后在主界
面下選擇已啟動(dòng)的Target Sever就可以下載 *.o或*.out程序。

]]>
VXWORKS內(nèi)核分析http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1422&Page=1wangxinxin2010-11-17 10:44:121. 實(shí)時(shí)操作系統(tǒng)的結(jié)構(gòu)
     在計(jì)算的早期開(kāi)發(fā)的操作系統(tǒng)的最原始的結(jié)構(gòu)形式是一個(gè)統(tǒng)一的實(shí)體(monolithic)
。在這樣的系統(tǒng)中,提供的不同功能的模塊,如處理器管理、內(nèi)存管理、輸入輸出等,
通常是獨(dú)立的。然而他們?cè)趫?zhí)行過(guò)程中并不考慮其他正在使用中的模塊,各個(gè)模塊都以
相同的時(shí)間粒度運(yùn)行。
     由于現(xiàn)代實(shí)時(shí)環(huán)境需要許多不同的功能,以及在這樣的環(huán)境中存在的并發(fā)活動(dòng)所引
起的異步性和非確定性,操作系統(tǒng)變得更加復(fù)雜。所以早期操作系統(tǒng)的統(tǒng)一結(jié)構(gòu)的組織
已經(jīng)被更加精確的內(nèi)部結(jié)構(gòu)所淘汰。
層次結(jié)構(gòu)的起點(diǎn)----內(nèi)核
     操作系統(tǒng)的最好的內(nèi)部結(jié)構(gòu)模型是一個(gè)層次性的結(jié)構(gòu),最低層是內(nèi)核。這些層次可
以看成為一個(gè)倒置的金字塔,每一層都建立在較低層的功能之上。 內(nèi)核僅包含一個(gè)操作
系統(tǒng)執(zhí)行的最重要的低層功能。正象一個(gè)統(tǒng)一結(jié)構(gòu)的操作系統(tǒng),內(nèi)核提供了在高層軟件
與下層硬件之間的抽象層。然而,內(nèi)核僅提供了構(gòu)造操作系統(tǒng)其他部分所需的最小操作
集。
對(duì)一個(gè)實(shí)時(shí)內(nèi)核的要求
     一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核需滿足許多特定的實(shí)時(shí)環(huán)境所提出的基本要求,這些包括:
多任務(wù):由于真實(shí)世界的事件的異步性,能夠運(yùn)行許多并發(fā)進(jìn)程或任務(wù)是很重要的。多
任務(wù)提供了一個(gè)較好的對(duì)真實(shí)世界的匹配,因?yàn)樗试S對(duì)應(yīng)于許多外部事件的多線程執(zhí)
行。系統(tǒng)內(nèi)核分配CPU給這些任務(wù)來(lái)獲得并發(fā)性。
     搶占調(diào)度:真實(shí)世界的事件具有繼承的優(yōu)先級(jí),在分配CPU的時(shí)候要注意到這些優(yōu)先
級(jí)。基于優(yōu)先級(jí)的搶占調(diào)度,任務(wù)都被指定了優(yōu)先級(jí), 在能夠執(zhí)行的任務(wù)(沒(méi)有被掛起
或正在等待資源)中,優(yōu)先級(jí)最高的任務(wù)被分配CPU資源。換句話說(shuō),當(dāng)一個(gè)高優(yōu)先級(jí)的
任務(wù)變?yōu)榭蓤?zhí)行態(tài),它會(huì)立即搶占當(dāng)前正在運(yùn)行的較低優(yōu)先級(jí)的任務(wù)。
     快速靈活的任務(wù)間的通信與同步:在一個(gè)實(shí)時(shí)系統(tǒng)中,可能有許多任務(wù)作為一個(gè)應(yīng)
用的一部分執(zhí)行。系統(tǒng)必須提供這些任務(wù)間的快速且功能強(qiáng)大的通信機(jī)制。內(nèi)核也要提
供為了有效地共享不可搶占的資源或臨界區(qū)所需的同步機(jī)制。
     方便的任務(wù)與中斷之間的通信:盡管真實(shí)世界的事件通常作為中斷方式到來(lái),但為
了提供有效的排隊(duì)、優(yōu)先化和減少中斷延時(shí),我們通常希望在任務(wù)級(jí)處理相應(yīng)的工作。
所以需要雜任務(wù)級(jí)和中斷級(jí)之間存在通信。
     性能邊界:一個(gè)實(shí)時(shí)內(nèi)核必須提供最壞情況的性能優(yōu)化,而非針對(duì)吞吐量的性能優(yōu)
化。我們更期望一個(gè)系統(tǒng)能夠始終以50微妙執(zhí)行一個(gè)函數(shù),而不期望系統(tǒng)平均以10微妙
執(zhí)行該函數(shù),但偶爾會(huì)以75微妙執(zhí)行它。
     特殊考慮:由于對(duì)實(shí)時(shí)內(nèi)核的要求的增加,必須考慮對(duì)內(nèi)核支持不斷增加的復(fù)雜功
能的要求。這包括多進(jìn)程處理,Ada和對(duì)更新的、功能更強(qiáng)的處理器結(jié)構(gòu)如RISC的支持。

擁有其它名字的內(nèi)核
     許多商用化的內(nèi)核支持的功能遠(yuǎn)強(qiáng)于上面所列的要求。在這方面,他們不是真正的
內(nèi)核,而更象一個(gè)小的統(tǒng)一結(jié)構(gòu)的操作系統(tǒng)。因?yàn)樗麄儼?jiǎn)單的內(nèi)存分配、時(shí)鐘管理
、甚至一些輸入輸出系統(tǒng)調(diào)用的功能。
     這種分類(lèi)不僅僅是在語(yǔ)義上的爭(zhēng)論,在這篇文章的后面章節(jié)將說(shuō)明限制內(nèi)核功能和
油畫(huà)這些功能的重要性。
2. VxWorks內(nèi)核:Wind
     VxWorks操作系統(tǒng)是一種功能最全的現(xiàn)在可以獲得的獨(dú)立于處理器的實(shí)時(shí)系統(tǒng)。然而
,VxWorks是帶有一個(gè)相當(dāng)小的真正微內(nèi)核的層次結(jié)構(gòu)。內(nèi)核僅提供多任務(wù)環(huán)境、進(jìn)程間
通信和同步功能。這些功能模塊足夠支持VxWorks在較高層次所提供的豐富的性能的要求
。 通常內(nèi)核操作對(duì)于用戶是不可見(jiàn)的。應(yīng)用程序?yàn)榱藢?shí)現(xiàn)需要內(nèi)核參與的任務(wù)管理和同
步使用一些系統(tǒng)調(diào)用,但這些調(diào)用的處理對(duì)于調(diào)用任務(wù)是不可見(jiàn)的。應(yīng)用程序僅鏈接恰
當(dāng)?shù)腣xWorks例程(通常使用VxWorks的動(dòng)態(tài)鏈接功能),就象調(diào)用子程序一樣發(fā)出系統(tǒng)
調(diào)用。這種接口不象有些系統(tǒng)需要一個(gè)笨拙的跳轉(zhuǎn)表接口,用戶需要通過(guò)一個(gè)整數(shù)來(lái)指
定一個(gè)內(nèi)核功能調(diào)用。
多任務(wù)
     內(nèi)核的基本功能是提供一個(gè)多任務(wù)環(huán)境。多任務(wù)使得許多程序在表面上表現(xiàn)為并發(fā)
執(zhí)行,而事實(shí)上內(nèi)核是根據(jù)基本的調(diào)度算法使他們分段執(zhí)行。每個(gè)明顯獨(dú)立的程序被成
為一個(gè)任務(wù)。每個(gè)任務(wù)擁有自己的上下文,其中包含在內(nèi)核調(diào)度使該任務(wù)執(zhí)行的時(shí)候它
所看到的CPU環(huán)境和系統(tǒng)資源。
任務(wù)狀態(tài)
     內(nèi)核維護(hù)系統(tǒng)中的每個(gè)任務(wù)的當(dāng)前狀態(tài)。狀態(tài)遷移發(fā)生在應(yīng)用程序調(diào)用內(nèi)核功能服
務(wù)的時(shí)候。下面定義了wind內(nèi)核狀態(tài):
     就緒態(tài)----一個(gè)任務(wù)當(dāng)前除了CPU不等待任何資源
     阻塞態(tài)----一個(gè)任務(wù)由于某些資源不可獲得而被阻塞
     延遲態(tài)----一個(gè)任務(wù)睡眠一段時(shí)間
     掛起態(tài)----主要用于調(diào)試的一個(gè)輔助狀態(tài),掛起禁止任務(wù)的執(zhí)行
     任務(wù)被創(chuàng)建以后進(jìn)入掛起態(tài),需要通過(guò)特定的操作使被創(chuàng)建的任務(wù)進(jìn)入就緒態(tài),這
一操作執(zhí)行速度很快,使應(yīng)用程序能夠提前創(chuàng)建任務(wù),并以一種快捷的方式激活該任務(wù)

調(diào)度控制
     多任務(wù)需要一個(gè)調(diào)度算法分配CPU給就緒的任務(wù)。在VxWorks中默認(rèn)的調(diào)度算法是基
于優(yōu)先級(jí)的搶占調(diào)度,但應(yīng)用程序也可以選擇使用時(shí)間片輪轉(zhuǎn)調(diào)度。
     基于優(yōu)先級(jí)搶占調(diào)度:基于優(yōu)先級(jí)的搶占調(diào)度,每個(gè)任務(wù)被指定一個(gè)優(yōu)先級(jí),內(nèi)核
分配CPU給處于就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)。調(diào)度采用搶占的方式,是因?yàn)楫?dāng)一個(gè)優(yōu)先級(jí)
高于當(dāng)前任務(wù)的任務(wù)變?yōu)榫途w態(tài)時(shí),內(nèi)核將立即保存當(dāng)前任務(wù)的上文,并切換到高優(yōu)先
級(jí)任務(wù)的上文。VxWorks有從0到255共256個(gè)優(yōu)先級(jí)。在創(chuàng)建的時(shí)候任務(wù)被指定一個(gè)優(yōu)先
級(jí),在任務(wù)運(yùn)行的過(guò)程中可以動(dòng)態(tài)地修改優(yōu)先級(jí)以便跟蹤真實(shí)世界的事件優(yōu)先級(jí)。外部
中斷被指定優(yōu)先于任何任務(wù)的優(yōu)先級(jí),這樣能夠在任何時(shí)候搶占一個(gè)任務(wù)。
     時(shí)間片輪轉(zhuǎn):基于優(yōu)先級(jí)搶占調(diào)度可以擴(kuò)充時(shí)間片輪轉(zhuǎn)調(diào)度。時(shí)間片輪轉(zhuǎn)調(diào)度允許
在相同優(yōu)先級(jí)的處于就緒態(tài)的任務(wù)公平地共享CPU。沒(méi)有時(shí)間片輪轉(zhuǎn)調(diào)度,當(dāng)有多個(gè)任務(wù)
在同一優(yōu)先級(jí)共享處理器時(shí),一個(gè)任務(wù)可能獨(dú)占CPU,不會(huì)被阻塞直到被一個(gè)更高優(yōu)先級(jí)
的任務(wù)搶占,而不給同一優(yōu)先級(jí)的其他任務(wù)運(yùn)行的機(jī)會(huì)。如果時(shí)間片輪轉(zhuǎn)被使能,執(zhí)行
任務(wù)的時(shí)間計(jì)數(shù)器在每個(gè)時(shí)鐘滴答遞增。當(dāng)指定的時(shí)間片耗盡,計(jì)數(shù)器會(huì)被清零,該任
務(wù)被放在同一優(yōu)先級(jí)任務(wù)隊(duì)列的隊(duì)尾。加入特定優(yōu)先級(jí)組的新任務(wù)被放在該組任務(wù)的隊(duì)
尾,并將運(yùn)行計(jì)數(shù)器初始化為零。
基本的任務(wù)函數(shù)
         用于狀態(tài)控制的基本任務(wù)函數(shù)包括一個(gè)任務(wù)的創(chuàng)建、刪除、掛起和喚醒。一個(gè)
任務(wù)也可以使自己睡眠一個(gè)特定的時(shí)間間隔不去運(yùn)行。
許多其他任務(wù)例程提供由任務(wù)上下文獲得的狀態(tài)信息。這些例程包括訪問(wèn)一個(gè)任務(wù)當(dāng)前
處理器寄存器控制。
任務(wù)刪除問(wèn)題
     wind內(nèi)核提供防止任務(wù)被意外刪除的機(jī)制。通常,一個(gè)執(zhí)行在臨界區(qū)或訪問(wèn)臨界資
源的任務(wù)要被特別保護(hù)。我們?cè)O(shè)想下面的情況:一個(gè)任務(wù)獲得一些數(shù)據(jù)結(jié)構(gòu)的互斥訪問(wèn)
權(quán),當(dāng)它正在臨界區(qū)內(nèi)執(zhí)行時(shí)被另一個(gè)任務(wù)刪除。由于任務(wù)無(wú)法完成對(duì)臨界區(qū)的操作,
該數(shù)據(jù)結(jié)構(gòu)可能還處于被破壞或不一致的狀態(tài)。而且,假想任務(wù)沒(méi)有機(jī)會(huì)釋放該資源,
那麼現(xiàn)在其他任何任務(wù)現(xiàn)在就不能獲得該資源,資源被凍結(jié)了。
          任何要?jiǎng)h除或終止一個(gè)設(shè)定了刪除保護(hù)的任務(wù)的任務(wù)將被阻塞。當(dāng)被保護(hù)的任
務(wù)完成臨界區(qū)操作以后,它將取消刪除保護(hù)以使自己可以被刪除,從而解阻塞刪除任務(wù)

     正如上面所展示的,任務(wù)刪除保護(hù)通常伴有互斥操作。
     這樣,為了方便性和效率,互斥信號(hào)量包含了刪除保護(hù)選項(xiàng)。(參見(jiàn)"互斥信號(hào)量"

任務(wù)間通信
     為了提供完整的多任務(wù)系統(tǒng)的功能,wind內(nèi)核提供了一套豐富的任務(wù)間通信與同步
的機(jī)制。這些通信功能使一個(gè)應(yīng)用中各個(gè)獨(dú)立的任務(wù)協(xié)調(diào)他們的活動(dòng)。
共享地址空間
     wind內(nèi)核的任務(wù)間通信機(jī)制的基礎(chǔ)是所有任務(wù)所在的共享地址空間。通過(guò)共享地址
空間,任務(wù)能夠使用共享數(shù)據(jù)結(jié)構(gòu)的指針自由地通信。管道不需要映射一塊內(nèi)存區(qū)到兩
個(gè)互相通信任務(wù)的尋址空間。
          不幸的是,共享地址空間具有上述優(yōu)點(diǎn)的同時(shí),帶來(lái)了未被保護(hù)內(nèi)存的重入訪
問(wèn)的危險(xiǎn)。UNIX操作系統(tǒng)通過(guò)隔離進(jìn)程提供這樣的保護(hù),但同時(shí)帶來(lái)了對(duì)于實(shí)時(shí)操作系
統(tǒng)來(lái)說(shuō)巨大的性能損失。
互斥操作
     當(dāng)一個(gè)共享地址空間簡(jiǎn)化了數(shù)據(jù)交換,通過(guò)互斥訪問(wèn)避免資源競(jìng)爭(zhēng)就變?yōu)楸匾牧?br/>。用來(lái)獲得一個(gè)資源的互斥訪問(wèn)的許多機(jī)制僅在這些互斥所作用的范圍上存在差別。實(shí)
現(xiàn)互斥的方法包括禁止中斷、禁止任務(wù)搶占和通過(guò)信號(hào)量進(jìn)行資源鎖定。
     中斷禁止:最強(qiáng)的互斥方法是屏蔽中斷。這樣的鎖定保證了對(duì)CPU的互斥訪問(wèn)。這種
方法當(dāng)然能夠解決互斥的問(wèn)題,但它對(duì)于實(shí)時(shí)是不恰當(dāng)?shù)模驗(yàn)樗阪i定期間阻止系統(tǒng)
響應(yīng)外部事件。長(zhǎng)的中斷延時(shí)對(duì)于要求有確定的響應(yīng)時(shí)間的應(yīng)用來(lái)說(shuō)是不可接受的。
     搶占禁止:禁止搶占提供了強(qiáng)制性較弱的互斥方式。 當(dāng)前任務(wù)運(yùn)行的過(guò)程中不允許
其他任務(wù)搶占,而中斷服務(wù)程序可以執(zhí)行。這也可能引起較差的實(shí)時(shí)響應(yīng),就象被禁止
中斷一樣,被阻塞的任務(wù)會(huì)有相當(dāng)長(zhǎng)時(shí)間的搶占延時(shí),就緒態(tài)的高優(yōu)先級(jí)的任務(wù)可能會(huì)
在能夠執(zhí)行前被強(qiáng)制等待一段不可接受的時(shí)間。為避免這種情況,在可能的情況下盡量
使用信號(hào)量實(shí)現(xiàn)互斥。
     互斥信號(hào)量:信號(hào)量是用于鎖定共享資源訪問(wèn)的基本方式。不象禁止中斷或搶占,
信號(hào)量限制了互斥操作僅作用于相關(guān)的資源。一個(gè)信號(hào)量被創(chuàng)建來(lái)保護(hù)資源。VxWorks的
信號(hào)量遵循Dijkstra的P()和V()操作模式。
     當(dāng)一個(gè)任務(wù)請(qǐng)求信號(hào)量,P(), 根據(jù)在發(fā)出調(diào)用時(shí)信號(hào)量的置位或清零的狀態(tài), 會(huì)
發(fā)生兩種情況。如果信號(hào)量處于置位態(tài), 信號(hào)量會(huì)被清零,并且任務(wù)立即繼續(xù)執(zhí)行。如
果信號(hào)量處于清零態(tài),任務(wù)會(huì)被阻塞來(lái)等待信號(hào)量。
     當(dāng)一個(gè)任務(wù)釋放信號(hào)量,V(),會(huì)發(fā)生幾種情況。如果信號(hào)量已經(jīng)處于置位態(tài),釋放
信號(hào)量不會(huì)產(chǎn)生任何影響。如果信號(hào)量處于清零態(tài)且沒(méi)有任務(wù)等待該信號(hào)量,信號(hào)量只
是被簡(jiǎn)單地置位。如果信號(hào)量處于清零態(tài)且有一個(gè)或多個(gè)任務(wù)等待該信號(hào)量,最高優(yōu)先
級(jí)的任務(wù)被解阻塞,信號(hào)量仍為清零態(tài)。
     通過(guò)將一些資源與信號(hào)量關(guān)聯(lián),能夠?qū)崿F(xiàn)互斥操作。當(dāng)一個(gè)任務(wù)要操作資源,它必
須首先獲得信號(hào)量。只要任務(wù)擁有信號(hào)量,所有其他的任務(wù)由于請(qǐng)求該信號(hào)量而被阻塞
。當(dāng)一個(gè)任務(wù)使用完該資源,它釋放信號(hào)量,允許等待該信號(hào)量的另一個(gè)任務(wù)訪問(wèn)該資
源。
     Wind內(nèi)核提供了二值信號(hào)量來(lái)解決互斥操作所引起的問(wèn)題。 這些問(wèn)題包括資源擁有
者的刪除保護(hù),由資源競(jìng)爭(zhēng)引起的優(yōu)先級(jí)逆轉(zhuǎn)。
     刪除保護(hù)----互斥引起的一個(gè)問(wèn)題會(huì)涉及到任務(wù)刪除。在由信號(hào)量保護(hù)的臨界區(qū)中
,需要防止執(zhí)行任務(wù)被意外地刪除。刪除一個(gè)在臨界區(qū)執(zhí)行的任務(wù)是災(zāi)難性的。資源會(huì)
被破壞,保護(hù)資源的信號(hào)量會(huì)變?yōu)椴豢色@得,從而該資源不可被訪問(wèn)。通常刪除保護(hù)是
與互斥操作共同提供的。由于這個(gè)原因,互斥信號(hào)量通常提供選項(xiàng)來(lái)隱含地提供前面提
到的任務(wù)刪除保護(hù)的機(jī)制。
     優(yōu)先級(jí)逆轉(zhuǎn)/優(yōu)先級(jí)繼承----優(yōu)先級(jí)逆轉(zhuǎn)發(fā)生在一個(gè)高優(yōu)先級(jí)的任務(wù)被強(qiáng)制等待一段
不確定的時(shí)間以便一個(gè)較低優(yōu)先級(jí)的任務(wù)完成執(zhí)行。考慮下面的假設(shè):
     T1,T2和T3分別是高、中、低優(yōu)先級(jí)的任務(wù)。T3通過(guò)擁有信號(hào)量而獲得相關(guān)的資源
。當(dāng)T1搶占T3,為競(jìng)爭(zhēng)使用該資源而請(qǐng)求相同的信號(hào)量的時(shí)候,它被阻塞。如果我們假
設(shè)T1僅被阻塞到T3使用完該資源為止,情況并不是很糟。畢竟資源是不可被搶占的。然
而,低優(yōu)先級(jí)的任務(wù)并不能避免被中優(yōu)先級(jí)的任務(wù)搶占,一個(gè)搶占的任務(wù)如T2將阻止T3
完成對(duì)資源的操作。這種情況可能會(huì)持續(xù)阻塞T1等待一段不可確定的時(shí)間。這種情況成
為優(yōu)先級(jí)逆轉(zhuǎn),因?yàn)楸M管系統(tǒng)是基于優(yōu)先級(jí)的調(diào)度,但卻使一個(gè)高優(yōu)先級(jí)的任務(wù)等待一
個(gè)低優(yōu)先級(jí)的任務(wù)完成執(zhí)行。
     互斥信號(hào)量有一個(gè)選項(xiàng)允許實(shí)現(xiàn)優(yōu)先級(jí)繼承的算法。優(yōu)先級(jí)繼承通過(guò)在T1被阻塞期
間提升T3的優(yōu)先級(jí)到T1解決了優(yōu)先級(jí)逆轉(zhuǎn)引起的問(wèn)題。這防止了T3,間接地防止T1,被
T2搶占。通俗地說(shuō),優(yōu)先級(jí)繼承協(xié)議使一個(gè)擁有資源的任務(wù)以等待該資源的任務(wù)中優(yōu)先
級(jí)最高的任務(wù)的優(yōu)先級(jí)執(zhí)行。當(dāng)執(zhí)行完成,任務(wù)釋放該資源并返回到它正常的或標(biāo)準(zhǔn)的
優(yōu)先級(jí)。因此,繼承優(yōu)先級(jí)的任務(wù)避免了被任何中間優(yōu)先級(jí)的任務(wù)搶占。
     同步
     信號(hào)量另一種通常的用法是用于任務(wù)間的同步機(jī)制。在這種情況下,信號(hào)量代表一
個(gè)任務(wù)所等待的條件或事件。最初,信號(hào)量是在清零態(tài)。一個(gè)任務(wù)或中斷通過(guò)置位該信
號(hào)量來(lái)指示一個(gè)事件的發(fā)生。等待該信號(hào)量的任務(wù)將被阻塞直到事件發(fā)生、該信號(hào)量被
置位。一旦被解阻塞,任務(wù)就執(zhí)行恰當(dāng)?shù)氖录幚沓绦颉P盘?hào)量在任務(wù)同步中的應(yīng)用對(duì)
于將中斷服務(wù)程序從冗長(zhǎng)的事件處理中解放出來(lái)以縮短中斷響應(yīng)時(shí)間是很有用的。
消息隊(duì)列
     消息隊(duì)列提供了在任務(wù)與中斷服務(wù)程序或其他任務(wù)間交換變長(zhǎng)消息的一種較低層的
機(jī)制。這種機(jī)制在功能上類(lèi)似于管道,但有較少的開(kāi)銷(xiāo)。
管道、套接字、遠(yuǎn)程過(guò)程調(diào)用和更多
     許多高層的VxWorks機(jī)制提供任務(wù)間通信的更高層的抽象,包括管道、TCP/IP套接字
、遠(yuǎn)程過(guò)程調(diào)用和更多。為了保持裁減內(nèi)核為僅包含足夠支持高層功能的一個(gè)最小函數(shù)
集的設(shè)計(jì)目標(biāo),這些特性都是基于上面描述的內(nèi)核同步方式的。
3. 內(nèi)核設(shè)計(jì)的優(yōu)點(diǎn)
     wind內(nèi)核的一個(gè)重要的設(shè)計(jì)特性是最小的搶占延時(shí)。其他的主要設(shè)計(jì)的優(yōu)點(diǎn)包括史
無(wú)前例的可配置性,對(duì)不可預(yù)見(jiàn)的應(yīng)用需求的可擴(kuò)展性,在各種微處理器應(yīng)用開(kāi)發(fā)中的
移植性。
最小的搶占延時(shí)
     正如前面所討論的,禁止搶占是獲得代碼臨界資源互斥操作的通常手段。這種技巧
的不期望的負(fù)面影響是高的搶占延時(shí),這可以通過(guò)盡量使用信號(hào)量實(shí)現(xiàn)互斥和保持臨界
區(qū)盡量緊湊被減小。但即使廣泛地使用信號(hào)量也不能解決所有的可能導(dǎo)致?lián)屨佳訒r(shí)的根
源。內(nèi)核本身就是一個(gè)導(dǎo)致?lián)屨佳訒r(shí)的根源。為了理解其原因,我們必須更好地理解內(nèi)
核所需的互斥操作。
內(nèi)核級(jí)和任務(wù)級(jí)
     在任何多任務(wù)系統(tǒng)中,大量的應(yīng)用是發(fā)生在一個(gè)或多個(gè)任務(wù)的上下文。然而,有些
CPU時(shí)間片不在任何任務(wù)的上下文。這些時(shí)間片發(fā)生在內(nèi)核改變內(nèi)部隊(duì)列或決定任務(wù)調(diào)度
。在這些時(shí)間片中,CPU在內(nèi)核級(jí)執(zhí)行,而非任務(wù)級(jí)。
     為了內(nèi)核安全地操作它的內(nèi)部的數(shù)據(jù)結(jié)構(gòu),必須有互斥操作。內(nèi)核級(jí)沒(méi)有相關(guān)的任
務(wù)上下文,內(nèi)核不能使用信號(hào)量保護(hù)內(nèi)部鏈表。內(nèi)核使用工作延期作為實(shí)現(xiàn)互斥的方式
。當(dāng)有內(nèi)核參與時(shí),中斷服務(wù)程序調(diào)用的函數(shù)不是被直接激活,而是被放在內(nèi)核的工作
隊(duì)列中。內(nèi)核完成這些請(qǐng)求的執(zhí)行而清空內(nèi)核工作隊(duì)列。
     當(dāng)內(nèi)核正在執(zhí)行已經(jīng)被請(qǐng)求服務(wù)時(shí)系統(tǒng)將不響應(yīng)到達(dá)內(nèi)核的函數(shù)調(diào)用。可以簡(jiǎn)單地
認(rèn)為內(nèi)核狀態(tài)類(lèi)似于禁止搶占。如前面所討論的,搶占延時(shí)在實(shí)時(shí)系統(tǒng)中是不期望有的
,因?yàn)樗黾恿藢?duì)于會(huì)引起應(yīng)用任務(wù)重新調(diào)度的事件的響應(yīng)時(shí)間.
     管操作系統(tǒng)在內(nèi)核級(jí)(此時(shí)禁止搶占)完全避免消耗時(shí)間是不可能的,但減少這些
時(shí)間是很重要的。這是減少由內(nèi)核執(zhí)行的函數(shù)的數(shù)量的主要原因, 也是不采用統(tǒng)一結(jié)構(gòu)
的系統(tǒng)設(shè)計(jì)方式的原因。例如,有一種流行的實(shí)時(shí)操作系統(tǒng)的每個(gè)函數(shù)都是在內(nèi)核級(jí)執(zhí)
行。這意味著當(dāng)一個(gè)低優(yōu)先級(jí)的任務(wù)在執(zhí)行分配內(nèi)存、獲得任務(wù)信息的函數(shù)時(shí)所有高優(yōu)
先級(jí)的任務(wù)被禁止搶占。
一個(gè)最小的內(nèi)核
     已經(jīng)說(shuō)明了一個(gè)最小內(nèi)核的優(yōu)點(diǎn)和構(gòu)造高層操作系統(tǒng)功能的必要功能,我們使用這
些操作原語(yǔ)來(lái)執(zhí)行一個(gè)傳統(tǒng)的內(nèi)核級(jí)功能,而在VxWorks中作為任務(wù)級(jí)功能執(zhí)行,內(nèi)存管
理。 在這個(gè)例子中,考慮用戶可調(diào)用的子例程malloc, 用于分配所請(qǐng)求大小的內(nèi)存區(qū)
并返回一個(gè)指向該內(nèi)存區(qū)的指針。假定空閑內(nèi)存區(qū)是通過(guò)搜索一個(gè)空閑內(nèi)存塊的隊(duì)列找
到的,一個(gè)信號(hào)量必須被用來(lái)保護(hù)這個(gè)非搶占多用戶資源。分配內(nèi)存的操作如下:
     獲得互斥信號(hào)量
搜索空閑內(nèi)存塊鏈表
     釋放互斥信號(hào)量
     值得注意的是搜索一個(gè)足夠大的空閑內(nèi)存塊的可能的冗長(zhǎng)的時(shí)間是發(fā)生在調(diào)用任務(wù)
的上下文中。這是可以被高優(yōu)先級(jí)的任務(wù)搶占的(除了信號(hào)量調(diào)用的這段執(zhí)行時(shí)間)。

     在一個(gè)標(biāo)準(zhǔn)的統(tǒng)一結(jié)構(gòu)的實(shí)時(shí)內(nèi)核中,內(nèi)存分配例程操作如下:
     進(jìn)入內(nèi)核
  

]]>
基于VxWorks實(shí)現(xiàn)OpenGL三維顯示尋找高手參與突破關(guān)鍵技術(shù)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1421&Page=1wangxinxin2010-11-17 10:42:20基于VxWorks實(shí)現(xiàn)OpenGL三維顯示尋找高手參與突破關(guān)鍵技術(shù)

基于VxWorks實(shí)現(xiàn)OpenGL三維顯示vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真( \' P% j9 ?) v, B. R" S0 N

中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū): g! L* q( V8 z6 h

        當(dāng)前,實(shí)時(shí)嵌入式系統(tǒng)的發(fā)展非常迅猛,在工業(yè)控制、軍事、航空航天、手持設(shè)備等各個(gè)方面都得到了廣泛的應(yīng)用.其中,為實(shí)時(shí)嵌入式系統(tǒng)提供友好的圖形用戶界面(GUI)成為了重要的發(fā)展方向.本論文根據(jù)實(shí)時(shí)嵌入式系統(tǒng)的特殊要求,針對(duì)VxWorks操作系統(tǒng)現(xiàn)有GUI部件——WindML在所支持的顯示硬件設(shè)備和圖形繪制方面的不足,對(duì)它做了功能上的擴(kuò)充,并將它更名為E-UGL,意為擴(kuò)展的通用圖形庫(kù).顯示設(shè)備驅(qū)動(dòng)程序是GUI的基礎(chǔ).課題首先設(shè)計(jì)了針對(duì)AGP顯示設(shè)備——Intel82815顯示引擎的核心數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)了對(duì)幀緩存(Frame Buffer)機(jī)制和圖形地址重映射表(GART)機(jī)制的支持,解決了在VxWorks下AGP顯示設(shè)備的初始化問(wèn)題;第二,驅(qū)動(dòng)實(shí)現(xiàn)了對(duì)多種顯示模式的支持,最高可以達(dá)到1280×1024顯示分辨率、16位顏色、75Hz刷新頻率,解決了嵌入式系統(tǒng)中顯示模式單一、落后的問(wèn)題;第三,用ELFA算法實(shí)現(xiàn)了直線段繪制函數(shù),用中點(diǎn)法實(shí)現(xiàn)了橢圓繪制函數(shù),使系統(tǒng)的圖形繪制性能有了一定程度的提高.用正負(fù)法實(shí)現(xiàn)了圓繪制函數(shù),提高了繪制的精度.第四,將mesa3d的三維函數(shù)庫(kù)移植到VxWorks中,使驅(qū)動(dòng)可以支持OpenGL應(yīng)用;第五,在驅(qū)動(dòng)中實(shí)現(xiàn)了雙緩存機(jī)制,提高了系統(tǒng)的三維圖形繪制速度;第六,在驅(qū)動(dòng)中實(shí)現(xiàn)了可編程鍵盤(pán),即可以對(duì)四線電阻式觸摸屏設(shè)備提供支持,使得驅(qū)動(dòng)能夠適應(yīng)無(wú)鼠標(biāo)和鍵盤(pán)條件下的嵌入式系統(tǒng).驅(qū)動(dòng)不僅支持高分辨率的顯示模式和圖形繪制,而且支持無(wú)鼠標(biāo)和鍵盤(pán)的應(yīng)用環(huán)境.另外,代碼是自主設(shè)計(jì)和實(shí)現(xiàn)的,避免了封閉模塊的黑盒效應(yīng).因此,在工業(yè)控制、軍事等領(lǐng)域的嵌入式系統(tǒng)中將得到廣泛的應(yīng)用. & U$ W# ~$ x7 `: x% X1 x

        雖然硬件上解決此問(wèn)題已經(jīng)在國(guó)外實(shí)現(xiàn),但基于軟件解決基于VxWorks實(shí)現(xiàn)OpenGL三維顯示,仍然需要高手加盟研究關(guān)鍵技術(shù)突破點(diǎn).vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真5 W( w5 I, c* d5 w, N1 m

北航VXWORK實(shí)驗(yàn)的高博士組已經(jīng)宣布失敗,停止研究.北理工仿真室李老師仍然在邀請(qǐng)高手參與此塊,并將成果共享參與人員.謝謝.

9 Y  v# K% m: \9 v% t       如果有興趣者,XMVINI@163.COM,謝謝.bbs.vrchina.net: \5 }! n1 y) W, \! b6 d

       VINI虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl( u' A* @$ b: }6 J; m7 I

全文目錄

$ I2 N; G* {+ J5 O2 Sbbs.vrchina.net文摘

. [* x+ A' U/ k9 k0 l% y虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl英文文摘

! ]( D2 w* D) W  u  kvrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真論文說(shuō)明

# x/ C  R8 }4 |! a6 D3 C8 \* I虛擬現(xiàn)實(shí)中國(guó)社區(qū)本人聲明

7 m& n! ^$ l: e- jvrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真第一章引言虛擬現(xiàn)實(shí)中國(guó)社區(qū)8 r0 Z, R" }  Q1 g( _3 F8 t* I1 _

1.1論文的背景和研究的意義

' K9 ]! _* Z% N- B5 Z- @中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)1.2嵌入式實(shí)時(shí)操作系統(tǒng)概況

0 Y6 O1 Q  N6 y) s. T6 u8 `$ J虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl1.3典型的嵌入式實(shí)時(shí)操作系統(tǒng)及其圖形用戶界面

, e, R/ Y% p' Q. A' J# q; z3 d( Sbbs.vrchina.net1.4現(xiàn)有系統(tǒng)分析虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl, f& ^* `0 S; L" ^

1.4論文的研究?jī)?nèi)容

0 h1 i* T7 Q( Z( x8 S6 jbbs.vrchina.net1.5論文的組織安排

8 c% ^$ W+ |4 i, s9 |bbs.vrchina.net第二章計(jì)算機(jī)圖形學(xué)、GUI和顯示驅(qū)動(dòng)虛擬現(xiàn)實(shí)中國(guó)社區(qū)0 c5 p* I+ d+ }6 b! {

2.1計(jì)算機(jī)圖形學(xué)的發(fā)展及其應(yīng)用vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真: J/ U* @7 [# {( z9 {- B6 ~

2.1.1計(jì)算機(jī)圖形學(xué)硬件的發(fā)展虛擬現(xiàn)實(shí)中國(guó)社區(qū)/ t0 F2 G" Y0 B! f( b4 o

2.1.2計(jì)算機(jī)圖形學(xué)軟件及算法的發(fā)展

8 h; P; s# K/ m0 h; T" B& P中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)2.1.3計(jì)算機(jī)圖形學(xué)的應(yīng)用虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl9 @, J! ^3 p/ |6 i, E7 d" w& W

2.2圖形用戶界面GUI簡(jiǎn)述中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)$ {$ |1 I' K: |: Y9 V9 w

2.2.1用戶界面的發(fā)展虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl& {! g2 f0 V! a7 `

2.2.2 GUI系統(tǒng)的結(jié)構(gòu)模型虛擬現(xiàn)實(shí)中國(guó)社區(qū)/ e3 ]# m- I. `/ e6 H

2.3嵌入式實(shí)時(shí)系統(tǒng)對(duì)GUI的特殊要求

& Q) l3 ~$ j. b  Q( T  [' N% \bbs.vrchina.net2.4嵌入式實(shí)時(shí)系統(tǒng)VxWorks的GUI系統(tǒng)--WindML虛擬現(xiàn)實(shí)中國(guó)社區(qū)8 ?  ^1 W( f( `

2.4.1 WindML的體系結(jié)構(gòu)

6 F; f+ d( N$ R3 kbbs.vrchina.net2.4.2 WindML提供的顯示驅(qū)動(dòng)程序

. _; y: t/ p" R5 B9 [( F& `: u/ w虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl2.5小結(jié)

& y( ?2 V- {9 p! s4 p. L: bvrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真第三章顯示驅(qū)動(dòng)的體系結(jié)構(gòu)虛擬現(xiàn)實(shí)中國(guó)社區(qū)4 N. [) E% v. _, J, {

3.1功能和性能要求虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl% r2 D' o5 Z" L$ K# z8 s$ Y8 n' B

3.1.1功能要求

- [9 V0 M% r+ ?8 a: q+ l虛擬現(xiàn)實(shí)中國(guó)社區(qū)3.1.2性能要求

+ J: _; y3 H& L; A# U: F5 e6 Svrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真3.2解決方案bbs.vrchina.net3 M3 W  H, ]5 |" h' l

3.3驅(qū)動(dòng)體系結(jié)構(gòu)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真" S$ U$ Q! B1 L% o4 N7 L

3.3.1從驅(qū)動(dòng)性能的角度劃分bbs.vrchina.net% W4 ]% V4 u4 Z6 \6 H3 G- ]

3.3.2從可移植性的角度劃分bbs.vrchina.net9 Y: g+ N' _; S. \" I# z* I: }  K; A

3.3.3折中的體系結(jié)構(gòu)劃分

' B3 C1 K5 p3 Y9 Mbbs.vrchina.net3.4系統(tǒng)功能分解vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真5 s" ]$ }5 S0 W8 m; t* {

3.4.1驅(qū)動(dòng)程序入口函數(shù)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真, S6 Q# e+ ~+ ~' B/ \. R+ v( L# R

3.4.2核心數(shù)據(jù)結(jié)構(gòu)

' h) N# a* ]1 J- q; vvrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真3.4.3功能模塊之間的連接關(guān)系

! z& m6 b% O7 ?& Q- ^  f" A虛擬現(xiàn)實(shí)中國(guó)社區(qū)3.4.4顯示驅(qū)動(dòng)的接口函數(shù)

/ k, h0 p! c- y4 x$ B& z3.5小結(jié)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真' _; B2 \7 X: ^

第四章顯示驅(qū)動(dòng)的系統(tǒng)實(shí)現(xiàn)虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl8 j6 ~2 a$ S5 Y' X: @% U( B( c; T

4.1.PCI模塊的實(shí)現(xiàn)

6 j- j# t% F3 j! r虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl4.2 GTT功能模塊的實(shí)現(xiàn)中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)$ A7 K5 N. [  e( ?/ ]

4.3硬件相關(guān)功能模塊的實(shí)現(xiàn)虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl1 \1 c" h+ z8 O& e& v- ?% h

4.4二維繪圖功能模塊的實(shí)現(xiàn)

% \7 U' ]$ f8 R/ w' {7 Y中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)4.5 OpenGL功能模塊的實(shí)現(xiàn)  P# v" c" X! X3 T5 p- B

4.6可編程鍵盤(pán)功能模塊的實(shí)現(xiàn)

, [( y3 C/ U! w" Fvrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真4.7小結(jié)3 y9 F) q1 c  A4 B2 Q9 u6 H

第五章系統(tǒng)的技術(shù)實(shí)現(xiàn)

( k% C2 c5 j+ M% y6 a& s虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl5.1直線繪制函數(shù)的改進(jìn)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真5 |& |( S# Y+ F8 ]# ?/ _9 X# ~

5.1.1通用的Bresenham算法虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl  u6 X$ Q& _* L8 d- V

5.1.2對(duì)稱(chēng)的Bresenham算法3 R: B$ a: i, y4 n

5.1.3 ELFA算法虛擬現(xiàn)實(shí)中國(guó)社區(qū): S3 {- g9 ^( `* f* j5 n

5.2圓繪制函數(shù)的優(yōu)化虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl/ t% n' E" v. N7 m! x9 c

5.3橢圓繪制函數(shù)的優(yōu)化

- _% [: `. P* Hbbs.vrchina.net5.4雙緩存技術(shù)的實(shí)現(xiàn)6 n. s& }% \) R: d2 S; x) a# X6 Y7 x

5.5系統(tǒng)實(shí)現(xiàn)的特點(diǎn)3 x, \3 ~4 B+ j! u2 q

5.6小結(jié)中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū), o  ?5 T) b. o4 O; v  ~3 h

第六章系統(tǒng)的實(shí)現(xiàn)效果vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真0 W/ W" N) j: m/ X) n( v

6.1性能測(cè)試虛擬現(xiàn)實(shí)中國(guó)社區(qū)) K# `8 p4 Z! V8 ?8 R6 ]

6.1.1直線繪制算法

8 u" p8 m, p" E" L, @6.1.2圓繪制算法bbs.vrchina.net/ ~) |5 }+ \3 D& x

6.1.3橢圓繪制算法bbs.vrchina.net+ C7 i5 ?; V# d- Q

6.2功能測(cè)試

% ?4 l9 P9 Z9 \. l! P中國(guó)最活躍的虛擬現(xiàn)實(shí)技術(shù)交流社區(qū)6.2.1 WindML窗口系統(tǒng)應(yīng)用

: {' Q4 g: W+ S5 f% ?* \/ Avrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真6.2.2 OpenGL應(yīng)用

" U. U3 `9 E0 Z5 E4 |4 q6.2.3觸摸屏應(yīng)用

7 H. v/ O" _/ r* u( c: _6 z& P2 K6 X虛擬現(xiàn)實(shí),vrchina,bbs,社區(qū),虛擬現(xiàn)實(shí),vr,multigen,creator,vega,vp,virtools,ogre,osg,eon,opengl6.3小結(jié)vrchina 虛擬現(xiàn)實(shí)(Virtual Reality)  三維圖形 CG  GIS 游戲仿真6 w: N# V- a+ r  ]

]]>
VxWorks環(huán)境下雙冗余以太網(wǎng)卡技術(shù)在底層驅(qū)動(dòng)中的實(shí)現(xiàn)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1420&Page=1wangxinxin2010-11-17 10:41:19引 言

  隨著以太網(wǎng)的穩(wěn)定性、抗干擾性和帶寬問(wèn)題的逐步改善,以太網(wǎng)正在大規(guī)模進(jìn)入工業(yè)控制領(lǐng)域。用于工業(yè)過(guò)程控制、通信、航天器和導(dǎo)航系統(tǒng)中的網(wǎng)絡(luò)對(duì)可靠性及其響應(yīng)故障的快速性要求極高。當(dāng)前,冗余設(shè)計(jì)作為一種提高設(shè)備可靠性的有效方法,已經(jīng)得到了廣泛的應(yīng)用。對(duì)于網(wǎng)絡(luò)系統(tǒng)中的單個(gè)節(jié)點(diǎn),常常需要對(duì)網(wǎng)卡進(jìn)行雙冗余備份,即每個(gè)節(jié)點(diǎn)都采用2塊網(wǎng)卡(或2個(gè)網(wǎng)口),中間用集線器或交換機(jī)互連,當(dāng)正常通信的網(wǎng)卡或線路出現(xiàn)故障時(shí),該節(jié)點(diǎn)能自動(dòng)地切換到備份網(wǎng)卡進(jìn)行通信。圖1為冗余網(wǎng)絡(luò)的一種典型聯(lián)接形式。

具有雙冗余網(wǎng)卡的節(jié)點(diǎn)雖然有2塊網(wǎng)卡,2條通道,但對(duì)于高層應(yīng)用系統(tǒng)來(lái)說(shuō),仍呈現(xiàn)單網(wǎng)卡的特征。具體來(lái)講,2塊網(wǎng)卡共有1個(gè)物理地址,1個(gè)IP地址。根據(jù)TCP/IP參考模型,TCP/IP協(xié)議族可以分為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和鏈路層4層,冗余網(wǎng)卡技術(shù)可以在其中各個(gè)層面中實(shí)現(xiàn)。

圖片點(diǎn)擊可在新窗口打開(kāi)查看

VxWorks、MUX與網(wǎng)卡驅(qū)動(dòng)程序

嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks的網(wǎng)絡(luò)協(xié)議棧與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的接口有2種:一種是標(biāo)準(zhǔn)的BSD4.4Driver,它將Driver和協(xié)議緊密關(guān)聯(lián)在一起,不利于多協(xié)議的支持;另一種標(biāo)準(zhǔn)是VxWorks特有的,它將Driver和協(xié)議棧隔離開(kāi),使二者通過(guò)一個(gè)稱(chēng)為MUX的薄層相連,使得網(wǎng)絡(luò)服務(wù)免受特定的網(wǎng)絡(luò)接口驅(qū)動(dòng)程序的影響,達(dá)到Driver獨(dú)立于具體協(xié)議的目的,從而實(shí)現(xiàn)多協(xié)議的支持,三者間的關(guān)系如圖2所示。

圖片點(diǎn)擊可在新窗口打開(kāi)查看

目前版本的MUX支持2種網(wǎng)絡(luò)驅(qū)動(dòng)程序接口模式:增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng)程序接口( END)和網(wǎng)絡(luò)協(xié)議工具包(NPT)驅(qū)動(dòng)程序接口。現(xiàn)以END型網(wǎng)卡驅(qū)動(dòng)為例介紹如何在VxWorks5.4下的NE2000兼容網(wǎng)卡驅(qū)動(dòng)程序中實(shí)現(xiàn)雙網(wǎng)卡冗余設(shè)計(jì)。正常情況下,協(xié)議驅(qū)動(dòng)程序通過(guò)MUX層提供的NIC的句柄來(lái)提交請(qǐng)求,這個(gè)句柄是調(diào)用EndLoaD()獲得的;然后MUX層調(diào)用網(wǎng)卡驅(qū)動(dòng)程序中的接口函數(shù),實(shí)現(xiàn)高層協(xié)議驅(qū)動(dòng)程序的請(qǐng)求。

在應(yīng)用層實(shí)現(xiàn)雙冗余網(wǎng)卡技術(shù)的分析

在系統(tǒng)中對(duì)網(wǎng)卡進(jìn)行雙冗余備份,即1塊網(wǎng)卡在正常工作時(shí)使用,另1塊網(wǎng)卡作為備份。備份用的網(wǎng)卡處于激活狀態(tài)。在正常通信的網(wǎng)卡出現(xiàn)故障或系統(tǒng)需要時(shí),備份用的網(wǎng)卡能實(shí)時(shí)地、自動(dòng)地切換到繼續(xù)工作。顯然,這就要求2塊網(wǎng)卡只能使用同1個(gè)物理地址和同1個(gè)IP地址。從應(yīng)用程序的角度看,只會(huì)看見(jiàn)1塊網(wǎng)卡在工作,不關(guān)心是哪塊網(wǎng)卡在工作及如何切換。

理論上講,冗余網(wǎng)卡技術(shù)可以在OSI各層中實(shí)現(xiàn),而且越在底層實(shí)現(xiàn),檢測(cè)和切換的速度越快,效果應(yīng)該越好。其他利用應(yīng)用層實(shí)現(xiàn)雙冗余網(wǎng)卡的主要方法是在程序中發(fā)起任務(wù),以查詢的方式不斷對(duì)當(dāng)前工作網(wǎng)卡的工作狀態(tài)進(jìn)行判斷,當(dāng)判斷出當(dāng)前使用的網(wǎng)卡處于非正常狀態(tài)的時(shí)候,將刪除當(dāng)前網(wǎng)卡的路由,在主機(jī)列表中刪除當(dāng)前主機(jī)名,并解除網(wǎng)卡與協(xié)議的綁定;然后進(jìn)行備份網(wǎng)卡的配置:為備份網(wǎng)卡綁定協(xié)議,設(shè)置子網(wǎng)掩碼和IP地址。用此種方法實(shí)際測(cè)試,測(cè)試中使裝有雙網(wǎng)卡的主機(jī)不斷向外發(fā)送廣播報(bào)文,同時(shí)用網(wǎng)絡(luò)分析軟件接收。測(cè)得2個(gè)網(wǎng)口的切換時(shí)間平均為120ms,在切換期間有很多廣播報(bào)文丟失。可見(jiàn)在應(yīng)用層實(shí)現(xiàn)雙網(wǎng)卡冗余備份技術(shù),網(wǎng)卡切換速度慢,不利于網(wǎng)絡(luò)的可靠性和實(shí)時(shí)性。

在驅(qū)動(dòng)程序中的實(shí)現(xiàn)

在VxWorks系統(tǒng)中,相同類(lèi)型的網(wǎng)卡使用同一個(gè)驅(qū)動(dòng)程序,網(wǎng)卡之間由驅(qū)動(dòng)程序提供的句柄來(lái)區(qū)別。MUX調(diào)用NIC驅(qū)動(dòng)程序的接口函數(shù)時(shí),都會(huì)把網(wǎng)卡的句柄傳入函數(shù)中。這就為在驅(qū)動(dòng)程序中實(shí)現(xiàn)雙網(wǎng)卡冗余備份提供了基礎(chǔ)。因此要實(shí)現(xiàn)網(wǎng)卡的雙冗余備份,最理想的辦法是在NIC驅(qū)動(dòng)程序中實(shí)現(xiàn)。

數(shù)據(jù)結(jié)構(gòu)
網(wǎng)卡驅(qū)動(dòng)程序中最關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)是有關(guān)網(wǎng)卡特性的數(shù)據(jù)結(jié)構(gòu)。每種網(wǎng)卡都有它自己的特性,包括它的單元號(hào)、中斷向量、I/O基址、物理地址等。

系統(tǒng)啟動(dòng)時(shí),在網(wǎng)卡驅(qū)動(dòng)的裝載函數(shù)中ne2000EndLoad( )中,會(huì)為設(shè)備初始化1個(gè)數(shù)據(jù)結(jié)構(gòu),并分配一個(gè)指針指向這個(gè)結(jié)構(gòu)。這時(shí)定義2個(gè)全局指針:

NE2000END-DEVICE * pDrvCtrl-0;
NE2000END-DEVICE * pDrvCtrl-1;

在網(wǎng)卡初始化時(shí)把這2個(gè)指針?lè)謩e指向2塊網(wǎng)卡的數(shù)據(jù)結(jié)構(gòu),通過(guò)這2個(gè)指針的定義,在MUX調(diào)用NIC驅(qū)動(dòng)程序的接口函數(shù)時(shí),可以根據(jù)網(wǎng)卡的好壞或系統(tǒng)的需要來(lái)選擇pDrvCtrl-0或pDrvCtrl-1,以調(diào)整工作網(wǎng)卡。

發(fā)送和接收處理
在上層驅(qū)動(dòng)程序通過(guò)MUX調(diào)用NIC驅(qū)動(dòng)程序的發(fā)送函數(shù)時(shí),會(huì)傳入網(wǎng)卡的句柄,指定要使用的網(wǎng)卡。通常情況下,驅(qū)動(dòng)程序會(huì)根據(jù)該句柄向相應(yīng)網(wǎng)卡發(fā)出指令,把報(bào)文發(fā)出去。在雙網(wǎng)卡冗余備份驅(qū)動(dòng)程序中,根據(jù)需要來(lái)指定發(fā)送數(shù)據(jù)要使用的網(wǎng)卡,而不一定使用MUX指定的網(wǎng)卡。如先讀2塊網(wǎng)卡的Link信號(hào)寄存器,判斷網(wǎng)絡(luò)連線的通斷,再?zèng)Q定使用哪一塊網(wǎng)卡來(lái)發(fā)送數(shù)據(jù)。

在接收?qǐng)?bào)文的時(shí)候,通常是在中斷中進(jìn)行處理。因?yàn)橐蕴W(wǎng)在物理層上的特點(diǎn),2塊網(wǎng)卡都能收到報(bào)文,不同的是只有與高層協(xié)議綁定的網(wǎng)卡收到的數(shù)據(jù)才能向上傳遞。在雙網(wǎng)卡冗余備份驅(qū)動(dòng)程序中,不是由MUX指定的網(wǎng)卡句柄來(lái)向上傳送數(shù)據(jù),而是根據(jù)當(dāng)前網(wǎng)卡的工作狀態(tài)向上層傳送數(shù)據(jù),即使數(shù)據(jù)是從另一塊網(wǎng)卡上接收來(lái)的或另一塊網(wǎng)卡沒(méi)有和高層協(xié)議綁定。

單物理地址的處理
通常每塊網(wǎng)卡有1個(gè)全世界范圍內(nèi)唯一的物理地址,它保存在網(wǎng)卡的PROM中。網(wǎng)卡初始化時(shí),要從PROM中讀出物理地址,把它存放在適當(dāng)?shù)募拇嫫骱蛿?shù)據(jù)結(jié)構(gòu)中。

要使2塊網(wǎng)卡能相互備份,它們必須有相同的物理地址和IP地址。在雙網(wǎng)卡冗余備份驅(qū)動(dòng)程序中,可以用其中1塊網(wǎng)卡的物理地址。方法有2種:在驅(qū)動(dòng)程序初始化時(shí)只讀1塊網(wǎng)卡的PROM中的物理地址;或者在網(wǎng)卡驅(qū)動(dòng)程序中的ne2000EnetAddrGet()函數(shù)中作修改,完全可以給網(wǎng)卡設(shè)定任意的物理地址(只要避免了同一網(wǎng)絡(luò)中的沖突)。

單IP地址處理
至于2塊網(wǎng)卡采用相同的IP地址,可以這樣實(shí)現(xiàn):在安裝2塊網(wǎng)卡時(shí),只讓1塊網(wǎng)卡有IP地址,另1塊網(wǎng)卡沒(méi)有IP地址。因?yàn)榻o網(wǎng)卡綁定IP地址是在IP協(xié)議所在的網(wǎng)絡(luò)層實(shí)現(xiàn)的,所以在網(wǎng)絡(luò)層以下切換網(wǎng)卡對(duì)上層來(lái)說(shuō)是完全透明的。應(yīng)用程序自始自終只看見(jiàn)1塊網(wǎng)卡在工作。圖3是從應(yīng)用程序的角度看雙網(wǎng)卡備份的示意圖。

效果分析
通過(guò)對(duì)比實(shí)驗(yàn),在應(yīng)用層實(shí)現(xiàn)雙網(wǎng)卡冗余備份的平均網(wǎng)卡切換時(shí)間是120ms,在驅(qū)動(dòng)層實(shí)現(xiàn)雙網(wǎng)卡冗余備份的平均網(wǎng)卡切換時(shí)間是5ms,相對(duì)于在應(yīng)用層或其他高層中實(shí)現(xiàn),效率較高,大大縮短雙網(wǎng)卡的切換時(shí)間,從而降低切換時(shí)網(wǎng)絡(luò)通信丟包的機(jī)率。

圖片點(diǎn)擊可在新窗口打開(kāi)查看

結(jié)束語(yǔ)

分析了VxWorks系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)模型,提出了在系統(tǒng)底層驅(qū)動(dòng)中實(shí)現(xiàn)雙網(wǎng)卡冗余備份功能的設(shè)想,并進(jìn)行了設(shè)計(jì)實(shí)現(xiàn),同時(shí)對(duì)在驅(qū)動(dòng)程序中實(shí)現(xiàn)與在應(yīng)用層中實(shí)現(xiàn)2種方法進(jìn)行了對(duì)比,證明了在驅(qū)動(dòng)程序中不但能夠很好地實(shí)現(xiàn)雙網(wǎng)卡冗余備份功能,而且提高了以太網(wǎng)的實(shí)時(shí)性和可靠性,在工業(yè)以太網(wǎng)蓬勃發(fā)展的今天,具有一定的實(shí)用意義。

]]>
vxworks(接上)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1419&Page=1wangxinxin2010-11-17 10:39:27Boot Code里調(diào)用:
a.USB class driver初始化入口點(diǎn);
b.USB class driver調(diào)用usbdlnitialize();
Hot-Swap code調(diào)用:
c.Hot-Swap 鑒別USB主控制器的連接或斷開(kāi);
d.Usbdlnitialize();
e.UsbdPciConfigHeaderGet():讀USB主控制器配置頭;
f.UsbdHedAttaeh():連接HCD,將其作為特定的主控制器。
   

       因?yàn)闊岵灏慰梢栽谌魏螘r(shí)刻發(fā)生,所以USBD和其Client都必須被寫(xiě)成可以動(dòng)態(tài)識(shí)別USB設(shè)備被插入還是被拔出。當(dāng)主控制器連接到系統(tǒng)時(shí),USBD 自動(dòng)地鑒別與其相連的設(shè)備,并通知相關(guān)的client;同樣,拔出設(shè)備時(shí),也要通知相關(guān)設(shè)備。重要的是,USBD 的client,比如USB class driver,在client初始化時(shí),從不設(shè)想特定的設(shè)備已經(jīng)出現(xiàn);而在其他時(shí)候,這些驅(qū)動(dòng)隨時(shí)檢查設(shè)備是否已經(jīng)連接到系統(tǒng)上。

       4.4 總線任務(wù)
   

       對(duì)每一個(gè)連接到USBD 的主控制器,例如插入或拔出設(shè)備,USBD都會(huì)產(chǎn)生一個(gè)總線任務(wù),來(lái)監(jiān)控總線事件。一般情況下,這些任務(wù)是休眠的(不消耗CPU),只有當(dāng)USB hub報(bào)告它的一個(gè)端口有變化時(shí),它們才被喚醒。每一個(gè)USBD總線任務(wù)有VxWorks任務(wù)名:UsbdBus。
   

       雖然HCD委托USBD來(lái)管理,但有可能HCD 親自監(jiān)視主控制器事件。例如WindRiver提供了UHCI和OHCI的HCD來(lái)創(chuàng)造這樣的任務(wù)。對(duì)于WindRiver的UHCI模塊(usbHcdUheiLib),后臺(tái)任務(wù)只是被周期地喚醒,目的是為了檢查超時(shí)IRP(用一個(gè)中斷來(lái)通知OHCI根hub發(fā)生改變)。

       用以在USBD和USB之問(wèn)進(jìn)行通信的client模塊,除了調(diào)用usbdlnitialize()外,必須調(diào)用usbClientRegister()使其在USBD注冊(cè)。當(dāng)一個(gè)client注冊(cè)到USBD時(shí),USBD把每一個(gè)以后將要用到的client的數(shù)據(jù)結(jié)構(gòu)定位,并跟蹤那個(gè)client的請(qǐng)求。
   

       對(duì)于每一個(gè)client,在client注冊(cè)過(guò)程中,USBD還創(chuàng)建了一個(gè)callback任務(wù)。在成功注冊(cè)client后,USBD返回一個(gè)句柄USBD_CLIENT_HANDLE。以下對(duì)USBD的調(diào)用,將會(huì)用到這個(gè)句柄。當(dāng)所有句柄都不需要時(shí),可以調(diào)用usbdClientUnregister()來(lái)釋放每一個(gè)client的數(shù)據(jù)結(jié)構(gòu)和callback任務(wù)。注意:此時(shí)所有client要求的任務(wù)都會(huì)被取消。

       例如:注冊(cè)一個(gè)叫USBD_TEST的client,再注銷(xiāo)。
       注冊(cè):usbdClientRegister("USBD_TEST',&usbdClientHandle);
       注銷(xiāo):usbdClientUnregister(usbdClientHandle);

       4.5 client回調(diào)(callback)任務(wù)
   

       USB操作是嚴(yán)格遵守時(shí)序的。例如為使中斷傳輸和同步傳輸正確工作.需要依靠時(shí)鐘中斷。在一個(gè)有幾個(gè)不同client出現(xiàn)的主系統(tǒng)中.總是有可能出現(xiàn)一個(gè)client打斷其它c(diǎn)lient傳輸事件的發(fā)生。WindRiver USBD建議用client callback任務(wù)來(lái)解決這個(gè)問(wèn)題。許多USB事件可以導(dǎo)致一個(gè)USB client的callback任務(wù)。例如, 每當(dāng)USBD 完成USB IRP后,client的IRP callback函數(shù)被激活。同樣,當(dāng)USBD識(shí)別出一個(gè)動(dòng)態(tài)連接事件后,會(huì)激活一個(gè)或更多的動(dòng)態(tài)attach callback操作。但不是馬上激活這些回調(diào)操作, 而是安排合適的相應(yīng)的USBD client的回調(diào)任務(wù)來(lái)執(zhí)行callback。
   

       一般的情況下,每一個(gè)client的callback任務(wù)處于“休眠”態(tài)(阻塞態(tài))。每一個(gè)client的callback,繼承了usbdClientRegister()產(chǎn)生的VxWorks任務(wù)優(yōu)先級(jí)。這確保了每一個(gè)callback按其client的任務(wù)優(yōu)先級(jí)來(lái)執(zhí)行,而且可以利用優(yōu)先級(jí)來(lái)寫(xiě)client,保證對(duì)時(shí)間要求嚴(yán)格的USB傳輸。由于每一個(gè)client有它自己的callback任務(wù),因此在callback期間,它們有很大的靈活性決定可以做什么。例如,允許在不破壞USBD或其它USBD client性能的條件下,使callback執(zhí)行代碼運(yùn)行至阻塞態(tài)。
    Client callback task有VxWorks任務(wù)名:tUsbdCln。

       4.6 USBD內(nèi)部Client
   

       當(dāng)?shù)谝淮纬跏蓟疷SBD時(shí),由USBD產(chǎn)生并注冊(cè)一個(gè)內(nèi)部client,以跟蹤USB請(qǐng)求。
   

       USBD 可以產(chǎn)生什么類(lèi)型的USB請(qǐng)求呢? 所有USBD與USB設(shè)備的傳輸,均利用調(diào)用USBD client的形式來(lái)完成。例如, 當(dāng)一個(gè)設(shè)備第一次連接到系統(tǒng)時(shí).USBD用一個(gè)控制管道(control pipe) 自動(dòng)地創(chuàng)建設(shè)備需要的所有的control pipe,即USBD client要用usbdPipeCreate()來(lái)創(chuàng)建一個(gè)與USB endpoint0通話的通道,然后所有USBD 內(nèi)部、外部client通過(guò)這個(gè)管道來(lái)發(fā)送諸如usbdDescriptorGet()或usbdFeatureGet()等的函數(shù),進(jìn)行操作。
   

       所以,USBD 的一個(gè)機(jī)制就是USBD 循環(huán)利用它自己的entry point,而內(nèi)部chent跟蹤這些請(qǐng)求。

       4.7 動(dòng)態(tài)連接的注冊(cè)
   

       每當(dāng)一個(gè)特定類(lèi)型的設(shè)備插入或拔出時(shí),USBD client都通知上一層。利用調(diào)用usbdDynamicAttachRegister()操作,client可以指定一個(gè)callback操作,以便可以獲取這樣的通知。
   

       USB設(shè)備類(lèi)型用class,subclass,protocol來(lái)區(qū)別。標(biāo)準(zhǔn)的USB 類(lèi)在usb.h 中定義為USB_CLASS_XXXX。Subclass和protocol根據(jù)class來(lái)定義, 因此這些常數(shù)根據(jù)特定的class在頭文件中定義。
   

       有時(shí), 一個(gè)client當(dāng)利用usbdDynamicAttachRegister()進(jìn)行注冊(cè)時(shí),只對(duì)特定的class,subclass,protocol感興趣。例如,USB鍵盤(pán)類(lèi)驅(qū)動(dòng)usbkeyboardLib, 注冊(cè)了Human Device Interface (HID) 類(lèi),subclass 是USB_SUBCLASS_HID_ BOOT,protocol是USB_PROTOCOL_HID_BOOT _KEYBOARD。通過(guò)callback機(jī)制的響應(yīng),每當(dāng)一個(gè)設(shè)備完全符合這樣的標(biāo)準(zhǔn), 從設(shè)備上插入或拔出時(shí),SBD便通知給keyboard class driver。而在其它情況下,client關(guān)注的范圍更廣泛了。常量USBD_NOTIFY(定義在usbdLib.h)可以替代任意的class,subclass,protocol。例如,USB打印機(jī)USB驅(qū)動(dòng),usbPrinterLib, 其class等于USB_CLASS_PRINTER,subclass 等于USB_SUBCLASS_PRINTER (usbPrinter.h),protocol等于USBD_ NOTIFY_ ALL。典型的,當(dāng)一個(gè)client只調(diào)用一次usbdDynamicAttachRegister()時(shí),對(duì)一個(gè)client能擁有的并發(fā)通知請(qǐng)求數(shù)目沒(méi)有限制。

       4.8 Node ID
   

       USB設(shè)備一般用USBD_NODE_ID來(lái)區(qū)別。從其作用來(lái)看,USBD_ NODE_ ID 是USBD 用來(lái)跟蹤一個(gè)設(shè)備的句柄。它與USB設(shè)備真正的USB地址無(wú)關(guān)。這表明client并不真正關(guān)心想要了解設(shè)備是物理上與哪一個(gè)USB主控制器相連。應(yīng)用為每個(gè)設(shè)備抽象定義的Node ID, 使client可以不用考慮物理設(shè)備的連接細(xì)節(jié)以及USB地址分配, 并允許USBD 在其內(nèi)部對(duì)這些進(jìn)行詳細(xì)的管理。
   

       當(dāng)一個(gè)client通知有一個(gè)設(shè)備連接或斷開(kāi)時(shí),USBD經(jīng)常通過(guò)USBD_NODE_ID來(lái)定位設(shè)備。同樣,當(dāng)一個(gè)client想通過(guò)USBD與一個(gè)特定的設(shè)備通信時(shí),它必須向USBD傳遞那個(gè)設(shè)備的USBD_NODE_ID。

       4.9 總線編號(hào)(bus enumeration)操作
   

       usbdLib模塊提供了usbdBusCountGet(),usbdRootNodeldGet(),usbdHubPortCountGet(),usbdNodldGet()操作。它們被一起稱(chēng)作總線編號(hào)操作。它們使USBD Client對(duì)連接到每一個(gè)主控制器上的設(shè)備進(jìn)行編號(hào)。
   

       這些操作對(duì)于診斷程序和測(cè)試工具很有用,例如usbTool(WindRiver提供的一個(gè)測(cè)試工具)。但是,利用它們編號(hào)之后,調(diào)用者無(wú)法知道USB的拓?fù)浣Y(jié)構(gòu)是否變化。因此, 建議USB class driver的開(kāi)發(fā)者不要用這些操作。

       4.10 數(shù)據(jù)傳輸
   

       一旦client配置完成一個(gè)設(shè)備,就開(kāi)始利用USBD提供的管道和傳輸功能與設(shè)備進(jìn)行數(shù)據(jù)交換。傳輸種類(lèi)(分為控制、塊、中斷和同步傳輸)用一個(gè)USB_IRP數(shù)據(jù)結(jié)構(gòu)來(lái)描述。 USB_IRP 的具體描述請(qǐng)參見(jiàn)HCD_FUNC_IRP_SUBM1T。USB數(shù)據(jù)傳輸被定位于每一個(gè)設(shè)備的特定endpoint。在USBD client和特定的設(shè)備endpoint之間的通道被稱(chēng)作管道(pipe)。每一個(gè)管道有以下若干特性:
USBD_NODE_ID;
設(shè)備的endpoim 數(shù)目;
數(shù)據(jù)傳輸方向;
帶寬需求;
延時(shí)需求。
   

        為了和設(shè)備交換數(shù)據(jù),client必須先創(chuàng)建管道。作為結(jié)果,USBD得到了一個(gè)USBD_PIPE_HANDLE,它被用于隨后對(duì)這個(gè)管道的所有client操作。
   

       當(dāng)client企圖創(chuàng)建一個(gè)管道時(shí),USBD會(huì)檢查是否有足夠的可用帶寬。對(duì)于中斷和同步傳輸,帶寬限制是必需的。USBD不允許把90% 以上的可用帶寬分配給中斷和同步管道;而對(duì)于控制和塊傳輸,則沒(méi)有帶寬的限制。同時(shí),保證至少10% 的帶寬用于控制傳輸,對(duì)塊傳輸則不保證會(huì)提供任何可用帶寬。
數(shù)據(jù)傳輸?shù)木唧w過(guò)程:

       (1)創(chuàng)建pipe :usbdPipeCreate(usbdClient Handle,nodeld,endpoint,configvalue,interface,USB_XFRTYPE_BULK,USB_ DIR_OUT,maxPacketSize,0,0,&outPipeHandle);
       (2)定義callback:ourlrpCallback(pvoid P);
       (3)初始化IRP的數(shù)據(jù)結(jié)構(gòu);
       (4)發(fā)送IRP:usbdTransfer(usbdChentHandle,outPipeHandle,&irp)。

       5 、小結(jié)
   

       USB在VxWroks下的從下至上驅(qū)動(dòng)棧分為HC、UCD、USBD和Client Module四層,每一層都相對(duì)獨(dú)立,并為上一層提供了屏蔽該層次具體特征的接口。作者所說(shuō)的USB驅(qū)動(dòng),實(shí)際上主要在USBD這一層次上完成。具體分為Chent注冊(cè),注銷(xiāo),創(chuàng)建pipe ,配置,數(shù)據(jù)發(fā)送,以及各回調(diào)函數(shù)。當(dāng)正確地依次調(diào)用時(shí), 會(huì)根據(jù)回調(diào)函數(shù)的狀態(tài)和返回值,按正確的時(shí)序進(jìn)行完整的數(shù)據(jù)傳輸。
   

       上述設(shè)計(jì)思想構(gòu)成了VxWorks下USB設(shè)備應(yīng)用的基礎(chǔ)。作者的研究詳細(xì)地分析了VxWorks的USB協(xié)議棧,證明了該方案的可行性,同時(shí)又給出了合理的實(shí)現(xiàn)方法。作為實(shí)踐成果,作者已在VPN網(wǎng)關(guān)證書(shū)讀取系統(tǒng)中,利用該思想編寫(xiě)的驅(qū)動(dòng),順利讀出存儲(chǔ)在USB設(shè)備中的設(shè)備證書(shū)和管理員證書(shū),且運(yùn)行情況良好。作者認(rèn)為,文中提到的模型完全可以勝任解決USB設(shè)備在VxWorks下的應(yīng)用所面臨的技術(shù)難題

]]>
VxWorks實(shí)時(shí)操作系統(tǒng)的USB驅(qū)動(dòng)程序原理與分析http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1418&Page=1wangxinxin2010-11-17 10:38:17   

        通用串行總線(USB)作為一種中高速的數(shù)據(jù)方式,已經(jīng)很普遍地應(yīng)用于外設(shè)與主機(jī)的通信中。VxWorks是當(dāng)今十分流行的實(shí)時(shí)操作系統(tǒng),在通信、國(guó)防、工業(yè)控制、醫(yī)療設(shè)備等嵌入式實(shí)時(shí)應(yīng)用領(lǐng)域。很多VxWorks系統(tǒng)中都有USB設(shè)備,可是關(guān)于USB的驅(qū)動(dòng)實(shí)現(xiàn)并沒(méi)有相關(guān)的資料可以參考,給實(shí)際工作帶來(lái)了難題。本文通過(guò)詳細(xì)地分析VxWorks下的USB驅(qū)動(dòng)棧,具體提出了其實(shí)際應(yīng)用的方法,為USB在應(yīng)用VxWorks的嵌入式系統(tǒng)的開(kāi)發(fā)掃清了技術(shù)障礙。

        2、VxWorks簡(jiǎn)介
   

        VxWorks是WindRiver公司開(kāi)發(fā)的具有工業(yè)領(lǐng)導(dǎo)地位的高性能實(shí)時(shí)操作系統(tǒng)(Real Tim Operation System,RTOS)內(nèi)核,具有先進(jìn)的網(wǎng)絡(luò)功能。VxWorks的開(kāi)放式結(jié)構(gòu)和對(duì)工業(yè)標(biāo)準(zhǔn)的支持,使得開(kāi)發(fā)人員易于設(shè)計(jì)高效的嵌入式系統(tǒng),并可以很小的工作量移植到其它不同的處理器上。

        作為一種先進(jìn)的實(shí)時(shí)操作系統(tǒng),它具有以下特點(diǎn):

        可裁剪微內(nèi)核結(jié)構(gòu)。 
        高效的任務(wù)管理:
        ① 多任務(wù),具有256個(gè)優(yōu)先級(jí)。
        ② 具有優(yōu)先級(jí)排隊(duì)和循環(huán)調(diào)度。
        ③ 快速的、確定性的上下文切換。 
        靈活的任務(wù)間通訊:
        ① 三種信號(hào)燈:二進(jìn)制、計(jì)數(shù)、有優(yōu)先級(jí)繼承特性的互斥信號(hào)燈。
        ② 消息隊(duì)列。
        ③ 套接字(Socket)。
        ④ 共享內(nèi)存。
        ⑤ 信號(hào)(Signals) 
        微秒級(jí)的中斷處理。 
        支持POSIX 1003.1b實(shí)時(shí)擴(kuò)展標(biāo)準(zhǔn)。 
        支持多種物理介質(zhì)及標(biāo)準(zhǔn)的、完整的TCPIP網(wǎng)絡(luò)協(xié)議。 
        靈活的引導(dǎo)方式。支持從ROM、flash、本地盤(pán)(軟盤(pán)或硬盤(pán))或網(wǎng)絡(luò)引導(dǎo)。 
        支持多處理器并行處理。 
        快速靈活的l/O系統(tǒng)。 
        支持MS-DOS和RT-11文件系統(tǒng)。 
        支持本地盤(pán),flash,CD-ROM 的使用。 
        完全符合ANSI C標(biāo)準(zhǔn)。 
        多個(gè)系統(tǒng)調(diào)用。

        3、 USB驅(qū)動(dòng)程序的結(jié)構(gòu)概述

        圖1提供了一個(gè)USB主驅(qū)動(dòng)棧結(jié)構(gòu)的簡(jiǎn)單概括。圖2顯示了USB主驅(qū)動(dòng)棧的各模塊之間的功能聯(lián)系。

圖片點(diǎn)擊可在新窗口打開(kāi)查看

 圖1 USB主驅(qū)動(dòng)棧結(jié)構(gòu)簡(jiǎn)單模型

圖片點(diǎn)擊可在新窗口打開(kāi)查看

                                      圖2 USB主驅(qū)動(dòng)棧各模塊之間的功能聯(lián)系
   

       在棧的最底部是USB主控制器(USB HC, 即USB Host Controller), 這是主系統(tǒng)中控制每一個(gè)USB設(shè)備的硬件部分。
   

       目前,市場(chǎng)上主要有兩大類(lèi)USB主控制器,一種是支持由ime1公司最先提出的通用主控制器接口(Universal Host Controller Interface,簡(jiǎn)稱(chēng)UHCI),另一種是支持由微軟、康柏和國(guó)家半導(dǎo)體公司聯(lián)合設(shè)計(jì)提出的開(kāi)放主控制器接口(Open Host Controller Interface,簡(jiǎn)稱(chēng)OHCI)。硬件廠商一般根據(jù)這兩個(gè)規(guī)范設(shè)計(jì)他們的USB主控制器。
   

       對(duì)于每一類(lèi)型的主控制器都有一個(gè)與硬件獨(dú)立的USB主控制器驅(qū)動(dòng)(Host Controller Driver,簡(jiǎn)稱(chēng)HCD)。WindRiver提供了兩個(gè)驅(qū)動(dòng):usbHcdUhciLib (UHCI 主控制器庫(kù))和usbHedOheiLib (OHCI主控制器庫(kù))。USB主驅(qū)動(dòng)(USB host driver,簡(jiǎn)稱(chēng)USBD)和HCD之間的接口允許一個(gè)或超過(guò)一個(gè)的底層主控制器。而且,WindRiver的USBD能夠同時(shí)連接多個(gè)USB HCD。這樣的設(shè)計(jì)特點(diǎn)可以使開(kāi)發(fā)者建立復(fù)雜的USB系統(tǒng)。
   

       USBD是在HCD之上的與硬件獨(dú)立的模塊。USBD管理每一個(gè)與主機(jī)相連的USB設(shè)備, 向更高層次提供了可與USB設(shè)備通信的路徑。它還負(fù)責(zé)自動(dòng)處理USB電力管理以及USB帶寬管理。而且,USBD還管理USB hub,Hub功能是一個(gè)驅(qū)動(dòng)能否對(duì)USB正確操作的評(píng)價(jià)之一。因此WindRiver的USBD設(shè)計(jì)者要使USBD透明地處理hub的功能。這意味著,USBD 還能處理USB hub和設(shè)備的動(dòng)態(tài)插拔。
    USB Client模塊在USB主驅(qū)動(dòng)棧的頂端。USB類(lèi)驅(qū)動(dòng)(USB Class Driver)是Client模塊的典型例子。USB類(lèi)驅(qū)動(dòng)負(fù)責(zé)管理連接到USB上的不同類(lèi)型的設(shè)備; 它們依靠USBD來(lái)提供與每個(gè)設(shè)備的通信路徑。USB client模塊的其他例子就是那些利用USBD與USB設(shè)備通信的應(yīng)用程序。

       4、 USBD驅(qū)動(dòng)詳解
   

       這一部分將要描述USBD(USB Host Driver)的典型應(yīng)用。例如初始化,client注冊(cè),動(dòng)態(tài)連接注冊(cè),設(shè)備配置,數(shù)據(jù)傳輸,同時(shí)還探討了USBD內(nèi)部設(shè)計(jì)的關(guān)鍵特性。這部分是VxWorks下USB驅(qū)動(dòng)的核心。

       4.1 初始化USBD:分為兩步

       (1)必須至少調(diào)用一次函數(shù)usbdInitialize()。在一個(gè)給定的系統(tǒng)中,usbdlnifialize()初始化內(nèi)部USBD數(shù)據(jù)結(jié)構(gòu),并依次調(diào)用其它USB驅(qū)動(dòng)棧模塊的入口。usbdinitialize()可以在啟動(dòng)時(shí)調(diào)用一次,也可以對(duì)每一個(gè)設(shè)備各調(diào)用一次。USBD 自己記錄了調(diào)用usbdInitialize()(‘+’)和usbdShutDown()(‘-’)的次數(shù)。只有大于等于1時(shí)才是真正初始化了,而等于0是關(guān)閉了。

       (2)用USBD 的lisbdHedAttaeh()函數(shù)來(lái)把至少一個(gè)HCD連接到USBD上。這一過(guò)程既可以在VxWorks啟動(dòng)時(shí),也可以在運(yùn)行時(shí)把HCD 連接到USBD 上去。后一種機(jī)制可以支持“熱插拔”,而不用象前一種那樣需要重新啟動(dòng)。

       4.2 HCD的連接(attaching)與斷開(kāi)(detaching)
   

       當(dāng)HCD連接到USBD 時(shí),調(diào)用者為usbdHedattaeh函數(shù)傳遞HCD執(zhí)行入口(表HCD_EXEC_FUNC)和HCD連接參數(shù)(HCD attach parameter)。USBD用HCD FNC ATYACH 服務(wù)請(qǐng)求依次激活HCD的執(zhí)行入口,傳遞同樣的HCD attach參數(shù)。
   

       需要強(qiáng)調(diào)雖然可以改變用HCD定義的參數(shù),但是最好不應(yīng)該有所改變。對(duì)于WindRiver提供的UHCI和OHCI的HCD,HCI attach參數(shù)是一個(gè)指向結(jié)構(gòu)PCI_CFG_HEADER (定義在pciConstants.h) 的指針。

       該結(jié)構(gòu)用UHCI和OHCI主控制器的PCI配置頭來(lái)初始化,而HCD用這個(gè)結(jié)構(gòu)中的信息來(lái)定位,管理特定的主控制器。典型的,調(diào)用者用usbPeiClassFind ()和usbPciConfigHeaderGet()來(lái)得到想要的主控制器的PCI配置頭- 這兩個(gè)函數(shù)定義在usbPciLib 中(stubUsbarchPciLib.h中)。如果有UHCI或OHCI要連接到USBD,就要調(diào)用這些函數(shù)來(lái)獲得每一個(gè)主控制器的PCI_CFG_HEADER。然后利用usbdHedAttaeh來(lái)激活已鑒別出的每一個(gè)主控制器。
   

       注意:底層BSP可能不支持USB的HCD斷開(kāi),因?yàn)楫?dāng)中斷向量表重新使能時(shí),如果還應(yīng)用的是過(guò)期的向量表,會(huì)導(dǎo)致錯(cuò)誤。

       4.3 啟動(dòng)順序
   

       必須在所有USBD函數(shù)前執(zhí)行函數(shù)usbdInitialize()。存在以下兩種調(diào)用方式:
(1)傳統(tǒng)的“啟動(dòng)”初始化。執(zhí)行順序與其意義如下:
a.usbdInitialize();
b.usbdPciClassFind():定位一個(gè)USB主控制器;
c.usbdPeiConfigHeaderGet():讀USB主控制器配置頭;
d.usbdHedAttaeh():連接HCD,將其作為特定的主控制器:
e.調(diào)用USB class driver初始化入口點(diǎn);
f.USB class driver調(diào)用usbdlnitialize()。

      

]]>
VxWorks環(huán)境下雙網(wǎng)卡冗余備份技術(shù)的實(shí)現(xiàn)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1417&Page=1wangxinxin2010-11-17 10:36:28摘  要:在對(duì)網(wǎng)絡(luò)通信可靠性要求高的系統(tǒng)中,需要對(duì)網(wǎng)卡進(jìn)行雙冗余備份。當(dāng)正常通信的網(wǎng)卡或線路出現(xiàn)故障時(shí)能自動(dòng)地切換到備份網(wǎng)卡。本文詳述了實(shí)時(shí)操作系統(tǒng)VxWorks下一種雙網(wǎng)卡冗余備份技術(shù)的實(shí)現(xiàn)。
    關(guān)鍵詞:實(shí)時(shí)操作系統(tǒng)
VxWorks網(wǎng)絡(luò)控制器;雙冗余備份

1引言
    隨著網(wǎng)絡(luò)技術(shù)的成熟,以太網(wǎng)已成為各種控制系統(tǒng)接口互連的主要媒介。在某些特殊的應(yīng)用場(chǎng)合,為了提高系統(tǒng)的可靠性和抗毀性,需采用雙冗余網(wǎng)絡(luò)技術(shù)。在雙冗余網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)都采用兩塊網(wǎng)卡
(或單板雙卡),中間用兩個(gè)HUB或交換機(jī)互連。當(dāng)某個(gè)節(jié)點(diǎn)一塊網(wǎng)卡故障,或網(wǎng)線損壞,或其中一個(gè)HUB或交換機(jī)故障時(shí),網(wǎng)絡(luò)仍能正常運(yùn)作。
    雙冗余網(wǎng)絡(luò)雖有兩塊網(wǎng)卡,兩條通道,但對(duì)于高層應(yīng)用系統(tǒng)來(lái)說(shuō),仍呈現(xiàn)單網(wǎng)卡的特征。具體來(lái)講,每個(gè)節(jié)點(diǎn)的兩塊網(wǎng)卡只能有一個(gè)物理地址,一個(gè)
IP地址,否則
網(wǎng)絡(luò)就不能進(jìn)行正常通信。
    現(xiàn)在大多數(shù)操作系統(tǒng)
(WindowsUnixLinux)均支持多網(wǎng)卡,但均非冗余設(shè)計(jì),每塊網(wǎng)卡都有獨(dú)立的物理地址和IP地址,以獨(dú)立的形式讓?xiě)?yīng)用系統(tǒng)使用。根據(jù)目前海軍對(duì)高性能實(shí)時(shí)系統(tǒng)的要求,我們對(duì)VxWorks環(huán)境下的雙網(wǎng)卡的切換以及冗余備份的設(shè)計(jì)方法及要點(diǎn)進(jìn)行介紹。

2VxWorks
介紹[1][2][3]

        VxWorks
操作系統(tǒng)是一種具有工業(yè)領(lǐng)導(dǎo)地位的高性能嵌入式實(shí)時(shí)操作系統(tǒng),是嵌入式開(kāi)發(fā)環(huán)境Tornado的關(guān)鍵組成部分,它為程序員提供了良好的可靠性和卓越的實(shí)時(shí)性,因此被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中。
    就廣泛使用的
UnixWindows操作系統(tǒng)來(lái)說(shuō),它們都是很好的應(yīng)用開(kāi)發(fā)和交互式應(yīng)用的操作系統(tǒng)平臺(tái),然而他們并不適合于實(shí)時(shí)應(yīng)用。而從另一方面考慮,以前出現(xiàn)的實(shí)時(shí)操作系統(tǒng)都沒(méi)有為應(yīng)用開(kāi)發(fā)和應(yīng)用的非實(shí)時(shí)組件(譬如向GUI)提供很好的運(yùn)行環(huán)境。而Wind River的哲學(xué)是利用兩個(gè)相互協(xié)作的操作系統(tǒng)來(lái)互相補(bǔ)充對(duì)方的不足(譬如VxWorksWindows),讓他們各盡所長(zhǎng)。VxWorks為應(yīng)用提供實(shí)時(shí)性,而主機(jī)被用來(lái)進(jìn)行應(yīng)用開(kāi)發(fā)和運(yùn)行非實(shí)時(shí)的應(yīng)用程序。

3冗余切換
    在系統(tǒng)的運(yùn)行中設(shè)備由于硬件或軟件原因出現(xiàn)故障是時(shí)有發(fā)生的事。采用有效的防錯(cuò)容錯(cuò)機(jī)制對(duì)一個(gè)需要穩(wěn)定運(yùn)行的系統(tǒng)是必需的。冗余備份技術(shù)是對(duì)容易出錯(cuò)的硬件設(shè)備進(jìn)行冗余備份。當(dāng)其中一個(gè)設(shè)備由于某種原因不能正常工作時(shí),另一個(gè)設(shè)備馬上就可以代替這個(gè)設(shè)備完成相同的功能。本文只是針對(duì)網(wǎng)絡(luò)因素導(dǎo)致系統(tǒng)故障的情況分析對(duì)網(wǎng)絡(luò)適配器的一種可行的錯(cuò)誤保護(hù)機(jī)制。
    通常如果在某一系統(tǒng)中安裝兩塊網(wǎng)卡,它們分別有不同的物理和
IP地址。當(dāng)其中一塊網(wǎng)卡出現(xiàn)故障時(shí),另一塊網(wǎng)卡不能實(shí)時(shí)地代替它繼續(xù)工作,這是因?yàn)樗鼈兊奈锢淼刂凡煌运荒芙邮艿桨l(fā)向前一塊網(wǎng)卡的數(shù)據(jù)。但在對(duì)網(wǎng)絡(luò)通信可靠性要求高的系統(tǒng)中,需要對(duì)網(wǎng)卡進(jìn)行雙冗余備份,一塊網(wǎng)卡在正常工作時(shí)使用,另一塊網(wǎng)卡作為備份。備份用的網(wǎng)卡不發(fā)送或接收數(shù)據(jù),但已經(jīng)處于激活狀態(tài)。在正常通信的網(wǎng)卡出現(xiàn)故障時(shí),備份用的網(wǎng)卡能實(shí)時(shí)地、自動(dòng)地切換過(guò)來(lái)繼續(xù)工作。顯然,這就要求兩塊網(wǎng)卡只能使用同一個(gè)物理地址和同一個(gè)IP地址。從應(yīng)用程序的角度看,只會(huì)看見(jiàn)一塊網(wǎng)卡在工作。應(yīng)用程序不關(guān)心是哪塊網(wǎng)卡在工作,也不關(guān)心網(wǎng)卡之間是如何切換的。
    在
VxWorks系統(tǒng)中,相同類(lèi)型的網(wǎng)卡使用同一個(gè)驅(qū)動(dòng)程序,網(wǎng)卡之間由NDIS提供的句柄來(lái)區(qū)別。NDIS調(diào)用NIC驅(qū)動(dòng)程序的接口函數(shù)時(shí),都會(huì)把網(wǎng)卡的句柄傳入函數(shù)中。這就為在驅(qū)動(dòng)程序中實(shí)現(xiàn)冗余備份提供了基礎(chǔ)。雙網(wǎng)卡驅(qū)動(dòng)程序?qū)崿F(xiàn)后與高層協(xié)議驅(qū)動(dòng)程序綁定在一起,對(duì)應(yīng)用程序完全透明。因此要實(shí)現(xiàn)網(wǎng)卡的雙冗余備份,最理想的辦法是在NIC驅(qū)動(dòng)程序中實(shí)現(xiàn)。但是如果采取這樣的方式我們必須要有VxWorks下的所用網(wǎng)卡的驅(qū)動(dòng)程序,而對(duì)于一般的用戶而言,開(kāi)發(fā)這樣一個(gè)驅(qū)動(dòng)程序的難度是很大的。目前也有一些研究單位完成了這些工作,但是它們要求的價(jià)格過(guò)高,軟硬件共需要15000元左右,這對(duì)于一般小型用戶是比較高的。所以我們選擇在
基本不影響冗余備份效果的基礎(chǔ)上,在高層的用戶程序中實(shí)現(xiàn)這一目標(biāo)。
    在早期的
VxWorks51x中,系統(tǒng)是不支持多網(wǎng)卡的。通常,VxWorks在啟動(dòng)時(shí)僅僅對(duì)引導(dǎo)它啟動(dòng)的那塊網(wǎng)卡進(jìn)行初始化。如果需要在某一特定的目標(biāo)機(jī)上從一塊網(wǎng)卡換到另一塊網(wǎng)卡(例如從ene型換到ENP型的網(wǎng)卡),我們可以通過(guò)系統(tǒng)提供的函數(shù)以及來(lái)實(shí)現(xiàn)網(wǎng)卡間的切換。我們所需要做的是連接所需要的網(wǎng)卡并刪除前一個(gè)網(wǎng)卡的路由。我們可以調(diào)用特定網(wǎng)卡的連接函數(shù):enpattach()enettach()等等。例如enpattach()函數(shù)為網(wǎng)卡連接中斷并建立enpsoftc
,系統(tǒng)將為該網(wǎng)卡作相應(yīng)的初始化。
        enpattach (00xffde00001923)

    /
*參數(shù)依次為:網(wǎng)卡在系統(tǒng)中的單元號(hào),enp's的共享內(nèi)存地址,要連接的中斷向量,中斷級(jí)*
    需要說(shuō)明的是,在
VxWorks 51下雖然這些連接函數(shù)都有一個(gè)unitNum參數(shù),似乎可以支持多個(gè)網(wǎng)卡。但其實(shí)并非這樣,在后面的敘述中我們可以看到它沒(méi)有IP MAX UNITS這個(gè)宏的定義,所以并不支持多網(wǎng)卡,unitNum的值一直是0,讀者們可以在源代碼中查看一下。
    因?yàn)楫?dāng)
VxWorks啟動(dòng)時(shí)它將一個(gè)缺省的網(wǎng)絡(luò)接口加載到網(wǎng)絡(luò)接口表中,所以在連接到需要的網(wǎng)卡后需要再調(diào)用ifRouteDelete()函數(shù)以刪除連接到某一指定網(wǎng)卡上的路
由。

    這樣就完成了VxWorks51下多網(wǎng)卡之間的的切換。

    就
VxWorks 54來(lái)說(shuō),它本身是支持多網(wǎng)卡的。以下我們描述SBS PC104系統(tǒng)如何在VxWorks下支持多個(gè)網(wǎng)絡(luò)適配器的軟件冗余切換(ne2000型為例)
    首先我們需要通過(guò)網(wǎng)卡配置程序?qū)τ布h(huán)境中的所有網(wǎng)絡(luò)適配器進(jìn)行
IO基址和IO中斷的配置。本文假設(shè)系統(tǒng)中只有兩個(gè)網(wǎng)絡(luò)適配器,其IO基址和IO中斷號(hào)如下所述。實(shí)際系統(tǒng)中可能會(huì)有多個(gè)網(wǎng)絡(luò)適配器,其配置方法可依法類(lèi)推,只要網(wǎng)卡的IO基址和IO中斷不會(huì)和系統(tǒng)中的其他設(shè)備沖突即可。

]]>
基于VxWorks的嵌入式實(shí)時(shí)PLC設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1416&Page=1wangxinxin2010-11-17 10:34:16如圖可見(jiàn) BSP 為上層軟件與底層硬件之間進(jìn)行交互的橋梁,為上層提供統(tǒng)一接口。BSP中包括的驅(qū)動(dòng)程序與具體的硬件相關(guān),在移植到不同的硬件系統(tǒng)的時(shí)候,要修改相關(guān)的驅(qū)動(dòng)。
4.2 VxWorks BSP 的特點(diǎn)在眾多的商用嵌入式實(shí)時(shí)操作系統(tǒng)中,VxWorks 是使用極為廣泛的一種操作系統(tǒng),它
實(shí)時(shí)性強(qiáng),占用空間小,提供豐富的網(wǎng)絡(luò)協(xié)議,有眾多的調(diào)試手段。VxWorks 的BSP 可以按功能分為兩大部分。
1)目標(biāo)系統(tǒng)的系統(tǒng)引導(dǎo)部分:主要是目標(biāo)系統(tǒng)啟動(dòng)時(shí)的硬件初始化,在目標(biāo)系統(tǒng)上電后開(kāi)始執(zhí)行,主要是配置處理器的工作狀態(tài),初始化系統(tǒng)的內(nèi)存等,這部分的程序一般只在系統(tǒng)引導(dǎo)時(shí)執(zhí)行,為操作系統(tǒng)運(yùn)行提供硬件環(huán)境。
2)目標(biāo)系統(tǒng)的設(shè)備驅(qū)動(dòng)程序:主要是驅(qū)動(dòng)目標(biāo)系統(tǒng)配置的各種設(shè)備,包括字符型設(shè)備、塊存儲(chǔ)設(shè)備、網(wǎng)絡(luò)設(shè)備等,這些設(shè)備驅(qū)動(dòng)程序完成對(duì)硬件的配置,操作系統(tǒng)通過(guò)設(shè)備驅(qū)動(dòng)程序來(lái)訪問(wèn)硬件,從而完成讀取數(shù)據(jù)和外界的交互等。在實(shí)際應(yīng)用中,為了獲得更好的穩(wěn)定性和執(zhí)行效率,許多設(shè)備驅(qū)動(dòng)程序會(huì)直接和應(yīng)用程序捆綁在一起,而不是由操作系統(tǒng)來(lái)管理。
4.3 BSP 的設(shè)計(jì)與修改
WRS 提供了大量預(yù)制的,支持許多商業(yè)主版或評(píng)估板的BSP,減少了開(kāi)發(fā)時(shí)間。
宏觀來(lái)看,BSP 包括兩部分:
初始化部分:CPU 初始化;目標(biāo)板初始化;操作系統(tǒng)的初始化。
驅(qū)動(dòng)程序部分:一般要包括時(shí)鐘、中斷、串口驅(qū)動(dòng)。
具體來(lái)看,BSP 包括源文件、頭文件、派生文件。主要需要修改VxWorks 源碼中的以
下目錄中:
/target/config/all
幾個(gè)重要文件的功用如下:
1)bootConfig.c:引導(dǎo)ROM 映像的主要初始化和控制文件。
2)bootInit.c:引導(dǎo)ROM 映像的第二階段的初始化代碼。實(shí)現(xiàn)romStart 函數(shù)--romInit.s
中的romInit()函數(shù)執(zhí)行完后跳轉(zhuǎn)到romStart(),執(zhí)行解壓縮,代碼/數(shù)據(jù)段從rom 拷到ram。
3)usrConfig.c:VxWorks 映像的主要初始化代碼。
/target/config/comps/vxworks:實(shí)時(shí)內(nèi)核基本模塊描述(cdf)文件。
/target/config/comps/src:實(shí)時(shí)內(nèi)核模塊配置文件。供usrconfig.c 使用。
/target/config/bspname 該目錄下的文件就是要編寫(xiě)的BSP 文件。
由于 BSP 系統(tǒng)開(kāi)發(fā)的硬件相關(guān)性和處理器系列的多樣性,不可能有一種通用的程序或方法來(lái)解決每一種處理器的BSP 問(wèn)題,所以必須具體問(wèn)題具體分析,不斷實(shí)踐,才能使程序運(yùn)行達(dá)到比較高的效率。
5、其它
另外,VxWorks 的多任務(wù)任務(wù)調(diào)度策略的實(shí)施也是實(shí)現(xiàn)嵌入式PLC 的一個(gè)關(guān)鍵點(diǎn),確保高優(yōu)先級(jí)任務(wù)在確定的時(shí)間內(nèi)能被執(zhí)行,并對(duì)外部的異步事件作出及時(shí)響應(yīng)。多任務(wù)環(huán)境允許一個(gè)實(shí)時(shí)應(yīng)用作為一系列獨(dú)立任務(wù)來(lái)運(yùn)行,各任務(wù)有各自的線程和系統(tǒng)資源。VxWorks系統(tǒng)提供了多處理器間和任務(wù)間高效的信號(hào)燈、消息隊(duì)列、管道、網(wǎng)絡(luò)透明的套接字。并具有實(shí)時(shí)系統(tǒng)的另一關(guān)鍵特性是硬件中斷處理。為了獲得快速可靠的中斷響應(yīng),VxWorks 系統(tǒng)的中斷服務(wù)程序(ISR)有自己的上下文。鑒于篇幅關(guān)系,在本文不做詳細(xì)討論。
6、總結(jié)與展望
嵌入式系統(tǒng)已經(jīng)成為歷史發(fā)展的必然,其極佳的可擴(kuò)展性,對(duì)多種硬件的支持,同時(shí)能夠提高PLC 的運(yùn)行速度和可靠性,并且支持多任務(wù)的控制策略,對(duì)PLC 的性能有了很大的提高。通過(guò)現(xiàn)場(chǎng)運(yùn)行調(diào)試,對(duì)現(xiàn)場(chǎng)I/O 設(shè)備進(jìn)行監(jiān)控,達(dá)到了預(yù)期的實(shí)時(shí)性要求,實(shí)現(xiàn)了通過(guò)現(xiàn)場(chǎng)總線或TCP/IP 通信協(xié)議與硬件層(I/O)高速的響應(yīng)目標(biāo)。新型的基于VxWorks 的嵌入式實(shí)時(shí)PLC 具有很高的性能價(jià)格比,具有市場(chǎng)競(jìng)爭(zhēng)優(yōu)勢(shì),有助于我國(guó)PLC 企業(yè)發(fā)展本國(guó)市場(chǎng),發(fā)展自主產(chǎn)業(yè)的PLC。

]]>
VxWorks在AT91RM9200上BSP設(shè)計(jì)方案http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1415&Page=1wangxinxin2010-11-17 10:31:251 bsp理念
  bsp通常是指針對(duì)具體硬件平臺(tái),用戶所編寫(xiě)運(yùn)行源代碼與部分設(shè)備軟件驅(qū)動(dòng)程序集合。它所解決方案功能包括初始化與軟件驅(qū)動(dòng)部分設(shè)備。最基本bsp僅需支持處理器復(fù)位,初始化,軟件驅(qū)動(dòng)串口與必要時(shí)鐘處理。bsp是相對(duì)于操作方法系統(tǒng)而言,不同操作方法系統(tǒng)對(duì)應(yīng)不同形式bsp,因此,在寫(xiě)bsp時(shí)一定要按照條件操作方法系統(tǒng)對(duì)bsp定義形式來(lái)寫(xiě)。在vxworks系統(tǒng)中,bsp是介于底層硬件環(huán)境與vxworks的間一個(gè)軟件接口,它主要功能是系統(tǒng)加電后初始化目標(biāo)機(jī)硬件與vxworks,并供應(yīng)部分硬件軟件驅(qū)動(dòng)程序。bsp在vxworks系統(tǒng)中層次關(guān)系如圖1所示。
  bsp為各種板卡硬件功能供應(yīng)了統(tǒng)一軟件接口,包括硬件初始化,中斷捕捉與處理,硬件時(shí)鐘與定時(shí)器管理,內(nèi)存地址映射,對(duì)及內(nèi)存分配等。每個(gè)bsp還包括一個(gè)rom運(yùn)行或其他運(yùn)行機(jī)制。
2 vxworks引導(dǎo)過(guò)程
  在編寫(xiě)bsp的前,首先要了解整個(gè)系統(tǒng)運(yùn)行過(guò)程。vxworks映像由源代碼段,數(shù)據(jù)段與bss段3部分結(jié)合。vxwotks內(nèi)核能分為3種:可加載種類(lèi)映像,romvxworks映像與rom駐留型映像。這3種種類(lèi)映像組織是不一樣,因此運(yùn)行過(guò)程有所差別。
  可加載映像包括vxworks與boot rom兩部分內(nèi)容,兩部分是獨(dú)立建立。首先,由系統(tǒng)引導(dǎo)源代碼把rom引導(dǎo)程序搬到ram_high_adrs。然后,rom引導(dǎo)程序開(kāi)始啟動(dòng),將vxworks映像加載到ram_low_adrs,的后跳轉(zhuǎn)到vxworks映像裝入點(diǎn)。
  romvxworks映像在bsp初始化時(shí),會(huì)把lmage完全搬到ram中執(zhí)行,包括源代碼段與數(shù)據(jù)段。在拷貝執(zhí)行完畢后,系統(tǒng)控制權(quán)轉(zhuǎn)移給ram中vxworks映像初始化源代碼。
  rom駐留型映像僅僅是將rom中vxworks映像數(shù)據(jù)段與bss段拷貝到ram中,完成后系統(tǒng)控制權(quán)轉(zhuǎn)移給rom/flash里vxworks映像初始化源代碼,源代碼段留在rom中并在rom中啟動(dòng)。在rom中啟動(dòng)vxworks映像主要足為了節(jié)省ram空間,帶來(lái)不利則是啟動(dòng)速度慢。
  圖2與圖3分別是下載型與rom型vxworks映像初始化過(guò)程。
下面臨rom型vxworks內(nèi)核運(yùn)行過(guò)程為例,說(shuō)明各文件用處:
  romlnit()保存運(yùn)行種類(lèi),屏蔽中斷;初始化內(nèi)存與寄存器,屏蔽cache;初始化cpu,將堆棧指針定位于被拷貝boot rom映像在ram地址;跳到romstart()。
  rorastart()根據(jù)不同映像種類(lèi)將vxworks映像不同部分解壓縮<如果需)并加載到ram中。
  usrinit() 對(duì)vxworks映像bss段清零;調(diào)用intvecbaseset()設(shè)置中斷矢量基地址表;調(diào)用excvecinit()初始化異常中斷矢量;調(diào)用syshwinit()初始化系統(tǒng)硬件;調(diào)用usrkernelinit()初始化wind內(nèi)核;調(diào)用kernellnit()運(yùn)行wind內(nèi)核,運(yùn)行usrroot()任務(wù)。
  usrroot()設(shè)置操作方法系統(tǒng)時(shí)鐘,建立設(shè)備,安裝軟件驅(qū)動(dòng),調(diào)用syshwinit2()安裝系統(tǒng)時(shí)鐘與輔助時(shí)鐘中斷對(duì)及串口等設(shè)備中斷,初始化i/o,文件系統(tǒng),調(diào)用應(yīng)用程序軟件。
3 vxworks在at91rm9200上bsp設(shè)計(jì)方案
3.1 at91rm9200介紹
  at91rm9200片上資源包括:arm920t處理器棱,16kb內(nèi)部sram與128kb內(nèi)部rom存儲(chǔ)器;支持sdram,sram,burst flash與compactflash,smartmedia對(duì)及nandflash無(wú)縫連接;16kb數(shù)據(jù)cache,16kb指令cache,完全可編程代碼外部總線接口ebi,4個(gè)32位pio控制器能達(dá)到122個(gè)可編程代碼i/o引腳(每個(gè)都有輸入控制,可中斷及開(kāi)路輸出能力);帶有8個(gè)優(yōu)先級(jí),可單獨(dú)屏蔽中斷源先進(jìn)中斷控制器,6組硬件定時(shí)器,4個(gè)通用同步/異步收發(fā)器usart。
3.2 bsp中幾個(gè)顯要文件修改
  由于at91rm9200內(nèi)核是arm920t,所對(duì)bsp文件主要在vxworks編澤環(huán)境tornado目錄target/config/all與target/config/integrator920t文件夾里。其中,a11文件夾里文件對(duì)于絕大多數(shù)bsp都是共用,普通來(lái)說(shuō)不需修改,特別是“configall.h”;integrator920t文件夾里文件就是所要編寫(xiě)bsp文件,這些文件往往及系統(tǒng)硬件密切關(guān)聯(lián)。
3.2.1 修改makeflie
  makefile文件定義編譯與鏈接整個(gè)bsp規(guī)則,如編譯工具選擇,編譯選項(xiàng)與包含文件路徑等;控制生成vxworks映像文件種類(lèi),同時(shí)含有存儲(chǔ)區(qū)大小資料,對(duì)于存儲(chǔ)區(qū)大小資料改動(dòng)必須及config.h對(duì)應(yīng)改動(dòng)同步。有些型號(hào)參數(shù)需在該文件中定義,如處理器種類(lèi),編譯工具,目標(biāo)地址等。下面說(shuō)明一些須修改型號(hào)參數(shù)與地址:
3.2.2 修改config.h
  config.h文件包含了所有頭文件與及cpu關(guān)聯(lián)特殊定義。vxworks內(nèi)核組件設(shè)置由config.h文件定義。config.h中主要修改內(nèi)容有定義引導(dǎo)行與修改地址。
(1)定義引導(dǎo)行
  其中,mac(o,0)為at91rm9200IC中emac設(shè)備;host為主機(jī)名;vxworks為要下載文件名;h為主機(jī)ip地址;e為目標(biāo)板ip地址;u為用戶名;pw為密碼;tn為目標(biāo)板名稱(chēng)。
(2)修改地址
  該文件中地址定義,如rom_text_adrs,rom_size,ram_low_adr,sram_high_size等要及makefik文件中關(guān)聯(lián)定義一致。本設(shè)計(jì)方案中源代碼段存儲(chǔ)在連接armIC外部片選cso上flash里面,基地址為oxl0000000,因此.定義如下:
  vxworks缺省設(shè)置由configall.h來(lái)確定。普通來(lái)說(shuō),缺省設(shè)置設(shè)置及自行研發(fā)硬件系統(tǒng)設(shè)置不同,用戶可通過(guò)cotlfig.h來(lái)改變?nèi)笔≡O(shè)置。用戶須查看configall.h,并在config.h中將不需軟硬件設(shè)置與初始化去掉。例如,缺省設(shè)置中普通包含浮點(diǎn)處理器,而at9lrm9200中沒(méi)有浮點(diǎn)寄存器,因此就要?jiǎng)h掉關(guān)聯(lián)設(shè)置。
3.2.3 修改integrator920t.c
  該文件中設(shè)置所有非可選,及at91rm9200IC關(guān)聯(lián)資料,如各硬件關(guān)聯(lián)寄存器地址定義,設(shè)備寄存器中對(duì)應(yīng)位定義,各硬件中斷矢量與中斷優(yōu)先級(jí)定義,dbug與usart控制,網(wǎng)口定義,系統(tǒng)時(shí)鐘與輔助時(shí)鐘型號(hào)參數(shù)設(shè)置等。vxworks所要運(yùn)用目標(biāo)板包含設(shè)備軟件驅(qū)動(dòng)程序頭文什應(yīng)當(dāng)包含在該文件開(kāi)始。該文件中各項(xiàng)宏定義均是at91rm9200IC,并根據(jù)具體條件定義。例如,電源管理控制器中用到兩個(gè)鎖相環(huán)plla與pllb,對(duì)它們部分型號(hào)參數(shù)設(shè)定源代碼如下:
3 2.4 修改rornlnit.s
  該文件包含引導(dǎo)rom與romvxworks映像入口初始化匯編源代碼。入口點(diǎn)為rominit()函數(shù),是系統(tǒng)加電運(yùn)行后首先執(zhí)行源代碼。主要功能是:保存運(yùn)行種類(lèi),使處理器復(fù)位;初始化flash與sdram;設(shè)置mmu到已知狀態(tài);指令cache使能;初始化mmu控制寄存器(指令32位,數(shù)據(jù)32位,寫(xiě)緩沖使能);開(kāi)漏寫(xiě)緩沖,并且使指令與數(shù)據(jù)cache都兀效;通過(guò)設(shè)置cpsrirq禁止位,fir禁止位與先進(jìn)中斷控制器aic中中斷禁止寄存器來(lái)屏蔽中斷,跳轉(zhuǎn)到bootinit.c中rom-start(),同時(shí)傳遞運(yùn)行種類(lèi)。其中,中斷屏蔽源代碼如下:
  在調(diào)試這段源代碼時(shí),由于串口與網(wǎng)口都沒(méi)有運(yùn)行,因此僅僅能通過(guò)點(diǎn)燈程序來(lái)跟蹤程序執(zhí)行情況,設(shè)置不同led亮來(lái)顯示程序執(zhí)行到哪一步。例如,如果要并行輸入/輸出口c32位中第15位亮,則能編程代碼為;
  在編寫(xiě)本文件時(shí),需注意地方是:不要在該文件里進(jìn)行過(guò)多初始化操作方法,大部分硬件初始化操作方法在syslib.c文件中syshwinit()函數(shù)中進(jìn)行。
3.2.5 修改syslib c
  syslib.c是bsp初始化核心源代碼。在這個(gè)文件中,必須復(fù)位所有硬件,使其處于初始化狀態(tài),保證后面開(kāi)中斷后不會(huì)產(chǎn)生假中斷。這個(gè)文件包含了由目標(biāo)機(jī)體系構(gòu)造決定,及系統(tǒng)關(guān)于c程序。這些c程序供應(yīng)板級(jí)接口。這些接口,vxworks與應(yīng)用程序軟件構(gòu)造及系統(tǒng)無(wú)關(guān)。該文件功能包括:定義了rram,sram,rom,外部片選IC物理地址與虛擬地址;定義中斷優(yōu)先級(jí)寄存器中各個(gè)位對(duì)應(yīng)優(yōu)先級(jí);調(diào)用syshwinit()初始化串口與網(wǎng)口,安裝irq/svc中斷堆棧分配程序;總線中斷功能等。本文件中有兩個(gè)顯要函數(shù):syshwinit()與syshwinit2()。syshwinit()源代碼如下:
  syshwinit2()用來(lái)連接系統(tǒng)中斷,安裝isr,進(jìn)行其他設(shè)置。它在初始化系統(tǒng)時(shí)鐘時(shí),由sysclkconnect()調(diào)用,主要用來(lái)初始化中斷庫(kù)與中斷軟件驅(qū)動(dòng),安裝系統(tǒng)時(shí)鐘與輔助時(shí)鐘中斷對(duì)及串口等設(shè)備中斷。
4 編譯生成映像
  系統(tǒng)定制完成后,有兩種編譯方法:一種是在tornado下進(jìn)行編譯,生成映像文件;另一種是直接用make工具編譯,但要寫(xiě)好腳本文件。裝載到目標(biāo)板中vxworks映像取決于運(yùn)用下載方法,其中主要包括對(duì)下多種:
  ①vxworks。這是ram映像,vxworks需通過(guò)目標(biāo)板上引導(dǎo)程序從串口或網(wǎng)口把它下載到目標(biāo)板ram中啟動(dòng)。在tornado研發(fā)環(huán)境下,這是一個(gè)默認(rèn)選項(xiàng),主要用在調(diào)試階段。運(yùn)用宿主機(jī)上windsh工具與符號(hào)表。
  ②vxworks.st。這也是ram映像,需通過(guò)引導(dǎo)rom把vxworks映像下載到目標(biāo)機(jī)內(nèi)存中才能執(zhí)行。該對(duì)象文件內(nèi)置符號(hào)表。
  ③vxworks_rom。這是一個(gè)非壓縮,rom映像。在這個(gè)對(duì)象文件執(zhí)行前,先把自己拷貝到目標(biāo)機(jī)ram中。這種種類(lèi)映像通常在運(yùn)行階段速度相比較慢,因?yàn)樵创a在rom中執(zhí)行,但執(zhí)行階段比rom駐留型映像要快。
  ④vxworks.st_rom。這是rom壓縮vxworks映像。它在執(zhí)行前先把自己解壓并拷貝到目標(biāo)機(jī)ram中執(zhí)行。
  ⑤vxworks.res_rom。這是rom駐留型非壓縮vxworks映像。它在執(zhí)行前把數(shù)據(jù)段拷貝到目標(biāo)機(jī)ram中。這種種類(lèi)映像在運(yùn)行階段相比較快,但在目標(biāo)機(jī)上執(zhí)行速度比rom種類(lèi)映像慢(因?yàn)閏pu訪問(wèn)rom比訪問(wèn)ram要慢)。通常在ram空間相比較小目標(biāo)機(jī)上運(yùn)用這種種類(lèi)映像。
5 需注意難題
  首先,應(yīng)該避免在rominit.s中進(jìn)行過(guò)多初始化操作方法。該史件中僅僅是進(jìn)行必要最小硬件初始化,大部分硬件初始化都是在syshwinit()中完成。另外,romtnit.s中源代碼不應(yīng)當(dāng)被其他模塊或函數(shù)調(diào)用。
  其次,應(yīng)該避免sysalib.s中工作太少。bsp研發(fā)人員通常錯(cuò)誤地認(rèn)為在rominit.s里初始化過(guò)設(shè)備不需在sysalib.s中從新初始化。實(shí)際上,vxworks映像并不認(rèn)為它是由引導(dǎo)映像程序引導(dǎo),因此,它必須從新設(shè)置與初始化所有它自己需運(yùn)用設(shè)備。sysinit()是該文件中最主要一個(gè)函數(shù),也是第一個(gè)函數(shù)。該例程中很多工作及rominit()是相同,目是保證內(nèi)核映像在啟動(dòng)及冷運(yùn)行時(shí),軟硬件環(huán)境高度一致。
  最后,對(duì)特定bsf。軟件驅(qū)動(dòng)程序修改,僅僅能在特定bsp目錄下。此設(shè)計(jì)方案中目錄為target/config/integra-tor920t,不要直接在target/src/drv對(duì)及target/h/drv中修改。僅僅有風(fēng)河公司源程序才能存放在這些目錄下。
6 結(jié)論
  本文在說(shuō)明bsp理念,用處與vxworks映像類(lèi)別對(duì)及系統(tǒng)運(yùn)行過(guò)程基礎(chǔ)上,對(duì)atmel公司生產(chǎn)arm9處理器at91rm9200為例,重點(diǎn)說(shuō)明了vxworksbsp設(shè)計(jì)方案中需修改幾個(gè)顯要文件,最后提出了需注意難題。盡管目標(biāo)板硬件不同,bsp解決方案也不盡相同,但基本思想是一樣。本設(shè)計(jì)方案對(duì)各類(lèi)研發(fā)板系統(tǒng)移植與后續(xù)應(yīng)用程序軟件研發(fā)有一定參考價(jià)值
]]>
VxWorks實(shí)時(shí)內(nèi)核調(diào)度的研究分析http://www.martymets.com/bbs/dispbbs.asp?BoardID=11&ID=1414&Page=1wangxinxin2010-11-17 10:30:34點(diǎn)擊看原圖


圖2  引入中級(jí)調(diào)度的進(jìn)程調(diào)度的調(diào)度隊(duì)列模型


      4  VxWorks 實(shí)時(shí)內(nèi)核Wind 調(diào)度分析Wind 內(nèi)核缺省調(diào)度機(jī)制為基于優(yōu)先級(jí)的搶占式調(diào)度。采用這種機(jī)制時(shí),系統(tǒng)把處理機(jī)分配給優(yōu)先級(jí)最高的進(jìn)程,使之執(zhí)行。一旦出現(xiàn)了另一個(gè)優(yōu)先級(jí)更高的進(jìn)程時(shí),進(jìn)程調(diào)度程序剝奪當(dāng)前任務(wù)的執(zhí)行,將處理機(jī)分配給高優(yōu)先級(jí)任務(wù)。而在相同優(yōu)先級(jí)的多個(gè)任務(wù)之間,采用時(shí)間片輪
轉(zhuǎn)調(diào)度機(jī)制。采用這種機(jī)制時(shí),當(dāng)一個(gè)任務(wù)到達(dá)時(shí),它被排在輪轉(zhuǎn)隊(duì)列的后面,等待分配給自己的間片的到來(lái),如果在時(shí)間片內(nèi)沒(méi)有結(jié)束,則再等待屬于自己的時(shí)間片的到來(lái),直到任務(wù)完成。


      4. 1  基于優(yōu)先級(jí)的搶占式調(diào)度
     采用基于優(yōu)先級(jí)的搶占式調(diào)度,系統(tǒng)中每個(gè)任務(wù)都有一個(gè)介于最高0 到最低255 之間的優(yōu)先級(jí)。任一時(shí)刻,系統(tǒng)內(nèi)核一旦發(fā)現(xiàn)一個(gè)優(yōu)先級(jí)更高的任務(wù)轉(zhuǎn)變?yōu)榫途w態(tài),內(nèi)核就保存當(dāng)前任務(wù)的上下文并把當(dāng)前任務(wù)狀態(tài)轉(zhuǎn)換為阻塞態(tài),同時(shí)切換到這個(gè)高優(yōu)先級(jí)任務(wù)的上下文執(zhí)行。如圖3 ,低優(yōu)先級(jí)的task1 被中優(yōu)先級(jí)的task2 搶占,task2又被高優(yōu)先級(jí)的task3 搶占。

點(diǎn)擊看原圖


圖3  基于優(yōu)先級(jí)的搶占式調(diào)度


      4. 2  輪轉(zhuǎn)調(diào)度算法
     采用輪轉(zhuǎn)調(diào)度算法,系統(tǒng)讓處于就緒態(tài)的優(yōu)先級(jí)相同的一組任務(wù)依次輪流執(zhí)行預(yù)先確定長(zhǎng)度的時(shí)間片。這是一種處理機(jī)平均分配的方法。如果不使用輪轉(zhuǎn)調(diào)度算法,優(yōu)先級(jí)相同的一組任務(wù)中第一個(gè)獲得處理機(jī)的任務(wù)將不會(huì)被阻塞而獨(dú)占處理機(jī),如果沒(méi)有阻塞或其他情況發(fā)生,它不會(huì)放棄處理機(jī)的使用權(quán)。如圖4 , 相同優(yōu)先級(jí)的task1 、task2 和task3 平均分配預(yù)先確定的處理機(jī)時(shí)間片。

點(diǎn)擊看原圖


圖4  優(yōu)先級(jí)相同輪轉(zhuǎn)調(diào)度


      4. 3  基于優(yōu)先級(jí)的搶占式調(diào)度與輪轉(zhuǎn)調(diào)度相結(jié)合有時(shí),基于優(yōu)先級(jí)的搶占式調(diào)度可與輪轉(zhuǎn)調(diào)度相結(jié)合。當(dāng)優(yōu)先級(jí)相同的一組任務(wù)依次輪流平均分配處理機(jī)時(shí),若有高優(yōu)先級(jí)的任務(wù)轉(zhuǎn)變?yōu)榫途w態(tài)則可搶占該組任務(wù)。直到再一次符合執(zhí)行條件時(shí),該組任務(wù)才可再次共享處理機(jī)。如圖5 ,相同優(yōu)先級(jí)的task1 、task2 和task3 輪流占有處理機(jī)時(shí),高于該組優(yōu)先級(jí)的task4 搶占處理機(jī),等task4執(zhí)行結(jié)束,該組任務(wù)再次共享處理機(jī)。


VxWorks實(shí)時(shí)內(nèi)核調(diào)度的研究分析]]>
主站蜘蛛池模板: 会理县| 和平区| 牟定县| 离岛区| 南岸区| 天津市| 类乌齐县| 屯门区| 普安县| 新蔡县| 苏州市| 拉萨市| 当涂县| 弥渡县| 庆城县| 杨浦区| 绩溪县| 株洲县| 拉孜县| 沂南县| 余干县| 囊谦县| 汉沽区| 娱乐| 乌兰浩特市| 长汀县| 临江市| 灌云县| 东丰县| 兰西县| 庆阳市| 南乐县| 谷城县| 通道| 仁化县| 花莲县| 虹口区| 许昌县| 万山特区| 余江县| 洪江市|