摘要:介紹了基于GPRS網的數據傳輸、嵌入式實時操作系統u/OS-II以及小型TCP/IP協議棧uIP;深入論述了基于8051嵌入式系統的GPRS終端的實現。提供了一種羅為簡單、廉價和實用的GPRS終端的實現方案,說明了在8051中如何進行uC/OS-II和uIP的移植。
隨著數據無線傳輸需求的驟增和中畫移動GPRS業務全面投入運營,無線數據通信的應用越來越廣泛。GPRS網不但具有覆蓋范圍廣、數據傳輸速度快、通信質量高、永遠在線和按流量計費等優點,且其本身就是一個分組型數據網,支持TCP/IP協議,無需經過PSTN等網絡的轉接,可直接與Internet網互通。因此GPRS業務在無線上網、環境監測、交通監控、移動辦公等行業中具有無可比擬的性價比優勢。
為了滿足GPRS終端的低成本、小型化和移動靈活等要求,現在廣泛采用單片機對GPRS終端進行控制,并且引入嵌入式系統實現TCP/IP協議棧。目前主要的困難在于:運行TCP/IP協議對計算機存儲器、運算速度等要求較高,會占用大量的系統資源;而嵌入式系統大多采用8位單片機,硬件資源非常有限,支持TCP/IP協議非常困難。本文采用了在嵌入式實時操作系統uC/OS-II中移植一種小型TCP/IP協議棧uIP的方法,使基于8051嵌入式系統的GPRS終端能夠在網絡中進行數據傳輸;同時改善了系統的性能,提高了系統的可靠性,增強了系統的可擴展性和產品開發的可延續性。
圖1
1 基于GPRS網的數據傳輸
GPRS是在GSM的基礎上引入了分組控制單元(PCU)、服務支持節點(SGSN)和網關支持節點(GGSN)等新部件而構成的無線數據傳輸系統,其用戶能夠在端到端分組方式下發送和接收數據?;贕PRS網的數據傳輸系統如圖1所示。具體的數據傳輸流程為:
·GPRS終端通過接口從客戶系統中取出用戶數據;
·處理后以GPRS分組數據的形式發送到GSM基站(BSS);
·分組數據經SGSN封裝后,發送到GPRS IP骨干網;
·若分組數據是發送到另一GPRS終端,則先發送到目的SGSN,再經BSS發送到CPBS終端;若分組數據是發送到外部網絡(如Internet),則將分組數據包經GGSN進行協議轉換后,發送到外部網絡。
2 嵌入式實時操作系統uC/OS-II
uC/OS-II是由Jean J.Labrosse先生編寫的、現在流行的一種免費公開源代碼的實時操作系統。它可廣泛應用于從8位到64位單片機的各種不同類型、不同規模的嵌入式系統。帶有詳細注解的uC/OS-II源代碼只有200頁左右;其中95%左右是用C語言編寫的,與MCU類型相關的代碼用8088匯編寫成,不超過200行。uC/OS-II不僅具有結構小巧、可固化、可裁剪、多任務和可剝奪型的實時內核等特點;而且其實時性、穩定性裙可靠性也得到了廣泛認可。uC/OS-II的最小內核可編譯至2KB,一般情況占用內存在10KB數量級,適用基于8051的嵌入式系統的需要。在系統中嵌入uC/OS-II可以把整個程序分成許多任務,每個任務相對獨立,然后在每個任務中設置超時函數,時間用完后,必須交出MCU的使用權。即使一個任務發生問題,也不會影響其他任務的運行。在單片機系統中嵌入uC/OS-II提高了系統的可靠性,并使調試程序變得簡單,同時也增強了系統的可擴展性和產品開發的可延續性。
不過uC/OS-II僅僅是一個實時操作系統內核,與商業實時操作系統軟件包比較,它缺少Utilities部分,如文件系統、遠程函數調用庫、通信軟件庫。通信軟件包括:TCP/IP軟件庫、藍牙通信軟件庫、IrDA紅外通信軟件庫等。這一類軟件的解決有兩種途徑:一個是購買第三方軟件;另一個是自己編寫。如果只是用單片機實現TCP/IP協議中的某些功能,可以選用免費公開源代碼的小型TCP/IP協議棧,把它移植到uC/OS-II。 目前uC/OS-II的最新版本為V2.70,但現在廣泛學習和應用的是V2.52。
3 小型TCP/IP協議棧uIP
uIP是由瑞士計算機科學院的Adam Dunkels等開發的一種免費公開源代碼的小型TCP/IP協議棧,它專門為8位和16位MCU編寫。uIP完全是用C語言編寫,它在保證一個完整的TCP/IP棧的前提下,只保留了最必要的一系列特征,使其代碼最少、占用的RAM最?。凰荒芴幚韱我坏木W絡接口。通常的TCP/IP棧采用BSD socket API,需要來自下層的多任務操作系統的支持,而且任務管理、語境切換以及堆??臻g的分配都要占用很大的開銷,超出了8位機系統的能力。uIP采用了一個事件驅動接口,通過調用應用程序響應事件。而相應的應用程序作為C函數調用。通常情況下,uIP的源代碼雖然只有幾KB,RAM占用僅幾百字節,但uIP提供了網絡通信所必須的協議,包括:ARP、SLIP、IP、UDP、ICMP(PINC)和TCP;能夠滿足8位MCU接入TCP/IP網絡(如Internet)的需要。目前uIP最新的版本為V0.9,符合Internet標準。
4 GPRS終端的工作原理及硬件實現
GPRS終端由控制模塊控制TCP/IP模塊和無線發送模塊實現。其結構框圖如圖2所示。
4.1 控制模塊
控制模塊的作用主要有:
·控制模塊通過AT指令初始化GPRS無線模塊,使之附著在GPRS網上,獲得網絡運營商動態分配給GPRS終端的IP地址,并與目的終端或服務器之間建立連接;
·控制模塊通過RS232串口向客戶系統收發數據或指令;
·控制模塊通過RS232串口向TCP/IP模塊收發數據;
·控制模塊自主或根據遠程控制指令采取其他操作。
控制模塊的MCU選用華邦的八位機WINBOODW77E58。W77E58是***華邦公司生產的、與MCS51系列單片機兼容的、可多次編程的快速微處理器,在其內部集成有32KB的可重復編程的Flash ROM、256字節的片內存儲器、IKB用MOVX指令訪問的SRAM、可編程看門狗定時器、三個16位定時器、二個增強型的全雙工串行口、片內RC振蕩器、雙16位數據指針等諸多功能。在很多場合,幾乎不用擴展外圍芯片就能夠滿足系統要求。由于其采用了全新設計的微處理器內核,去除多余的時鐘和存儲周期,在相同的晶振頻率下,根據不同的指令類型,其運行速度一般比傳統8051系列快1.5~3倍。一般情況下,平均可達2.5倍以上。另外,由于W77E58采用全靜態CMOS設計,能工作在低速晶振頻率下。與普通的8051相比,若W77E58采用低速工作頻率,在相同的指令吞吐量下,W77E58的節電性能也將大大提高。
4.2 TCP/IP模塊
TCP/IP模塊通過RS232串口與GPRS無線模塊通信,提供非透明和透明兩路通道。相對應地,該模塊有兩種傳輸模式:透明模式和非透明模式。通過軟件切換,模塊在處于不同的傳輸模式時,數據流向也有所不同。當傳送AT指令集時,模塊進入透明模式,可以直接訪問GPRS無線模塊;當模塊進人非透明傳輸方式時,用戶數據從串口進入TCP/IP模塊后,先十丁成TCP/IP包,再經串口發送給GPRS模塊;GPRS無線模塊把其封裝成GPRS分組數據包傳到GPRS網上。TCP/IP模塊由基于單片機8051的嵌入式系統實現。選用WINBOODW77E58作為嵌入式系統的微處理器,嵌入式實時操作系統選用uC/OS-II,然后在uC/OS-II中移植uIP實現TCP/IP協議棧。
4.3 GPRS無線模塊
GPRS無線模塊作為GPRS終端的無線收發模塊,把從TCP/IP模塊接收的TCP/IP包和從基站接收的GPRS分組數據進行相應的協議處理后再轉發。GPRS無線模塊采用了SIEMENS公司的MC35 GPRS模塊。MC35模塊主要由射頻天線、內部Flash、SRAM、GSM基帶處理器、匹配電源和一個40腳的ZIF插座組成。GSM基帶處理器是核心部件,其作用相當于一個協議處理器,用來處理外部系統通過串口發送過來的AT指令。射頻天線部分主要實現信號的調制與解調,以及外部射頻信號與內部基帶處理器之間的信號轉換。匹配電源為處理器及射頻部分提供所需的電源。MC35 GPRS模塊支持GSM900和GSMl800雙頻網絡,接收速率可達86.20kbps,發送速率可達21.5kbps,并且很容易集成。當然最大的數據吞吐量還要依賴于GPRS網絡的支持。
5 TCP/IP模塊的軟件實現
5.1 uC/OS-II在8051上的移植
uC/OS-II是自由軟件,非商業的運用如科研、教學都是免費的。任何使用者都可以從互聯網上下載其源代碼,通過適當的修改加以移植,使其滿足自己硬件和系統的需要。為了移植,需要先了解uC/OS-II操作系統的總體結構,圖3所示是uC/OS-II的結構及與硬件的關系。
與處理器無關的代碼中包含了uC/OS-II的系統函數,在進行系統移植時一般不需要對這部分進行修改;只要將UCOS-II.C文件包含在自己的項目中,即可將uC/OS-II中所有與MCU無關的代碼包含到移植的代碼中。
與應用相關的代碼是用戶根據自己的應用系統定制合適的內核服務功能,它包括兩個文件:OS_CFG.H、INCLUDES.H。其中OS_CFG.H用來配置內核,用戶根據需要對內核進行定制,設置系統的基本情況,例如系統可提供的最大任務數量、是否定制郵箱服務、是否需要系統提供任務掛起功能、是否提供任務優先級動態改變功能等。而INCLUDES.H則是系統頭文件。
處理器相關的代碼中包含了對各種不同類型MCU的支持,需要根據自己的MCU對這部分進行修改。針對Keil C51編譯器和8051芯片的技術特點,uC/OS-Ⅱ的移植與三個文件相關:處理器相關C文件(OS_CPU.H、OS_CPU_C.C)和匯編文件(OS_CPU_A.ASM)。
(1)修改OS_CPU。H
文件OS_CPU.H中包括了用#define語句定義的與處理器相關的常數、宏以及類型。移植時主要修改的內容有:
·與編譯器相關的數據類型的設定。參考Keil C51編譯器中的幫助文件C51.PDF,具體路徑為\C51\HLP\C51.PDF。
·用#define語句定義了兩個宏開關中斷,具體實現為:
#define OS_ENTER_CRITICAL()EA=0//關中斷
#define OS_EXIT_CRITICAL() EA=1 //開中斷
·根據8051堆棧的方向定義OS_STK_GROWTH。
#define OS_STK_GROWTH 0 //8051堆棧從下向上遞增
置OS_STK_GROWTH為0,表示堆棧從下(低地址)向上(高地址)遞增;置OS_STK_GROWTH為1,表示堆棧從上(高地址)向下(低地址)遞減。
·uC/OS-II從低優先級任務切換到高優先級任務時需要用到OS_STK_SW(),通過執行OS_STK_SW()模仿中斷的產生。絕大多數CPU會提供軟中斷或指令陷阱(TRAP)完成這項功能。中斷服務子程序或指令陷阱處理函數(也叫異常處理函數)的中斷向量地址必須指向匯編語言函數OSCtxSw()。因為8051沒有軟中斷指令,所以用程序調用代替。
#define OS_TASK_SW() OSCtxSw()
(2)修改OS_CPU_C.C
uC/OS-II的移植范例要求用戶編寫10個簡單的C函數,其中OSTaskStklnit()是必要的,其他9個函數必須聲明,但不一定包含任何代碼。因為Keil C51在缺省情況下把函數編譯為不可重入的結構,而多任務系統要求并發操作導致重入,所以要在每個C函數及其聲明后標注reentrant關鍵字,使編譯器生成的代碼在運行中支持函數可重入。另外"pdata"、"data"在uC/OS-II中用做一些函數的形參,但它同時又是Keil C51的關鍵字,這樣會導致編譯錯誤。通常可把"pdata''改成"ppdala","data"改成"ddata"解決此問題。具體修改的代碼如下:
void * OSTaskStkInit(void (*task)(void *pd),
void *ppdata,
void *ptos,
INT16U opt)reentrant
在基于8051的uC/OS-II中,移植uIP不需要對現有的TCP/IP源代碼做任何修改,但是必須為網絡設備(如網卡芯片、串口等)寫一個驅動程序。同時,現有系統的集成部分也要進行相應的處理,例如當有數據到達或者周期性的定時器計數滿等情況下,主控制系統應該調用uIP函數[劉。移植的具體步驟如下:
·在目錄uip-0.9/下創建一個自己的目錄,例如uip-0.9/8051/;
·把uip_arch.c文件從目錄uip-0.9/unix/中復制到目錄uip-0.9/8051中;它包含了用C語言實現的32位加法、校驗和算法;
·把uipopt.h文件從目錄uip-0.9/unix中復制到目錄uip-0.9/8051中,并對其進行修改,以滿足系統的需要。uipopt.h是ulP的配置文件,其中不僅包含了諸如uIP網點的IP地址和同時可連接的最大值等設置選項,而且還有系統結構和C編譯器的特殊選項;
·參考例子unix/tapdev.c和uip/slipdev.c,為串口編寫驅動程序;
·參考例子unix/main.c,寫自己的主控制系統,以便在適當的時候可以調用ulP函數;
·編譯源代碼。
本文闡述了基于8051嵌入式系統的GPRS終端的實現,并詳細介紹了嵌入式實時操作系統uC/OS-II基于8051的移植以及小型TCP/IP協議棧uIP的移植:該GPRS終端利用GPRS網和Internet能夠與相應的GPRS終端以及相應的Internet終端進行數據傳輸。在GPRS終端的TCP/IP模塊中引入時實操作系統不但改善了系統的性能,提高了系統的可靠性,而且增強了系統的可擴展性和產品開發的可延續性。
評論
查看更多