版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 VxWorks應(yīng)用開發(fā)實(shí)驗(yàn)指導(dǎo)三TSINGHUA實(shí)驗(yàn)1.編寫基于socket的通信程序?qū)嶒?yàn)2.生成一個(gè)支持dosFs的VxWorks映像實(shí)驗(yàn)3設(shè)計(jì)基于TCP的通信程序?qū)嶒?yàn)4.一個(gè)以網(wǎng)卡驅(qū)動(dòng)程序分析TSINGHUA實(shí)驗(yàn)/.編寫基于socket的通信程序?qū)嶒?yàn)?zāi)康模菏煜ぞW(wǎng)絡(luò)通信原理和實(shí)現(xiàn)方法學(xué)習(xí)使用socket編程實(shí)驗(yàn)步驟:實(shí)驗(yàn)基礎(chǔ)回顧案例分析自行設(shè)計(jì)一個(gè)使用socket通信的程序TSINGHUAVxWorks網(wǎng)絡(luò)架構(gòu)TSINGHUASocketTSINGHUASocket #TSINGHUA 用于識(shí)別最終的目的地IP地址用于識(shí)別主機(jī)主機(jī)上有很多應(yīng)用Ports(16-bit識(shí)別符)1-65,535
2、TSINGHUARFC1700規(guī)定常用端口號(hào)從0到1023,1024到49151是已注冊的端口號(hào)。常見服務(wù)協(xié)議的端口telnet(23)ftp(21)SMTP(25)http(80)套接字Integer-Sockets向TCP/IP提供接口連接用戶程序和協(xié)議棧Sockets也為其他多種協(xié)議提供通用接口TSINGHUA由協(xié)議和本地/遠(yuǎn)端地址/端口識(shí)別一個(gè)應(yīng)用可以指向多個(gè)socketsSockets可以被多個(gè)應(yīng)用操作五元組TOC o 1-5 h zSIPDIPSSDSProtocolNO. # TSINGHUA #TSINGHUAVxWorkssocketsVxWorks實(shí)現(xiàn)了與BSD4.4TCP
3、/IP兼容的sockets編程接口VxWorks目前支持3種套接字?jǐn)?shù)據(jù)報(bào)套接字:支持雙向的數(shù)據(jù)流,但不保證數(shù)據(jù)傳送的可靠性、有序性和無重復(fù)(SOCK_DGRAM)流套接字:提供雙向的、有序的、無重復(fù)并且無記錄邊界的數(shù)據(jù)服務(wù)(SOCK_STREAM)裸層套接字:直接構(gòu)建在IP協(xié)議上的(SOCK_RAW)TSINGHUAVxWorks套接字描述符與文件操作一樣,每個(gè)套接字在創(chuàng)建時(shí)都生成一個(gè)套接字描述符該套接字描述符是在文件描述符表中的索引值該套接字描述符在描述符表中的表項(xiàng)并不指向文件表,而是指向一個(gè)與該套接字有關(guān)的數(shù)據(jù)結(jié)構(gòu)TSINGHUA套接字中的客戶棚服務(wù)器模型TSINGHUA套接字中的客戶棚服
4、務(wù)器模型 #TSINGHUA #使用客戶機(jī)/服務(wù)器模型進(jìn)行編程時(shí),服務(wù)器端有一個(gè)任務(wù)在指定的端口等待客戶來連接,一旦連接上之后,就可以按設(shè)計(jì)的數(shù)據(jù)交換方法和格式進(jìn)行數(shù)據(jù)傳送客戶端在需要的時(shí)刻向服務(wù)器發(fā)出連接請(qǐng)求TSINGHUA客戶/服務(wù)器模型TSINGHUACONNECTTSINGHUACONNECT # #TSINGHUA應(yīng)用創(chuàng)建流程描述 TSINGHUACONNECTTSINGHUACONNECT #TSINGHUA應(yīng)用創(chuàng)建流程描述 #TSINGHUA創(chuàng)建SOCKETIntsocket(domain,type,protocol)創(chuàng)建一個(gè)socketSocket可以是面向連接的(TCP=SO
5、CK_STREAM),面向無連接的(UDP=SOCK_DATAGRAM),和原始數(shù)據(jù)(SOCK_RAW)返回一個(gè)socket描述符(文件描述符),便于以后使用socket例子:sd=socket(AF_INET,SOCK_STREAM,0)9AF_INETinternetdomain9SOCK_STREAM規(guī)定SOCK_STREAM使用TCP90規(guī)定協(xié)議類型,一般為0STATUSconnect(ints,structsockaddr*name,intnamelen)在一個(gè)指定的socket上建立一個(gè)連接S:指向一個(gè)已經(jīng)打開的socket描述符Name:是一個(gè)地址結(jié)構(gòu),指向服務(wù)器端的名字9u_c
6、harsa_len整個(gè)地址結(jié)構(gòu)的大小9u_charsa_family地址族(AF_INET)9charsa_data14指向服務(wù)器端的實(shí)際地址TSINGHUAsendIntsend(ints,char*buf,intbuflen,intflags)用于處于連接狀態(tài)的socket,將一個(gè)消息發(fā)送到另一個(gè)socketS:-個(gè)已連接的套接字描述符Buf:待發(fā)送數(shù)據(jù)的緩沖區(qū)Buflen:緩沖區(qū)中數(shù)據(jù)的長度Flags:調(diào)用執(zhí)行方式-如果發(fā)送時(shí)沒有可用的緩存,send就被阻塞TSINGHUAsendtoTSINGHUAsendto # TSINGHUA應(yīng)用創(chuàng)建流程描述 #Intsendto(ints,ca
7、ddr_tbuf,intbuflen,intflags,structsockaddr*to,inttolen)用于不需要處于socket處于連接狀態(tài)的socket,將一個(gè)消息發(fā)送到另一socketS:個(gè)已連接的套接字的描述符Buf:待發(fā)送數(shù)據(jù)的緩沖區(qū)Buflen:緩沖區(qū)中數(shù)據(jù)的長度Flags:調(diào)用執(zhí)行的方式To:指向目的套接字的地址Tolen:to所指向的地址的長度TSINGHUArecvIntrecv(ints,char*buf,intbuflen,intflags)從一個(gè)已經(jīng)連接的socket處接收數(shù)據(jù)S:從s所指向的socket接收數(shù)據(jù)Buf:接收到的數(shù)據(jù)所存放的緩沖區(qū)Buflen:數(shù)據(jù)
8、緩沖區(qū)的長度Flags:調(diào)用執(zhí)行的方式返回值為實(shí)際接收到的數(shù)據(jù)的長度如果沒有消息到來,recv就被阻塞 #TSINGHUA應(yīng)用創(chuàng)建流程描述 #tsinghuarecvfromIntrecvfrom(ints,char*buf,intbuflen,intflags,structsockaddr*from,int*pFromLen)從一socket接收數(shù)據(jù),不管該socket是否是面向連接S:從s所指向的socket接收數(shù)據(jù)Buf:接收到的數(shù)據(jù)所存放的緩沖區(qū)Buflen:數(shù)據(jù)緩沖區(qū)的長度Flags:調(diào)用執(zhí)行的方式From:發(fā)送方地址pFormLen:發(fā)送方地址的長度返回值為實(shí)際接收到的數(shù)據(jù)長度TS
9、INGHUAbindSTATUSbind(ints,structsockaddr*name,intnamelen)將一個(gè)名字綁定到一個(gè)socket上,為一個(gè)未命名的socket分配一個(gè)名字,該名字中包含本地的地址S:套接字描述符Name:要綁定給套接字的名字Namelen:名字的長度TSINGHUATSINGHUA #TSINGHUAlisten STATUSlisten(ints,intbacklog)讓socket對(duì)連接進(jìn)行偵聽S:套接字描述符Backlog:可以排隊(duì)等待的最大連接數(shù)Listen只能用于SOCK_STREAM或SOCK_SEQPACKET類型的socket上TSINGHUA
10、acceptIntaccept(ints,structsockaddr*addr,int*addrlen)在指定的socket上接受一個(gè)連接S:套接字描述符。該socket是由socket調(diào)用創(chuàng)建,由bind調(diào)用綁定到一個(gè)地址上,再由listen調(diào)用的socketAddr:用于存放調(diào)用返回的地址信息Addrlen:保存addr的精確長度一起分析一個(gè)使用socket的程序請(qǐng)你設(shè)計(jì)一個(gè)使用socket的程序要求:必須使用socket建議使用C/S結(jié)構(gòu)A必須有輸出顯示通信過程TSINGHUA自己動(dòng)手豐衣足食 # TSINGHUAlisten #實(shí)驗(yàn)2生成一個(gè)支持osFs的VxWorks映像實(shí)驗(yàn)?zāi)康模?/p>
11、A熟悉VxWorks的文件系統(tǒng)學(xué)會(huì)在系統(tǒng)映像中加入文件系統(tǒng)編譯生成映像實(shí)驗(yàn)步驟:恢復(fù)記憶編寫代碼編譯生成支持dosFs的imageTSINGHUA文件系統(tǒng)接口TSINGHUA本地文件系統(tǒng)TSINGHUA本地文件系統(tǒng) #TSINGHUAlisten #VxWorks包括多種使用塊設(shè)備(磁盤)的本地文系統(tǒng)VxWorks的I/O結(jié)構(gòu)使VxWorks可以同時(shí)有多種文件系統(tǒng):MS-DOS兼容文件系統(tǒng):dosFs9功能強(qiáng)大RT-11兼容文件系統(tǒng):rtllFs9無分層文件組織結(jié)構(gòu),文件連續(xù)原始磁盤文件系統(tǒng):rawFs9整個(gè)磁盤作為一個(gè)文件SCSI序列文件系統(tǒng):tapeFs9磁帶的一卷作為一個(gè)文件CD_ROM
12、文件系統(tǒng):cdromFs9ISO9660TSINGHUATSINGHUA # #TSINGHUA創(chuàng)建舉例 TSINGHUATSINGHUA TSINGHUA創(chuàng)建舉例 #Image插入點(diǎn)TSINGHUAbootConfig.cusrRoot()編寫代碼編譯生成支持dosFs的image光說不練,不是英雄好漢TSINGHUA實(shí)驗(yàn)3.設(shè)計(jì)基于TCP的通信程序?qū)嶒?yàn)?zāi)康耐瓿梢粋€(gè)簡單的TCP通信系統(tǒng)檢驗(yàn)通信的結(jié)果學(xué)會(huì)VxWorks網(wǎng)絡(luò)通信程序設(shè)計(jì)認(rèn)識(shí)客戶/服務(wù)器編程和協(xié)議棧編程接口實(shí)驗(yàn)步驟:基于實(shí)驗(yàn)1設(shè)計(jì)一個(gè)程序9要求基于TCP9設(shè)計(jì)使用C/S結(jié)構(gòu)9顯示通信的過程和結(jié)果設(shè)計(jì)一個(gè)程序9要求基于rawSock
13、et9設(shè)計(jì)使用C/S結(jié)構(gòu)9顯示數(shù)據(jù)包的全部內(nèi)容9比較TCP程序收發(fā)數(shù)據(jù)結(jié)構(gòu)實(shí)例分析A注意rawsocket的使用自己動(dòng)手豐衣足食TSINGHUA實(shí)驗(yàn)/.一個(gè)以網(wǎng)卡驅(qū)動(dòng)程序分析本實(shí)驗(yàn)可以在下一章完成后做實(shí)驗(yàn)?zāi)康模浩饰鲋袛鄼C(jī)制、中斷處理中斷服務(wù)例程的實(shí)現(xiàn)掌握VxWorks中斷的處理和使用認(rèn)識(shí)和使用中斷和任務(wù)間的通信實(shí)驗(yàn)步驟:實(shí)驗(yàn)基礎(chǔ)回顧分析驅(qū)動(dòng)程序加載網(wǎng)卡實(shí)驗(yàn) TSINGHUA創(chuàng)建舉例 #TSINGHUAMUX、協(xié)議層和END的調(diào)用接口stackShutdownRtn()stackRcvRtn()stackError()stackTxRestartRtn()muxBind()muxUnbind()
14、muxDevLoad()muxDevUnload()muxRecieve()muxError()muxSend()muxTxRestartRtn()muxMCastAddrDel()muxMCastAddrGet()muxPollSend()muxMCastAddrAdd()muxPollReceive()muxIoctl()協(xié)議MUXendLoad()endUnload()endSend()endTxRestartRtn()endMCastAddrDel()endMCastAddrGet()endPollSend()endMCastAddrAdd()endPollReceive()endIo
15、ctl()endStart()endStop()ENDTSINGHUAMUX、協(xié)議層禾END的調(diào)用接口stackShutdownRtn()stackRcvRtn()stackError()stackTxRestartRtn()muxBind()muxUnbind()muxDevLoad()muxDevUnload()muxRecieve()muxError()muxSend()muxTxRestartRtn()muxMCastAddrDel()muxMCastAddrGet()muxPollSend()muxMCastAddrAdd()muxPollReceive()muxIoctl()end
16、Load()endUnload()endSend()endTxRestartRtn()endMCastAddrDel()endMCastAddrGet()endPollSend()endMCastAddrAdd()endPollReceive()endIoctl()endStart()endStop()協(xié)議MUXEND # TSINGHUA創(chuàng)建舉例 #驅(qū)動(dòng)程序的開發(fā)接口設(shè)計(jì)初始化中斷服務(wù)程序設(shè)計(jì)TSINGHUAEND函數(shù)實(shí)現(xiàn)引導(dǎo)例程:引導(dǎo)整個(gè)驅(qū)動(dòng)程序,初始化驅(qū)動(dòng)程序和設(shè)備,并將驅(qū)動(dòng)程序和設(shè)備設(shè)置到工作狀態(tài);中斷服務(wù)例程:對(duì)發(fā)至CPU的網(wǎng)絡(luò)事件通過中斷處理,如數(shù)據(jù)發(fā)送、數(shù)據(jù)收,這些事件對(duì)應(yīng)了相應(yīng)
17、的中斷服務(wù)例程;設(shè)備系統(tǒng)級(jí)函數(shù):在一個(gè)回調(diào)函數(shù)的數(shù)據(jù)結(jié)構(gòu)中定義,高層的協(xié)議通過MUX層定義的函數(shù)來調(diào)用這些回調(diào)函數(shù)。這些函數(shù)實(shí)現(xiàn)的功能如下:釋放驅(qū)動(dòng)程序的資源;啟動(dòng)和停止驅(qū)動(dòng)程序;將網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送到設(shè)備上;訪問驅(qū)動(dòng)程序的控制函數(shù);增加、刪除以及獲得組播地址;輪循方式發(fā)送和接收數(shù)據(jù)包;管理網(wǎng)絡(luò)地址和網(wǎng)絡(luò)緩存中的數(shù)據(jù)。增強(qiáng)功能的函數(shù):支持特殊設(shè)備的特定功能TSINGHUA網(wǎng)絡(luò)任務(wù)初始化過程3)TSINGHUA網(wǎng)絡(luò)任務(wù)初始化過程3) # TSINGHUA網(wǎng)絡(luò)任務(wù)初始化過程1) 首先,執(zhí)行MUX層的引導(dǎo)程序。利用VxWorks的根任務(wù)tUsrRoot初始化網(wǎng)絡(luò)任務(wù)的工作隊(duì)列。然后,VxWorks產(chǎn)生一
18、個(gè)tNetTask任務(wù)來處理網(wǎng)絡(luò)任務(wù)工作隊(duì)列中的第一個(gè)任務(wù):網(wǎng)絡(luò)設(shè)備的建立。tNetTask任務(wù)調(diào)用muxDevLoad()來裝載網(wǎng)絡(luò)接口驅(qū)動(dòng)程序。在驅(qū)動(dòng)中已經(jīng)定義了網(wǎng)絡(luò)驅(qū)動(dòng)設(shè)備的xxendLoad()接口函數(shù),muxDevLoad()調(diào)用xxendLoad()。xxendLoad()執(zhí)行設(shè)備初始化以及END_OBJ結(jié)構(gòu)體的初始化。MUX通過在END_OBJ上加一個(gè)指針,指向能完成將數(shù)據(jù)包向MUX上層發(fā)送的功能函數(shù)。然后MUX把返回的END_OBJ加到END_OBJ結(jié)構(gòu)鏈表中。這個(gè)鏈表包括目前系統(tǒng)中所有可用的網(wǎng)絡(luò)設(shè)備。當(dāng)從muxDevLoad()返回后,網(wǎng)絡(luò)設(shè)備就準(zhǔn)備好可以使用了。TSINGH
19、UA網(wǎng)絡(luò)任務(wù)初始化過程2)然后,調(diào)用特定網(wǎng)絡(luò)設(shè)備的初始化函數(shù)xxxxlnit(),來初始化本網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)接口。xxxxlnit()函數(shù)是一個(gè)與硬件相關(guān)的函數(shù),需要我們根據(jù)硬件所采用的芯片,初始化接收發(fā)送的緩存鏈表,還有例如:MAC地址表、MAC層寄存器、DMA寄存器、物理層和中斷寄存器等接口的初始化。接著執(zhí)彳丁MUX層的啟動(dòng)函數(shù)muxDevStart()。當(dāng)通過muxDevLoad()裝載網(wǎng)絡(luò)接口設(shè)備時(shí),就會(huì)調(diào)用muxDevStart()來啟動(dòng)該設(shè)備。muxDevStart()將調(diào)用END層的endStart(),從而進(jìn)行中斷處理程序的注冊并使能中斷激活這個(gè)設(shè)備。最后通過調(diào)用ipAttach()函數(shù)連接IP協(xié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能家居加盟品牌授權(quán)合同3篇
- 二零二五年度新能源儲(chǔ)能系統(tǒng)購買合同3篇
- 二零二五年度林業(yè)人才培養(yǎng)合作造林協(xié)議3篇
- 2025年度老舊房屋漏水檢測與賠償專項(xiàng)協(xié)議3篇
- 2025年度股東退出與公司知識(shí)產(chǎn)權(quán)保護(hù)合同3篇
- 二零二五年度模特服裝租賃拍攝合同3篇
- 2025年度房地產(chǎn)公司合伙人項(xiàng)目合作協(xié)議3篇
- 二零二五年度循環(huán)水養(yǎng)殖養(yǎng)魚合作合同3篇
- 2025年度體育場館物業(yè)用房移交及賽事運(yùn)營服務(wù)合同3篇
- 2025年度企業(yè)年會(huì)活動(dòng)宣傳片制作服務(wù)合同模板3篇
- 廣東省深圳市南山區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期末科學(xué)試卷
- 2023北京東城區(qū)初二上期末考?xì)v史試卷及答案
- 急性腦梗死診治指南
- 檢察院分級(jí)保護(hù)項(xiàng)目技術(shù)方案
- 土木工程建筑中混凝土裂縫的施工處理技術(shù)畢業(yè)論文
- 水電站工程地質(zhì)勘察報(bào)告
- 電站屏柜改造安裝二次工程施工組織設(shè)計(jì)
- DB42∕T 1795-2021 微動(dòng)勘探技術(shù)規(guī)程
- 大潤發(fā)的企業(yè)文化
- 兒童劇劇本─三只小豬
- TROXLER3440核子密度儀
評(píng)論
0/150
提交評(píng)論