<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于嵌入式Linux的便攜式RFID信息采集與處理系統

基于嵌入式Linux的便攜式RFID信息采集與處理系統

作者:武國強,呂柏權 時(shí)間:2008-07-30 來(lái)源:電子技術(shù)應用 收藏

2 系統軟件設計

本文引用地址:http://dyxdggzs.com/article/86410.htm

  系統軟件是整個(gè)系統的靈魂,其設計的好壞直接影響系統的穩定性和可擴展性等性能。系統設計將軟件分為兩層結構,如圖5所示。最下面一層為操作系統層,主要實(shí)現對操作系統的移植和各種設備驅動(dòng)程序的編寫(xiě),包括OLED模塊、USB Device、紅外、鍵盤(pán)等設備驅動(dòng)程序。上一層為應用程序層,主要實(shí)現卡信息顯示、鍵盤(pán)掃描、電子標簽卡讀寫(xiě)、文件傳輸、時(shí)鐘以及電池電量檢測等功能。

  2.1

  是一種公開(kāi)源碼的多任務(wù)操作系統,具有開(kāi)放度高、安全性好、穩定性強、可移植性好等特點(diǎn),在操作系統中被大量采用。

  本設計采用的Linux內核是在A(yíng)RM-Linux的基礎上,編寫(xiě)了OLED顯示模塊、USB 設備、紅外收發(fā)器及鍵盤(pán)的設備驅動(dòng)程序。在Linux系統中,設備驅動(dòng)程序占有很重要的位置,它提供了在用戶(hù)空間操作硬件設備的接口。Linux系統將設備分為字符設備、塊設備及網(wǎng)絡(luò )設備三種,并給出針對不同設備的數據結構及注冊函數。當用戶(hù)開(kāi)發(fā)設備驅動(dòng)程序時(shí),只需按硬件操作的方法填充設備數據結構,并將它注冊到內核中即可。

  為了方便用戶(hù)應用程序的編寫(xiě),把USB設備實(shí)現為CDC(Communication Device Class)類(lèi)設備,其驅動(dòng)程序分為兩層,最底層操作AT91RM9200上的USB設備控制器,如處理硬件中斷、讀寫(xiě)寄存器及操作I/O口來(lái)檢測設備的插拔;上層實(shí)現了底層與TCP/IP協(xié)議層的連接,主要是模擬物理網(wǎng)卡,并注冊到內核。這樣,在應用程序的USB設備就是一個(gè)標準的網(wǎng)絡(luò )設備,用戶(hù)不需要了解驅動(dòng)程序的接口,而直接使用Linux提供的套接字進(jìn)行網(wǎng)絡(luò )通信程序的開(kāi)發(fā)。當用戶(hù)進(jìn)行二次開(kāi)發(fā)時(shí),可以不加修改地將上位機開(kāi)發(fā)好的網(wǎng)絡(luò )通信程序直接移植到本系統中,而且可以通過(guò)上位機的Telnet等工具對系統進(jìn)行一定的操作。

  其他驅動(dòng)程序(如OLED顯示模塊、鍵盤(pán)、紅外收發(fā)器)都作為L(cháng)inux下的標準字符設備編寫(xiě),使用register_chrdev( )函數進(jìn)行注冊,提供了讀、寫(xiě)和控制操作。在Linux系統中,應用程序對字符設備的操作與文件的操作相同。

  Linux中設備驅動(dòng)程序可以通過(guò)模塊方式動(dòng)態(tài)地加載和卸載,也可以直接編譯到內核中。前者使用靈活,可以減小內核,但因嵌入式系統要求所有設備在初始化后全部就緒,不能在使用時(shí)加載設備的驅動(dòng)模塊。所以,本系統中所有的設備驅動(dòng)程序都直接編譯進(jìn)內核。

  每個(gè)設備驅動(dòng)程序在用戶(hù)空間對應一個(gè)設備文件,由文件系統管理。本系統使用ext2作為根文件系統。為了開(kāi)發(fā)和升級方便,首先將根文件系統做成RAMDISK格式,所謂RAMDISK就是系統啟動(dòng)后將壓縮的文件解壓到內存,形成一個(gè)虛擬硬盤(pán);然后,將引導程序、內核映像及根文件系統燒寫(xiě)到Flash中。

  系統加電后,引導程序將內核映像從Flash中調入內存,然后從核入口開(kāi)始執行:首先初始化CPU,然后加載各個(gè)設備驅動(dòng)程序,最后掛載文件系統,執行應用程序。

  2.2 應用程序設計

  Linux是多任務(wù)系統,支持多線(xiàn)程及多進(jìn)程。多線(xiàn)程的優(yōu)點(diǎn)是線(xiàn)程比進(jìn)程小,可以使應用更輕便,線(xiàn)程間通信方便;缺點(diǎn)是所有線(xiàn)程使用同一個(gè)地址空間,如果一個(gè)線(xiàn)程出現問(wèn)題,整個(gè)系統將受影響;而進(jìn)程各自占有一份內存空間,可以增強系統的穩定性,但是多進(jìn)程增加了系統開(kāi)銷(xiāo),進(jìn)程間通信復雜。為此,根據實(shí)際情況,考慮到系統穩定性,本系統采取兩者相結合的方式分別完成數據采集處理及文件傳輸功能。

  2.2.1 數據采集處理
  數據采集處理是一個(gè)進(jìn)程,它包括主線(xiàn)程和輔線(xiàn)程。主線(xiàn)程完成電子標簽卡信息的讀取、寫(xiě)入、實(shí)時(shí)顯示及查詢(xún);輔線(xiàn)程實(shí)現一個(gè)時(shí)鐘以提供用戶(hù)當前時(shí)間,并定時(shí)對電池的電量進(jìn)行檢測和動(dòng)態(tài)顯示,在電量過(guò)低時(shí)發(fā)出警告。

  應用程序用MAIL命令方式完成電子標簽卡的讀寫(xiě)。該進(jìn)程首先初始化屏幕,然后等待按鍵中斷,當有鍵按下時(shí),根據鍵值執行相應的工作;當指定時(shí)間內沒(méi)有鍵按下,系統則進(jìn)入休眠狀態(tài),從而達到省電的目的。程序流程圖如圖6。


  當成功采集到標簽卡信息后,應用程序將卡信息(包括卡號、卡狀態(tài)、用戶(hù)數據及當前時(shí)間)通過(guò)OLED顯示屏提供給用戶(hù),并寫(xiě)入一個(gè)文件進(jìn)行記錄。由于文件傳輸進(jìn)程會(huì )將該文件傳輸到上位機,所以當讀寫(xiě)文件時(shí)要將文件上鎖。Linux提供了文件鎖以防止不同進(jìn)程同時(shí)訪(fǎng)問(wèn)同一個(gè)文件。本文使用flock()函數對文件上鎖和解鎖。

  由于OLED是圖形點(diǎn)陣式顯示屏,而且Flash容量有限,所以不可能直接使用漢字字庫。系統預先提取所有用到的漢字、數字及字母的點(diǎn)陣數據,然后建立自己的字庫文件,從而使應用程序可以對漢字、數字及字母進(jìn)行顯示。

  2.2.2 文件傳輸
  文件傳輸是一個(gè)進(jìn)程,完成卡信息的上傳及其他數據的下載。與上位機通信采用Clinet/Server模型。該進(jìn)程實(shí)質(zhì)上是一個(gè)服務(wù)器端(本系統)的應用程序,它循環(huán)等待客戶(hù)端(上位機)的連接請求。當請求到達時(shí),首先判斷請求來(lái)自哪個(gè)接口(USB或者紅外接口),然后根據請求的類(lèi)型執行相應的上傳或下載??紤]到實(shí)際應用中可能會(huì )使用多臺手持式閱讀器,為了方便上位機對信息的管理,規定文件名由手持式閱讀器編號和文件上傳序號組成,程序在上傳文件時(shí)自動(dòng)將其編號及上傳序號加入文件名。該進(jìn)程的流程如圖7。

3 系統電源管理

  本系統使用鋰電池為系統供電。為了延長(cháng)電池的續航能力,將應用程序設計為三種運行狀態(tài):上電空閑狀態(tài)、程序執行狀態(tài)及系統睡眠狀態(tài)。當用戶(hù)不進(jìn)行任何操作時(shí),系統將進(jìn)入睡眠狀態(tài)以達到省電目的。系統的睡眠是基于微處理器的電源管理功能實(shí)現的,進(jìn)入睡眠的步驟如下:

  (1)關(guān)閉所有外設;
  (2)保存當前系統狀態(tài);
  (3)使SDRAM進(jìn)入自刷新模式;
  (4)設置喚醒事件,使微處理器進(jìn)入睡眠狀態(tài)。

  當喚醒事件發(fā)生時(shí),如有鍵按下,則執行系統復位。過(guò)程如下:

  (1)恢復部分微處理器的寄存器;
  (2)喚醒外部設備,系統開(kāi)始運行。

  本文介紹了在A(yíng)T91RM9200高性能ARM芯片上運行嵌入式Linux,結合TagMaster AB公司功能強大的射頻識別模塊S1510實(shí)現式標簽卡的信息采集和處理。系統使用方便、靈活。另外,為克服LCD低溫無(wú)法工作、亮度不夠及耗電大的缺點(diǎn),采用OLED顯示模塊使系統可以在惡劣環(huán)境下應用,并增加了電池的續航能力;為使系統與上位機通信方便,采用了支持熱插拔的USB接口。

參考文獻

1 Rubini A著(zhù),魏永明譯.LINUX設備驅動(dòng)程序(第二版)[M].北京:中國電力出版社,2002
2 張 娟,吳大偉.應用式數據采集與處理系統的研究[J].微型電腦應用,2005;21(6)
3 蔡 震,蔣輝柏,周利華.Linux系統下USB設備驅動(dòng)程序的開(kāi)發(fā)[J].計算機測量與控制,2003;11(2)
4 TagMaster AB. Sweden.Handheld Confi Talk Reference Manual[Z].2003
5 TagMaster AB.Programmer′s Guide LockTag Handheld[Z].2005
6 Robert Love.Linux Kernel Development(Second Edition)[M].北京:機械工業(yè)出版社,2005

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: RFID 嵌入式 Linux 便攜

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>