譚姝 宋茂忠
(南京航空航天大學信息科學與技術(shù)學院)
摘要 本文研究基于RCM2200嵌入式系統(tǒng)對網(wǎng)絡(luò)和串口的編程技術(shù)。介紹了RCM2200微控制器核心模塊以及Dynamic C軟件開發(fā)環(huán)境块促,講述了如何利用Dynamic C語言通過RCM2200核心模塊實現(xiàn)UDP報文和異步串口數(shù)據(jù)的互相轉(zhuǎn)換登澜。DynamicC是與RCM2200配套使用的軟件開發(fā)語言,它擁有豐富的庫函數(shù)以便程序員編程時調(diào)用牛隅,結(jié)果表明炕柔,運用該語言能實現(xiàn)基于RCM2200以太網(wǎng)與異步串口之間的成功通信。
關(guān)鍵詞 嵌入式系統(tǒng)媒佣;RCM2200触法;UDP報文;串口通信
1 引言
目前胖移,嵌入式技術(shù)已經(jīng)廣泛滲入并應(yīng)用到各領(lǐng)域替独,涉及到多種傳統(tǒng)及現(xiàn)代技術(shù),形成了前所未有的多學科鞠撑、多領(lǐng)域的交叉與融合衬蚤。由Z-World公司推出的RCM2200[1]是一款低成本的嵌入式微控制器核心模塊,它采用Dynamic C?[2]這一專門為Z-World產(chǎn)品創(chuàng)建的集成的C 編譯器还幅、編輯器砌纸、鏈接器、裝載器和調(diào)試器挠氛,便于實現(xiàn)快速開發(fā)應(yīng)用民议,加快產(chǎn)品投放到市場。
UDP協(xié)議[3][4]是比較著名的傳輸層協(xié)議之一淡榕,它與TCP協(xié)議一樣是基于IP協(xié)議的迂腔,但與TCP不同的是它不需要協(xié)議層提供質(zhì)量保證,因此允悦,在需要實時數(shù)據(jù)傳輸?shù)那闆r下應(yīng)用比較廣泛膝擂。并且,因為不提供質(zhì)量保證隙弛,服務(wù)器沒有必要一直處于等待狀態(tài)架馋,從而大大減輕了服務(wù)器的負擔。在某些情況下,還可以根據(jù)需要給UDP報文加上一些質(zhì)量保證控制叉寂,有很大的靈活度萍启。
在不遠的將來,將設(shè)備與網(wǎng)絡(luò)相連將成為一種趨勢屏鳍。在諸如GPS串口數(shù)據(jù)網(wǎng)絡(luò)收發(fā)以及某些語音傳輸勘纯、實時監(jiān)控等多種場合,實現(xiàn)以太網(wǎng)與異步串口數(shù)據(jù)之間的通信是非常必要的孕蝉。本文介紹了一種基于RCM2200嵌入式微控制器核心模塊利用UDP報文實現(xiàn)網(wǎng)絡(luò)與串口互通的方法屡律,可以迅速實現(xiàn)將串口與網(wǎng)絡(luò)相連接。
2 系統(tǒng)原理及功能
RCM2200采用Rabbit半導體公司推出的高性能8位器件-Rabbit2000型微處理器降淮;帶RJ-45插口的內(nèi)置10Base-T端口簡化了網(wǎng)絡(luò)連接超埋,便于開發(fā)帶以太網(wǎng)接口的監(jiān)控、通訊設(shè)備铝三;配備有4個串行口淑免,方便擴展聯(lián)接;擁有26根并行的I/O引線以及16根可設(shè)置的I/O引線羹浪,無須擴展即可完成一般的I/O任務(wù)暑礼;擁有256K Flash,128K SRAM, 用于代碼存儲和數(shù)據(jù)存儲;時間雀司、日期硅拆、看門狗、定時器等一應(yīng)俱全奉念;且其采用雙列直插式引腳栗衍,尺寸僅為59 x 41 x 22 mm。這種結(jié)構(gòu)促進了嵌入式系統(tǒng)的快速開發(fā)鹿竭,并可實現(xiàn)集成的以太網(wǎng)連接丽阎。
RCM2200系統(tǒng)的基本框架結(jié)構(gòu)如圖1所示。
圖1 RCM2200系統(tǒng)結(jié)構(gòu)
RCM2200采用Dynamic C?語言進行軟件開發(fā)胜溢,與標準C語言相比谴垫,Dynamic C的改進和差異在于使得在功能強大的嵌入式系統(tǒng)上進行實時編程變得非常容易。 語言的擴展包括多任務(wù)和優(yōu)先多任務(wù)的構(gòu)造母蛛,當供電失敗時翩剪,能夠保護寫入變量, 能夠?qū)懭氲街袛喑绦蛑腥ゲ式肌藴蔆函數(shù)庫肢专,特定板的外圍驅(qū)動,芯片外圍設(shè)備焦辅,以及其他的性能以源代碼的形式包含在Dynamic C中。完全支持匯編語言,在對時間要求較高的應(yīng)用中筷登,匯編代碼可以方便的與C代碼混用剃根。
在該開發(fā)系統(tǒng)中將RCM2200的以太網(wǎng)接口與當?shù)鼐钟蚓W(wǎng)相連,選擇一個串口與計算機的串口相連前方。由以太網(wǎng)發(fā)送UDP報文給RCM2200微控制器核心模塊經(jīng)過處理后通過串口發(fā)送給計算機狈醉,由計算機串口發(fā)送數(shù)據(jù)給RCM2200微控制器核心模塊經(jīng)過處理后通過其上的網(wǎng)絡(luò)口發(fā)送UDP報文給以太網(wǎng),從而實現(xiàn)基于RCM2200以太網(wǎng)和串口之間的通信惠险。
3 UDP協(xié)議的實現(xiàn)
UDP協(xié)議是比較著名的傳輸層協(xié)議之一苗傅,它使用IP作為網(wǎng)絡(luò)層協(xié)議,為應(yīng)用程序發(fā)送和接收數(shù)據(jù)報燎拟。但是靶疟,它提供無連接服務(wù),是不可靠傳輸享秒。因此脂桂,UDP報文主要用于需要實時數(shù)據(jù)傳輸?shù)那闆r,一次傳輸少量的數(shù)據(jù)蛆古。在某些對實時性要求很高的場合港驶,利用UDP報文進行數(shù)據(jù)傳輸是非常必要的,但往往要采用一些可靠性方案舔伴,以防止有漏傳滨靴、誤傳的現(xiàn)象發(fā)生。
3.1 客戶機/服務(wù)器程序設(shè)計模式
客戶機/服務(wù)器的程序設(shè)計模式在網(wǎng)絡(luò)程序設(shè)計中被大量的應(yīng)用溃柑。這種設(shè)計模式將整個系統(tǒng)分為兩大部分——服務(wù)器部分和客戶機部分巴疾。客戶機向服務(wù)器提出請求摆抑,服務(wù)器對請求作相應(yīng)的處理將結(jié)果返回給客戶機转砖。
根據(jù)不同的實際情況,客戶機/服務(wù)器的通信存在對稱和非對稱兩種方式鲸伴。在對稱的方式下府蔗,通信的每一方都可能扮演主從角色;在非對稱的方式下汞窗,一方不可改變的認為是主機姓赤,而另一方則是從機。無論是對稱的或是非對稱的仲吏,當服務(wù)被提供時必然存在客戶進程和服務(wù)進程不铆。基于UDP協(xié)議的通信既可采用對稱方式也可采用非對稱方式裹唆。
3.2 數(shù)據(jù)報套接字
套接字(socket)是通信的基石誓斥,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點的抽象表示,包含進行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議劳坑,本地主機的IP地址毕谴,本地進程的協(xié)議端口,遠地主機的IP地址距芬,遠地進程的協(xié)議端口霉尊。
UDP協(xié)議支持數(shù)據(jù)報套接字。這種套接字可以采用客戶/服務(wù)器模式珍催,以全雙工方式工作督赡,接收發(fā)送可以同時進行,但并不保證數(shù)據(jù)傳輸?shù)目煽啃院痰住⒂行蛐院蜔o重復性磷可,需要由程序員負責管理數(shù)據(jù)報的排序和可靠性。
3.3 使用Dynamic C實現(xiàn)UDP報文的傳輸
Dynamic C提供了許多支持TCP/IP協(xié)議的庫函數(shù)伍奏。其中屠蚌,DCRTCP.LIB是最主要的函數(shù)庫。
下面將簡要介紹UDP協(xié)議下的基本通信流程肿蚂。
3.3.1 調(diào)用本地初始化函數(shù)
void sock_init(void)
該函數(shù)將使用默認配置初始化本地信息包驅(qū)動器以及DCRTCP.LIB函數(shù)庫啊衣。該函數(shù)必須在其他網(wǎng)絡(luò)庫函數(shù)被使用前進行調(diào)用。
3.3.2 打開數(shù)據(jù)報套接字
int udp_open( *s, lport, remote_IP, port, *data_handler ())
其中的參數(shù)解釋如下:
s : 指向UDP套接字的指針措找;
lport : 本地協(xié)議端口糖追;
remote_IP : 可接受的遠地主機IP地址,如果該項為-1蝗羊,則支持廣播通信藏澳;
port : 可接受的遠地進程協(xié)議端口,如果該項為-1耀找,則為廣播數(shù)據(jù)報翔悠;
data_handler() : 如果接收到數(shù)據(jù)則調(diào)用該函數(shù);
該函數(shù)的返回值野芒,如果成功返回非零蓄愁,否則返回零值。
3.3.3 接收遠地主機發(fā)送的數(shù)據(jù)報
int udp_recv( *s, *buf_recv, recv_len)
當套接字初始化后用該函數(shù)掃描接收緩沖區(qū)狞悲,撮抓,察看是否有數(shù)據(jù)報到達。其中摇锋,buf_recv : 指向用于存放已到達數(shù)據(jù)報的數(shù)組的指針丹拯;recv_len : 存放數(shù)據(jù)報的數(shù)組的大小。如果接收到數(shù)據(jù)報則返回數(shù)據(jù)報的長度荸恕;否則返回-1乖酬。
3.3.4 發(fā)送數(shù)據(jù)報給遠地主機
int udp_send( *s, *buf_send, send_len )
調(diào)用該函數(shù)發(fā)送數(shù)據(jù)報給遠地主機死相。如果成功返回該數(shù)據(jù)報的長度,否則返回-1僚魁。
buf_send : 指向待發(fā)送數(shù)據(jù)報的指針七迂;
send_len : 待發(fā)送數(shù)據(jù)報的長度。
3.3.5 網(wǎng)絡(luò)信息處理函數(shù)
int tcp_tick( *s )
該函數(shù)將察看網(wǎng)絡(luò)連接狀態(tài)视樱,檢查數(shù)據(jù)報的到達情況,處理新到數(shù)據(jù)報并重傳丟失的數(shù)據(jù)報舅狭。若出現(xiàn)網(wǎng)絡(luò)連接被復位及套接字已關(guān)閉的情況或參量s為NULL哼曙,則返回值為零;否則返回非零值秸严。
3.3.6 關(guān)閉套接字
void sock_close( *s )
當數(shù)據(jù)傳送工作完成或傳送過程中發(fā)生錯誤時液互,可調(diào)用該函數(shù)關(guān)閉套接字
4 串口通信的實現(xiàn)
4.1 RS232電平與TTL電平的轉(zhuǎn)換
PC機的串行接口是符合EIA RS-232C規(guī)范的外部總線標準接口,而RCM2200配備有四個串行接口恍肢,都是采用TTL電平匈歼,因此兩者之間必須進行電平轉(zhuǎn)換。以RCM2200的串行口C(位于核心模塊的J4插槽上)為例摧辣,電平轉(zhuǎn)換如圖2所示飞校。
圖2 RS232與TTL電平轉(zhuǎn)換圖
4.2 使用Dynamic C實現(xiàn)串口數(shù)據(jù)的傳輸
Dynamic C提供了一些與計算機串行口進行通信的函數(shù)可供用戶程序調(diào)用,下面簡要介紹其中的一部分旨袒。
4.2.1 打開串行接口
int serXopen( bard )
bard : 長整型汁针,每秒鐘傳送的比特數(shù)。
該函數(shù)用于打開RCM2200的串行接口砚尽,由于RCM2200核心模塊擁有四個串行口施无,故X可根據(jù)需要取為A\B\C\D其中一個。在調(diào)用該函數(shù)之前必孤,還必須先定義串行口的輸入輸出緩沖區(qū)大小猾骡,通常情況下設(shè)定為2n-1,否則就采用默認值31敷搪,但在編譯時會給出警告兴想。該函數(shù)的返回值:成功則為1,否則為0购啄。
4.2.2 讀取PC機串行口數(shù)據(jù)
int serXgetc() /* X = A|B|C|D */
程序可以調(diào)用該函數(shù)查詢串行口是否有字符來到襟企,如果有,返回該字符值狮含;否則顽悼,返回值-1。
4.2.3 發(fā)送數(shù)據(jù)到PC機串行口
int serXputs( *s )
int serXwrite( s, length ) /* X = A|B|C|D */
這兩個函數(shù)均可用于發(fā)送字符串給計算機的串行口甸持,返回成功發(fā)送的字符數(shù)孝仅。
s : 待發(fā)送字符串的首地址群肌;
length : 待發(fā)送字符串的長度。
4.2.4 關(guān)閉串行口
void serXclose() /* X = A|B|C|D */
該函數(shù)用于關(guān)閉已經(jīng)打開的串行口逊参。
5 實現(xiàn)以太網(wǎng)與串口之間的通信
5.1 定義網(wǎng)絡(luò)以及串口初始化數(shù)據(jù)
在程序的開頭歧晕,必須使用#define定義一些初始化數(shù)據(jù),比如:RCM2200所使用的本地IP地址以及端口洪铣,與之通信的遠地IP地址以及端口以及串口輸入輸出緩沖區(qū)的大小等等捕导。
5.2 主程序
在主程序中調(diào)用PC機串口發(fā)送字符串給RCM2200經(jīng)過處理后再由RCM2200發(fā)送UDP報文給以太網(wǎng)以及RCM2200接收以太網(wǎng)發(fā)送來的UDP報文后再送給計算機的串行口兩個子程序。
main()
{ sock_init(); //初始化網(wǎng)絡(luò)庫函數(shù): //打開串行口及網(wǎng)絡(luò)套接字for(;;;)
tcp_tick(NULL);//察看套接字狀態(tài)
init_comm();//網(wǎng)絡(luò)發(fā)報文串口接收
comm_init();//串口發(fā)數(shù)據(jù)網(wǎng)絡(luò)接收 }
5.3網(wǎng)絡(luò)發(fā)報文串口接收
子程序init_comm() 使用庫函數(shù)udp_recv查詢RCM2200以太網(wǎng)接口是否有UDP報文來到学和,如果沒有則返回主程序孔选,否則將UDP報文存放到buf_init數(shù)組中,然后調(diào)用serCputs(buf_init)通過RCM2200的串行口C發(fā)送到計算機的串行口袋滔。值得一提的是厨鸣,當RCM2200接收到了一次報文之后,它將自動關(guān)閉接收報文的套接字缩旬,因此续誉,如果還想接受下一次發(fā)送的報文,必須再次調(diào)用函數(shù)udp_open打開該套接字初肉。
5.4串口發(fā)字符串網(wǎng)絡(luò)接收
子程序 comm_init()調(diào)用函數(shù)serCgetc()用于查詢計算機的串行口是否有數(shù)據(jù)到來酷鸦,如果沒有則返回主程序,否則將接收到的字符存儲到buf_comm數(shù)組中朴译,直到檢測到結(jié)束符到來井佑,將字符串以UDP報文的形式通過函數(shù)udp_send發(fā)送給以太網(wǎng)。如果發(fā)送成功眠寿,則返回主程序等待下一次數(shù)據(jù)的到來躬翁,否則關(guān)閉該套接字后重新打開再返回主程序等待。
5.5程序調(diào)試結(jié)果
在該程序的調(diào)試過程中盯拱,利用Visual C++語言編寫了一個接收和發(fā)送UDP報文的程序用于以太網(wǎng)的計算機上盒发,另外還使用了從網(wǎng)上下載的串口調(diào)試幫助軟件,結(jié)果表明狡逢,該程序能實現(xiàn)基于RCM2200以太網(wǎng)與異步串口之間的成功通信宁舰。
結(jié)論
RCM2200是為了促進嵌入式系統(tǒng)的快速開發(fā)和實現(xiàn)集成的以太網(wǎng)連接而設(shè)計的。集成的以太網(wǎng)口允許用戶通過使用經(jīng)濟的網(wǎng)絡(luò)軟件進行瞬間的本地連接或全球范圍的連接奢浑。另外捅我,RCM2200還提供了四個串行口用于和其他設(shè)備的串行口進行數(shù)據(jù)交換。
RCM2200使用Dynamic C軟件開發(fā)環(huán)境鹤叹,支持C語言灿打、匯編語言,擁有豐富的庫函數(shù)可供用戶調(diào)用父历,并具有單步編譯杏兰、斷點設(shè)置瑞喧、單步執(zhí)行、代碼分解秀毡、監(jiān)視表達式等優(yōu)秀性能藤汇。
使用Dynamic C接收和發(fā)送UDP報文時,由于網(wǎng)絡(luò)對該報文的傳輸不提供質(zhì)量保證智精,在每完成一次操作后蜻肄,必須及時檢查套接字的狀態(tài),避免發(fā)生誤傳签孤、漏傳以及套接字關(guān)閉等現(xiàn)象订骂。在發(fā)送和接收串口數(shù)據(jù)時,要注意使RCM2200的串口數(shù)據(jù)傳輸波特率與PC機保持一致份殿,這樣,才能保證正確傳輸嗽交。
參考文獻
【1】Z-World, Inc. RabbitCore RCM2200 User’s Manual 2001年
【2】Z-World, Inc. Dynamic C premier User’s Manual
1999年
【3】Z-World, Inc. Dynamic C TCP/IP software User’s Manual 2001年
【4】謝希仁.計算機網(wǎng)絡(luò).第三版.大連: 大連理工大學出版社卿嘲,2000.200~201.
聲明:本網(wǎng)站所收集的部分公開資料來源于互聯(lián)網(wǎng),轉(zhuǎn)載的目的在于傳遞更多信息及用于網(wǎng)絡(luò)分享夫壁,并不代表本站贊同其觀點和對其真實性負責拾枣,也不構(gòu)成任何其他建議。本站部分作品是由網(wǎng)友自主投稿和發(fā)布盒让、編輯整理上傳梅肤,對此類作品本站僅提供交流平臺,不為其版權(quán)負責邑茄。如果您發(fā)現(xiàn)網(wǎng)站上所用視頻姨蝴、圖片、文字如涉及作品版權(quán)問題肺缕,請第一時間告知左医,我們將根據(jù)您提供的證明材料確認版權(quán)并按國家標準支付稿酬或立即刪除內(nèi)容,以保證您的權(quán)益同木!聯(lián)系電話:010-58612588 或 Email:editor@mmsonline.com.cn男鳞。
網(wǎng)友評論
匿名:
最新反饋
注冊獲取更多行業(yè)信息
- 暫無反饋
無須注冊嫁料,輕松溝通
編輯推薦
- 2025新年特刊:打造新質(zhì)生產(chǎn)力,智啟未來新篇章
- 定義制造業(yè)未來的數(shù)控加工中心技術(shù)專題
- 航空航天及交通領(lǐng)域先進制造技術(shù)應(yīng)用專題
- 解碼消費電子產(chǎn)品生產(chǎn)的數(shù)字化之路技術(shù)專題
- 精密智能機床刽严,助力制造升級技術(shù)專題
- 汽車輕量化驅(qū)動下的零部件加工應(yīng)用專題
- 高性能銑刀實現(xiàn)高精加工生產(chǎn)技術(shù)專題
- 航空航天發(fā)動機解決方案專題
- 高效齒輪加工生產(chǎn)技術(shù)方案專題
- 金屬加工液的性能不止?jié)櫥夹g(shù)應(yīng)用專題