當(dāng)前位置:首頁(yè) > 消費(fèi)電子 > 消費(fèi)電子
[導(dǎo)讀]本文介紹了通過(guò)案例,首先在觸摸屏進(jìn)行畫(huà)圖,使其在液晶屏上顯示,同時(shí)通過(guò)網(wǎng)絡(luò)傳輸數(shù)據(jù),使其在計(jì)算機(jī)屏幕上顯示,并由計(jì)算機(jī)控制清除液晶屏上的圖形,實(shí)現(xiàn)了基于UDP協(xié)議的ARM、X86平臺(tái)之間的通訊,從而提出了基于UDP協(xié)議的ARM與其它平臺(tái)之間通訊的解決方案。

0 引言

隨著人工智能的應(yīng)用,ARM產(chǎn)品已經(jīng)遍布到各個(gè)領(lǐng)域:工業(yè)控制、無(wú)線通訊領(lǐng)域、消費(fèi)類電子產(chǎn)品、成像和安全產(chǎn)品,包括現(xiàn)在流行的數(shù)碼相機(jī)和打印機(jī)中絕大部分采用ARM技術(shù),手機(jī)中的32位SIM智能卡也采用了ARM技術(shù)。除此以外,ARM微處理器及技術(shù)還應(yīng)用到許多不同的領(lǐng)域,并會(huì)在將來(lái)取得更加廣泛的應(yīng)用,因此,ARM與其它平臺(tái)之間通訊就顯得尤為重要。

1.UDP協(xié)議本質(zhì)

UDP協(xié)議是英文User Datagram Protocol的縮寫(xiě),即用戶數(shù)據(jù)報(bào)協(xié)議,主要用來(lái)支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)在內(nèi)的眾多客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié)議從問(wèn)世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但即使是在今天,UDP仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。

UDP協(xié)議使用端口號(hào)為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。UDP和TCP協(xié)議正是采用這一機(jī)制實(shí)現(xiàn)對(duì)同一時(shí)刻內(nèi)多項(xiàng)應(yīng)用同時(shí)發(fā)送和接收數(shù)據(jù)的支持。數(shù)據(jù)發(fā)送一方(可以是客戶端或服務(wù)器端)將UDP數(shù)據(jù)報(bào)通過(guò)源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過(guò)目標(biāo)端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應(yīng)用只能使用預(yù)先為其預(yù)留或注冊(cè)的靜態(tài)端口;而另外一些網(wǎng)絡(luò)應(yīng)用則可以使用未被注冊(cè)的動(dòng)態(tài)端口。因?yàn)閁DP報(bào)頭使用兩個(gè)字節(jié)存放端口號(hào),所以端口號(hào)的有效范圍是從0到65535.一般來(lái)說(shuō),大于49151的端口號(hào)都代表動(dòng)態(tài)端口。

數(shù)據(jù)報(bào)的長(zhǎng)度是指包括報(bào)頭和數(shù)據(jù)部分在內(nèi)的總的字節(jié)數(shù)。因?yàn)閳?bào)頭的長(zhǎng)度是固定的,所以該域主要被用來(lái)計(jì)算可變長(zhǎng)度的數(shù)據(jù)部分(又稱為數(shù)據(jù)負(fù)載)。數(shù)據(jù)報(bào)的最大長(zhǎng)度根據(jù)工作環(huán)境的不同而各異。從理論上說(shuō),包含報(bào)頭在內(nèi)的數(shù)據(jù)報(bào)的最大長(zhǎng)度為65535字節(jié)。不過(guò),一些實(shí)際應(yīng)用往往會(huì)限制數(shù)據(jù)報(bào)的大小,有時(shí)會(huì)降低到8192字節(jié)。

UDP協(xié)議使用報(bào)頭中的校驗(yàn)值來(lái)保證數(shù)據(jù)的安全。校驗(yàn)值首先在數(shù)據(jù)發(fā)送方通過(guò)特殊的算法計(jì)算得出,在傳遞到接收方之后,還需要再重新計(jì)算。

如果某個(gè)數(shù)據(jù)報(bào)在傳輸過(guò)程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗(yàn)計(jì)算值將不會(huì)相符,由此UDP協(xié)議可以檢測(cè)是否出錯(cuò)。其實(shí)在UDP協(xié)議中校驗(yàn)功能是可選的,如果將其關(guān)閉可以使系統(tǒng)的性能有所提升。這與TCP協(xié)議是不同的,后者要求必須具有校驗(yàn)值。

2.實(shí)現(xiàn)案例

實(shí)現(xiàn)案例如下:在觸摸屏進(jìn)行畫(huà)圖,使其在液晶屏上顯示,同時(shí)通過(guò)網(wǎng)絡(luò)傳輸數(shù)據(jù),使其在計(jì)算機(jī)屏幕上顯示,并由計(jì)算機(jī)控制清除液晶屏上的圖形。

步驟如下:

(1)新建工程

(2)在main.c文件中編輯初始化網(wǎng)絡(luò)函數(shù)void InitNetWork()//初始化網(wǎng)絡(luò){

U32 ipaddr32,ipmaskaddr32,ipgateaddr32;

U8 *Mac;

ipaddr32=Get_ipaddr(); //獲取IP地址

ipmaskaddr32=Get_maskaddr();//獲取子網(wǎng)掩碼

ipgateaddr32=Get_gwaddr(); //獲取網(wǎng)關(guān)

Mac=Get_mac(); //獲取網(wǎng)卡地址NetPortChoose(0);

//選擇網(wǎng)口,必須在配置網(wǎng)絡(luò)以前進(jìn)行

initOSNet(ipaddr32, ipmaskaddr32,

ipgateaddr32,Mac);//配置網(wǎng)絡(luò)

OSTimeDly(1000);//任務(wù)掛起1秒

printk(“init Ethernet and UDP is

ok!\n”);

}

(3)定義計(jì)算機(jī)端套接字,全局變量(4)編寫(xiě)Main_Task任務(wù)及消息循環(huán)主要負(fù)責(zé)響應(yīng)觸摸屏消息,在屏幕上畫(huà)圖,然后將數(shù)據(jù)傳輸?shù)接?jì)算機(jī)上。

對(duì)觸摸屏消息的處理和鍵盤(pán)消息類似,其消息類型pMsg->Message為OSM_TOUCH_SCREEN,消息參數(shù)pMsg->LParam中包含了觸摸屏的動(dòng)作信息,定義如下:

#define TCHSCR_ACTION_NULL

0

#define TCHSCR_ACTION_CLICK 1 //觸摸

屏單擊

#define TCHSCR_ACTION_DBCLICK 2 //觸

摸屏雙擊

#define TCHSCR_ACTION_DOWN 3 //觸摸

屏按下

#define TCHSCR_ACTION_UP 4 //觸摸

屏抬起

#define TCHSCR_ACTION_MOVE 5 //觸摸

屏移動(dòng)

消息參數(shù)pMsg->WParam中則包含了觸摸[!--empirenews.page--]

點(diǎn)的坐標(biāo)信息,低16位是X坐標(biāo)值,高16位是Y坐標(biāo)值。這里當(dāng)觸摸屏產(chǎn)生“按下”動(dòng)作后采用MoveTo()函數(shù)設(shè)置繪圖起始點(diǎn)坐標(biāo),當(dāng)產(chǎn)生“移動(dòng)”動(dòng)作后采用LineTo()函數(shù)繪制線段。

3.解決方案

3.1 建立Socket

為了建立建立S o c k e t,程序可以調(diào)用Socket函數(shù),該函數(shù)返回一個(gè)類似于文件描述符的句柄。socket函數(shù)原型為:

int socket(int domain, int type,intprotocol);

domain指明所使用的協(xié)議族,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol通常賦值“0”.Socket()調(diào)用返回一個(gè)整型socket描述符,你可以在后面的調(diào)用使用它。

Socket描述符是一個(gè)指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用Socket函數(shù)時(shí),socket執(zhí)行體將建立一個(gè)Socket,實(shí)際上“建立一個(gè)Socket”意味著為一個(gè)Socket數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)空間。Socket執(zhí)行體為你管理描述符表。

兩個(gè)網(wǎng)絡(luò)程序之間的一個(gè)網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端口。Socket數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。

3.2 配置Socket

通過(guò)socket調(diào)用返回一個(gè)socket描述符后,在使用socket進(jìn)行網(wǎng)絡(luò)傳輸以前,必須配置該socket.面向連接的socket客戶端通過(guò)調(diào)用Connect函數(shù)在socket數(shù)據(jù)結(jié)構(gòu)中保存本地和遠(yuǎn)端信息。無(wú)連接socket的客戶端和服務(wù)端以及面向連接socket的服務(wù)端通過(guò)調(diào)用bind函數(shù)來(lái)配置本地信息。

Bind函數(shù)將socket與本機(jī)上的一個(gè)端口相關(guān)聯(lián),隨后你就可以在該端口監(jiān)聽(tīng)服務(wù)請(qǐng)求。

Bind函數(shù)原型為:

int bind(int sockfd,struct sockaddr*my_addr,int addrlen);

Sockfd是調(diào)用socket函數(shù)返回的socket描述符,my_addr是一個(gè)指向包含有本機(jī)IP地址及端口號(hào)等信息的sockaddr類型的指針;addrlen常被設(shè)置為3.3 建立連接

面向連接的客戶程序使用Connect函數(shù)來(lái)配置socket并與遠(yuǎn)端服務(wù)器建立一個(gè)TCP連接,其函數(shù)原型為:

int connect(int sockfd,struct sockaddr*serv_addr,int addrlen);

Sockfd是socket函數(shù)返回的socket描述符;serv_addr是包含遠(yuǎn)端主機(jī)IP地址和端口號(hào)的指針;addrlen是遠(yuǎn)端地址結(jié)構(gòu)的長(zhǎng)度。

Connect函數(shù)在出現(xiàn)錯(cuò)誤時(shí)返回-1,并且設(shè)置errno為相應(yīng)的錯(cuò)誤碼。進(jìn)行客戶端程序設(shè)計(jì)無(wú)須調(diào)用bind(),因?yàn)檫@種情況下只需知道目的機(jī)器的IP地址,而客戶通過(guò)哪個(gè)端口與服務(wù)器建立連接并不需要關(guān)心,socket執(zhí)行體為你的程序自動(dòng)選擇一個(gè)未被占用的端口,并通知你的程序數(shù)據(jù)什么時(shí)候到達(dá)端口。

Connect函數(shù)啟動(dòng)和遠(yuǎn)端主機(jī)的直接連接。只有面向連接的客戶程序使用socket時(shí)才需要將此socket與遠(yuǎn)端主機(jī)相連。無(wú)連接協(xié)議從不建立直接連接。面向連接的服務(wù)器也從不啟動(dòng)一個(gè)連接,它只是被動(dòng)的在協(xié)議端口監(jiān)聽(tīng)客戶的請(qǐng)求。

Listen函數(shù)使socket處于被動(dòng)的監(jiān)聽(tīng)模式,并為該socket建立一個(gè)輸入數(shù)據(jù)隊(duì)列,將到達(dá)的服務(wù)請(qǐng)求保存在此隊(duì)列中,直到程序處理它們。

int listen(int sockfd,int backlog);

首先,當(dāng)accept函數(shù)監(jiān)視的socket收到連接請(qǐng)求時(shí),socket執(zhí)行體將建立一個(gè)新的socket,執(zhí)行體將這個(gè)新socket和請(qǐng)求連接進(jìn)程的地址聯(lián)系起來(lái),收到服務(wù)請(qǐng)求的初始socket仍可以繼續(xù)在以前的socket上監(jiān)聽(tīng),同時(shí)可以在新的socket描述符上進(jìn)行數(shù)據(jù)傳輸操作。

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

Send()和recv()這兩個(gè)函數(shù)用于面向連接的socket上進(jìn)行數(shù)據(jù)傳輸。

Sockfd是你用來(lái)傳輸數(shù)據(jù)的socket描述符;msg是一個(gè)指向要發(fā)送數(shù)據(jù)的指針;Len是以字節(jié)為單位數(shù)據(jù)的長(zhǎng)度;flags一般情況下設(shè)置為0(關(guān)于該參數(shù)的用法可參照man手冊(cè))。

Send()函數(shù)返回實(shí)際上發(fā)送出的字節(jié)數(shù),可能會(huì)少于你希望發(fā)送的數(shù)據(jù)。在程序中應(yīng)該將send()的返回值與欲發(fā)送的字節(jié)數(shù)進(jìn)行比較。當(dāng)send()返回值與len不匹配時(shí),應(yīng)該對(duì)這種情況進(jìn)行處理。

3.5 傳輸結(jié)束

當(dāng)所有的數(shù)據(jù)操作結(jié)束以后,你可以調(diào)用close()函數(shù)來(lái)釋放該socket,從而停止在該socket上的任何數(shù)據(jù)操作。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉