無線手持磁條卡信息終端設(shè)計(jì)
3.2.3 sys_arch.c
主要實(shí)現(xiàn)與操作系統(tǒng)封裝層相關(guān)的一些函數(shù),包括郵箱操作函數(shù)、信號(hào)量操作函數(shù)等等,主要實(shí)現(xiàn)以下幾個(gè)函數(shù):
(1)LwIP系統(tǒng)的初始化函數(shù)。LwIP提供了系統(tǒng)初始化函數(shù)void sys_init(void),用來給用戶初始化一些必要的數(shù)據(jù)結(jié)構(gòu)。在本系統(tǒng)當(dāng)中,sys_init()函數(shù)主要使用μC/OS-Ⅱ的內(nèi)存管理函數(shù),分配LwIP郵箱所需的內(nèi)存和初始化LwIP的定時(shí)事件表。
(2)LwIP信號(hào)量操作函數(shù)。由于μC/OS-Ⅱ中已經(jīng)實(shí)現(xiàn)了信號(hào)量的各種操作,只需使用μC/OS-Ⅱ中的信號(hào)量處理函數(shù)對(duì)LwIP的信號(hào)量操作函數(shù)重新進(jìn)行封裝就可以了。
(3)LwIP郵箱操作函數(shù)。LwIP中的郵箱對(duì)應(yīng)μC/OS-Ⅱ中的消息隊(duì)列。根據(jù)sys_arch.h文件里面定義的郵箱數(shù)據(jù)結(jié)構(gòu),使用μC/OS-Ⅱ的消息隊(duì)列函數(shù)封裝成以下幾個(gè)函數(shù)就可以實(shí)現(xiàn)LwIP的郵箱操作:
(4)LwIP的sys_arch_timeouts函數(shù)。在LwIP當(dāng)中,每一個(gè)線程都有一個(gè)定時(shí)器鏈表來保存相關(guān)的定時(shí)信息,移植時(shí)要做的事情是為每一個(gè)定時(shí)器鏈表提供一個(gè)用來保存鏈表表頭指針的結(jié)構(gòu)變量sys_timeouts,并通過sys_arch_timeouts函數(shù)返回每個(gè)線程對(duì)應(yīng)的sys_timeouts變量,并且保證在出錯(cuò)時(shí)也能返回一個(gè)可用的sys_timeouts變量。相關(guān)的數(shù)據(jù)結(jié)構(gòu)和函數(shù)定義如下:
(5)LwIP線程的創(chuàng)建函數(shù)。LwIP需要實(shí)現(xiàn)線程的創(chuàng)建函數(shù),但是由于μC/OS-Ⅱ中沒有線程的概念,只有任務(wù),所以LwIP中線程創(chuàng)建可以通過調(diào)用μC/OS-Ⅱ中的任務(wù)創(chuàng)建函數(shù)實(shí)現(xiàn)。
(6)LwIP獲取系統(tǒng)時(shí)間函數(shù)。當(dāng)LwIP使用PPP作為數(shù)據(jù)鏈路層協(xié)議時(shí),必須通過sys_jifties()函數(shù)獲得以ms為單位的系統(tǒng)時(shí)間。因此要使用LwIP的PPP協(xié)議時(shí),一定要實(shí)現(xiàn)這個(gè)函數(shù);沒有使用PPP協(xié)議時(shí),無需理會(huì)。由于在μC/OS-Ⅱ,無論時(shí)鐘節(jié)拍何時(shí)發(fā)生,μC/OS-Ⅱ都會(huì)對(duì)一個(gè)32位的計(jì)數(shù)器加1??梢酝ㄟ^調(diào)用μC/OS-Ⅱ的系統(tǒng)函數(shù)OSTimeGet()來獲得該計(jì)數(shù)器的當(dāng)前值,再根據(jù)系統(tǒng)的時(shí)鐘節(jié)拍頻率就可以實(shí)現(xiàn)sys_jifties()函數(shù)。
3.2.4 修改配置文件lwipopt.h
LwIP提供了配置文件lwipopt.h,可以通過定義一系列宏來剪裁LwIP功能,適應(yīng)不同的應(yīng)用需要。例如可以設(shè)置是否支持PPP協(xié)議,是否支持ICMP協(xié)議,是否支持自動(dòng)獲取IP等等。由于本應(yīng)用系統(tǒng)使用GPRS上網(wǎng),所以設(shè)置支持PPP協(xié)議。
3.3 GPRS無線Modem驅(qū)動(dòng)
無線Modem驅(qū)動(dòng)完成MC39i的初始化、發(fā)送和接收PPP協(xié)議幀數(shù)據(jù)。
3.3.1 AT命令
驅(qū)動(dòng)Modem是基于A T命令集實(shí)現(xiàn)的,微控斜器通過串行接口將AT命令發(fā)送給MC39i,從而完成對(duì)MC39i的控制。主要AT命令如下:
(1)設(shè)置錯(cuò)誤返回信息。使用at+cmee=1命令,執(zhí)行錯(cuò)誤時(shí),錯(cuò)誤報(bào)告的格式均為ERROR。
(2)設(shè)置接入網(wǎng)關(guān)。使用at+cgdcont=1,“IP”,“CMNET”命令設(shè)置GPRS接入網(wǎng)關(guān)為移動(dòng)夢(mèng)網(wǎng)。
(3)激活GPRS功能。使用AT+CGACT=1,使GPRS模塊附著到網(wǎng)絡(luò)。如果命令返回O K,則GPRS連接成功;如果返回ERROR,則意味著GPRS連接
失敗。
(4)撥號(hào)。ATD * 99 * * * 1#。撥號(hào)成功后,微控制器通過串口傳送PPP協(xié)議幀,與Modem進(jìn)行數(shù)據(jù)通信。
3.3.2 LwIP與Modem接口函數(shù)
無線Modem使用串行接口與微控制器進(jìn)行通信。而LwIP提供了幾個(gè)標(biāo)準(zhǔn)的串行設(shè)備接口函數(shù),在LwIP中的創(chuàng)建sio.c文件實(shí)現(xiàn)GPRS無線Modem驅(qū)動(dòng)。該文件中主要實(shí)現(xiàn)下面幾個(gè)函數(shù):
4 結(jié)語
本文設(shè)計(jì)的無線手持磁條卡信息終端系統(tǒng)實(shí)現(xiàn)了輕量級(jí)TCP/IP協(xié)議棧LwIP在μC/OS-Ⅱ上的移植,并利用運(yùn)營商的GPRS網(wǎng)絡(luò)實(shí)現(xiàn)了與后臺(tái)服務(wù)器的無線互聯(lián),其終端具有成本低,體積小和功耗低等優(yōu)點(diǎn),可應(yīng)用于多種應(yīng)用場合。本文引用地址:http://www.ex-cimer.com/article/156375.htm
評(píng)論