新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于射頻識別技術(shù)的車輛路口通行系統(tǒng)設(shè)計

基于射頻識別技術(shù)的車輛路口通行系統(tǒng)設(shè)計

作者: 時間:2012-07-12 來源:網(wǎng)絡(luò) 收藏

3. 軟件設(shè)計

為了實現(xiàn)TCP/IP通信,同時使系統(tǒng)盡可能地輕量和簡潔,本系統(tǒng)通過在uC/OS-II操作系統(tǒng)上移植LwIP協(xié)議棧加以實現(xiàn)。lwIP是瑞士計算機(jī)科學(xué)院的一個開源的TCP/IP協(xié)議棧實現(xiàn),它是一套專門為嵌入式系統(tǒng)設(shè)計的源碼開放的輕型協(xié)議棧。LwIP在保持TCP/IP協(xié)議基本要求的前提下,通過層與層之間共享內(nèi)存,避免了許多繁瑣的復(fù)制處理,這樣做大幅度地節(jié)省了代碼和數(shù)據(jù)存儲空間,因此非常適合嵌入式應(yīng)用。與其他輕型協(xié)議棧不同的是,LwIP不僅支持一般的網(wǎng)絡(luò)協(xié)議,比如UDP協(xié)議、DHCP協(xié)議、PPP協(xié)議等,而且還支持多網(wǎng)絡(luò)接口、IPv6和標(biāo)準(zhǔn)API。

3.1 LwIP在uC/OS-II上的移植

針對uC/OS-II[6]和ARM的ADS編譯器,LwIP的移植只需要編寫arch文件夾下的3個文件——cc.h、sys_arch.h和sys_arch.c。其中cc.h中有與CPU和編譯器有關(guān)的定義,包括數(shù)據(jù)結(jié)構(gòu)和大小端存儲方式等。為了增強移植性,LwIP專門把和操作系統(tǒng)有關(guān)的數(shù)據(jù)結(jié)構(gòu)和函數(shù)放在一起組成操作系統(tǒng)封裝層,為諸如定時、進(jìn)程同步和消息傳遞等操作系統(tǒng)服務(wù)提供統(tǒng)一的接口,移植時需針對不同的操作系統(tǒng)來實現(xiàn)特定的操作系統(tǒng)封裝層,這些是由sys_arch.h和sys_arch.c實現(xiàn)的。其中sys_arch.h主要定義與操作系統(tǒng)相關(guān)的數(shù)據(jù)結(jié)構(gòu)——信號量、郵箱和進(jìn)程號,這些在uC/OS-II中都有對應(yīng)的實體,LwIP中的郵箱對應(yīng)于uC/OS-II中的消息隊列。sys_arch.c中要實現(xiàn)和操作系統(tǒng)有關(guān)函數(shù)的定義,包括系統(tǒng)的初始化以及信號和郵箱的操作——創(chuàng)建、刪除、投遞和等待,這些功能需要用uC/OS-II中相應(yīng)的函數(shù)進(jìn)行重新封裝。另外,TCP/IP協(xié)議棧中需要許多定時器的功能,在LwIP中是用sys_timeout結(jié)構(gòu)體隊列和相應(yīng)的函數(shù)實現(xiàn)的。每個sys_timeout結(jié)構(gòu)體包括本線程的timeout時間長度,以及超時后的回調(diào)處理函數(shù)sys_arch.c中sys_arch_timeouts()函數(shù)的功能就是返回當(dāng)前進(jìn)程所對應(yīng)的sys_timeout結(jié)構(gòu)體隊列的頭指針。本系統(tǒng)用的方法是在系統(tǒng)初始化的時候根據(jù)最大的LwIP進(jìn)程數(shù)創(chuàng)建一個sys_timeout結(jié)構(gòu)體指針的數(shù)組,以后每創(chuàng)建一個LwIP進(jìn)程其優(yōu)先級都從一個連續(xù)的已知區(qū)間進(jìn)行分配,sys_arch_timeouts()函數(shù)通過調(diào)用OSTaskQuery()函數(shù)獲得進(jìn)程的優(yōu)先級進(jìn)而獲得對應(yīng)的sys_timeout結(jié)構(gòu)體隊列的頭指針。

3.2 RTL8019驅(qū)動程序的編寫

RTL8019驅(qū)動程序做的工作主要是8019的初始化、發(fā)送和接收以太網(wǎng)數(shù)據(jù)包。初始化函數(shù)rtl8019_init()是在添加以太網(wǎng)絡(luò)接口時由netif_add()函數(shù)調(diào)用,調(diào)用過程中首先初始化此接口對應(yīng)的全局網(wǎng)絡(luò)接口結(jié)構(gòu)體,然后設(shè)置8019的各功能寄存器。初始化完8019之后調(diào)用arp_init()函數(shù)啟動ARP功能,然后用sys_timeout()函數(shù)啟動ARP緩沖列表生命周期的定時器。數(shù)據(jù)包的發(fā)送首先從ARP緩沖隊列中查找目的MAC地址,然后構(gòu)造以太網(wǎng)數(shù)據(jù)幀的頭部,最后調(diào)用底層的發(fā)送函數(shù)low_level_output()將數(shù)據(jù)幀發(fā)送出去。如果找不到對應(yīng)的IP/MAC項,發(fā)送ARP請求數(shù)據(jù)幀。數(shù)據(jù)包的接收由中斷[7]處理函數(shù)rtl8019_ISR()調(diào)用,它的執(zhí)行過程是先調(diào)用最底層的接收函數(shù)low_level_input()從8019中接收數(shù)據(jù)幀,如果接收的是IP數(shù)據(jù)包,則更新ARP緩沖隊列并把數(shù)據(jù)包傳給網(wǎng)絡(luò)接口結(jié)構(gòu)指定的函數(shù)進(jìn)行處理。如果接收的是ARP數(shù)據(jù)包,則調(diào)用etharp_arp_input()函數(shù)處理。最底層的接收發(fā)送函數(shù)采用的都是8019的遠(yuǎn)程DMA工作方式以提高性能[8]。

3.3 軟件框圖

44.jpg

圖4 讀卡器系統(tǒng)軟件框圖

信號機(jī)的響應(yīng)級由監(jiān)控中心的上位機(jī)設(shè)定,信號機(jī)可以在事先獲得授權(quán)的情況下自主改變燈色,如果事先未獲授權(quán),或是同時收到多個不同標(biāo)簽的請求,則信息必須送到監(jiān)控中心處理,由監(jiān)控中心的上位機(jī)判定優(yōu)先級后發(fā)指令控制信號機(jī)的動作。監(jiān)控中心還可以隨時獲得特定車輛的位置以及所在區(qū)域的路況等信息,通過合理改變區(qū)域內(nèi)信號機(jī)的綠信比,達(dá)到區(qū)域協(xié)調(diào)控制的目的。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉