摘 要:嵌入式PC安裝一般是嵌入到其他設(shè)備或系統(tǒng)中,所以體積、功耗、抗震性等方面的特殊要求使其硬件環(huán)境與標(biāo)準(zhǔn)PC有所區(qū)別:其內(nèi)存較小、無(wú)硬盤(pán)、甚至無(wú)顯示功能或由遠(yuǎn)端的控制終端進(jìn)行顯示,因此視窗操作系統(tǒng)的強(qiáng)大功能發(fā)揮不出來(lái),則DOS以其內(nèi)核小、操作簡(jiǎn)單、實(shí)時(shí)性強(qiáng)就在嵌入式PC領(lǐng)域中占有重要地位。然而,DOS操作系統(tǒng)缺乏類(lèi)似Winsock的API,所以在該系統(tǒng)下設(shè)計(jì)基于TCP/IP協(xié)議的應(yīng)用程序時(shí)難度較大,結(jié)合實(shí)例闡述基于DOS下的嵌入式系統(tǒng)中實(shí)現(xiàn)SOCKET通信的一種具體方法和過(guò)程。
關(guān)鍵詞:嵌入式系統(tǒng);DOS;TCP/IP;SOCKET
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1004373X(2008)1609202
Realization of Embedded PC Based on SOCKET Communication in DOS
ZHOU Yun, LU Qingqi
(Electronic Information Engineering Institute,Xi′an Industrial University,Xi′an,710032,China)
Abstract:The embedded PC installment is generally inserted to other equipment or the system,therefore,volume,power loss,antiknocking property special requests cause its hardware environment and standard PC have the differences:its memory is small,does not have the hard disk,even does not have the demonstration function or carries on the demonstration by the farend control terminal.Windows operating system's formidable function cannot display,then DOS is small by its essence,the simplicity of operator,timeliness hold the important position in the embedded PC domain.However,the DOS operating system lacks similar Winsock API,designs under this system based on TCP/IP agreement application procedure the difficulty is big,this article unifies the example to elaborate inserted in the type system based on DOS to realize the SOCKET correspondence.
Keywords:embedded system;DOS;TCP/IP;SOCKET
1 引 言
隨著科學(xué)技術(shù)的進(jìn)步與發(fā)展,嵌入式系統(tǒng)在工業(yè)控制等領(lǐng)域的應(yīng)用也越來(lái)越廣泛,其功能和規(guī)模日益擴(kuò)大,那么在這信息的時(shí)代里,設(shè)計(jì)具有網(wǎng)絡(luò)功能的嵌入式系統(tǒng)是一個(gè)重要的發(fā)展方向。
嵌入式PC與標(biāo)準(zhǔn)PC架構(gòu)相同,采用相同的操作系統(tǒng)和軟件開(kāi)發(fā)平臺(tái),如Windows NT,Win CE,Linux,DOS等,但嵌入式PC安裝一般是嵌入到其他設(shè)備或系統(tǒng)中,所以體積、功耗、抗震性等方面的特殊要求使其硬件環(huán)境與標(biāo)準(zhǔn)PC有所區(qū)別:其內(nèi)存較小、無(wú)硬盤(pán)、甚至無(wú)顯示功能或由遠(yuǎn)端的控制終端進(jìn)行顯示。
因此視窗操作系統(tǒng)的強(qiáng)大功能發(fā)揮不出來(lái),那么DOS以其內(nèi)核小、操作簡(jiǎn)單、實(shí)時(shí)性強(qiáng)就在嵌入式PC領(lǐng)域中占有重要地位。然而,在 DOS操作系統(tǒng)缺少類(lèi)似Windows環(huán)境下WinSock這樣簡(jiǎn)單易用的API,使得在DOS下開(kāi)發(fā)編制網(wǎng)絡(luò)程序難度大。
2 TCP/IP協(xié)議
TCP/IP是一種常用的網(wǎng)絡(luò)協(xié)議。它是一種通用的網(wǎng)絡(luò)互聯(lián)技術(shù),即網(wǎng)絡(luò)間物理和邏輯的連接。網(wǎng)絡(luò)互聯(lián)的目標(biāo)是建立一個(gè)同一的、協(xié)作的、提供通用服務(wù)的通信系統(tǒng),具體方法是:在低層網(wǎng)絡(luò)技術(shù)和高層網(wǎng)絡(luò)技術(shù)之間增加一個(gè)中間軟件,這個(gè)軟件就是TCP/IP協(xié)議。
TCP/IP協(xié)議分為4層:鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層,其核心部分是傳輸層協(xié)議(TCP和UDP)、網(wǎng)絡(luò)層協(xié)議(IP)和物理接口層,這3層通常在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)。操作系統(tǒng)內(nèi)核是不能直接與用戶打交道的,必須通過(guò)一定的用戶界面即SOCKET實(shí)現(xiàn)。網(wǎng)間應(yīng)用程序之間的作用方式為客戶機(jī)/服務(wù)器模式。TCP/IP協(xié)議核心與應(yīng)用程序的關(guān)系如圖1所示。
3 SOCKET編程技術(shù)[3]
一個(gè)完整的網(wǎng)間進(jìn)程通信需要由2個(gè)進(jìn)程組成,并且只能使用同一種高層協(xié)議。因此需要一個(gè)5元組來(lái)表示,即協(xié)議、本地地址、本地端口號(hào)、遠(yuǎn)地地址、遠(yuǎn)地地址號(hào)。這樣一個(gè)5元組叫作1個(gè)相關(guān),即2個(gè)協(xié)議相同的半相關(guān)才能組成一個(gè)合適的相關(guān)。圖2是一個(gè)典型的TCP套接口對(duì)話,它采用客戶/服務(wù)器模式,由服務(wù)器先建立自己的半相關(guān)并進(jìn)入監(jiān)聽(tīng)狀態(tài),看是否有與本端口連接的請(qǐng)求??蛻舳嗽诮⒑米约旱陌胂嚓P(guān)后向服務(wù)器端發(fā)起請(qǐng)求連接,服務(wù)器端在檢測(cè)到連接后響應(yīng)連接,這樣就建立了一個(gè)連接。
4 DOS下SOCKET的實(shí)現(xiàn)
利用NETWORK CLIENT FOR DOS驅(qū)動(dòng),設(shè)計(jì)出一組可滿足TCP/IP的數(shù)據(jù)傳輸需要的函數(shù)即可。
4.1 網(wǎng)卡安裝
進(jìn)行網(wǎng)卡驅(qū)動(dòng)程序的安裝,進(jìn)行TCP/IP協(xié)議的驅(qū)動(dòng),在config.sys中加入擴(kuò)充內(nèi)存的支持,并將DOS駐留到高端。config.sys文件如下:
device=himem.sys
device=c:\\\\dos\\\\emm386.exe noems
dos=high,umb
files=30
buffers=15,0
4.2 網(wǎng)絡(luò)編制方法
在工程文件中加入DOSSOCKETS.LIB,程序中加入DSOCKETS.H和DSOCKETSDEF.H。編程中用到的相關(guān)函數(shù)有:
socket(int,int,int,int far*); 建立套接字
ioctl(int,int,char far*,int far*);控制套接口的操作特性
bind(int,struct sockaddr far*,int,int far*);為套接口聯(lián)系一個(gè)名字;使服務(wù)器指定網(wǎng)絡(luò)
接口,從該接口接受連續(xù)請(qǐng)求
connect(int,struct sockaddr far*,int,int far*);在兩個(gè)套接口之間建立連接
closesock(int,int far*);關(guān)閉套接口
send(int,char far*,int,int,struct sockaddr far*,int,int far*);向套接口寫(xiě)數(shù)據(jù)
recv(int,char far*,int,int,struct sockaddr far*,int,int
far*);接收套口數(shù)據(jù)
5 應(yīng)用實(shí)例
系統(tǒng)采用100 Mb/s帶寬的快速以太網(wǎng)、100 Mb/s的交換機(jī)及數(shù)據(jù)庫(kù)服務(wù)器等。本分系統(tǒng)的
監(jiān)控主機(jī)的硬件平臺(tái)采用PC104嵌入式PC機(jī),帶有網(wǎng)卡、多串口卡、1553B卡、DI/O卡、電子盤(pán)卡等,軟件平臺(tái)為DOS。監(jiān)控主機(jī)對(duì)本系統(tǒng)各設(shè)備進(jìn)行實(shí)時(shí)監(jiān)控并及時(shí)上報(bào)管理計(jì)算機(jī);利用高速以太網(wǎng)接收信息完成對(duì)伺服系統(tǒng)的控制。具體實(shí)現(xiàn)為首先利用板卡廠家提供的網(wǎng)絡(luò)驅(qū)動(dòng)程序和NETWORK CLIENT FOR DOS驅(qū)動(dòng)TCP/IP,然后利用DOSSOCKETS.LIB編制應(yīng)用程序,軟件具體實(shí)現(xiàn)采用中斷方式接收,接收頻率為20次/s。
主程序如下:
main()
{
…
sd=sockets(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
sa.sin_port=port;//設(shè)置本地IP地址
sa.sin_family=AF_INET;
sa.sin_addr.s_addr=ntohl(HOSTIP);
ioctl(sd,F(xiàn)IONBIO,rti);//設(shè)置IO模式
bind(sd,(PSOCKADDR)sa,sizeof(sa));
…
old=getvect(0x0c);
setvect(0x0c,cint);
imr=inp(0x21);
outp(0x21,imr0xef);
…
for()
{
與各設(shè)備進(jìn)行數(shù)據(jù)交換,將公用數(shù)據(jù)放入公用緩存;
從recvbuf數(shù)據(jù)組里將接收IP數(shù)據(jù)包存入緩存;數(shù)據(jù)處理;
將處理后的數(shù)據(jù)存入sendbuf數(shù)組中;
}
imr=inp(0x21);
outp(0x21,imr|0x10);
setvect(0x0c,old);
closesocket(sd);
}
中斷處理程序:
void interrupt cint()
{
if(符合接收條件)
{ …
lanle=recv(sd,recvbuf”[0],300,0,(struct sockaddr*)recv,recvlen);
…
send(sd,sendbuf[0],50,0,(struct sockaddr*)send,sendlen);
… }
outp(0x20,0x64); }
由此可見(jiàn),在此驅(qū)動(dòng)下編寫(xiě)捕獲IP包程序很方便。在創(chuàng)建SOCKET后,將套接字與本地地址綁定就可按需求接受IP數(shù)據(jù)包并處理之。
6 結(jié) 語(yǔ)
目前,DOS在標(biāo)準(zhǔn)PC機(jī)中已經(jīng)很少使用,但在嵌入式PC中卻是主流操作系統(tǒng)。在DOS下實(shí)現(xiàn)基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信比較復(fù)雜、繁瑣,上述的方法簡(jiǎn)潔有效地解決了這一問(wèn)題,并在某工程通信軟件中得到了驗(yàn)證、取得了良好的效果。
參 考 文 獻(xiàn)
[1]羅軍舟,黎波濤.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2004.
[2]譚獻(xiàn)海.網(wǎng)絡(luò)編程技術(shù)及應(yīng)用[M].北京:清華大學(xué)出版社,2006.
[3]任泰明.TCP/IP協(xié)議與網(wǎng)絡(luò)編程[M].西安:西安電子科技大學(xué)出版社,2004.
[4]方敏.網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,2005.
[5]郭學(xué)理,張健.網(wǎng)絡(luò)程序設(shè)計(jì)[M].武漢:武漢大學(xué)出版社,
2004.
[6]劉鐘情,曾維魯,任小燕.嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)研究與設(shè)計(jì)\\.現(xiàn)代電子技術(shù),2007,30(14):5051.
作者簡(jiǎn)介 周 蕓 1966年出生,陜西西安人,副教授。主要從事電子信息與自動(dòng)控制方面的教學(xué)和研究工作。