版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、短距離無線數(shù)據(jù)傳輸系統(tǒng)摘要:本文介紹一種基于WiFi模塊和Real6410開發(fā)板的短距離無線數(shù)據(jù)傳輸系統(tǒng),利用USB接口,完成了無線數(shù)據(jù)傳輸系統(tǒng)的數(shù)據(jù)發(fā)射和接收過程.該系統(tǒng)數(shù)據(jù)傳輸速度快、可靠性高、可擴展性強,可廣泛應用于各種短距離無線數(shù)據(jù)通信中。關鍵字:無線數(shù)據(jù)傳輸、短距離、終端、虛擬機一:前言現(xiàn)代通信技術的迅速發(fā)展使得許多應用領域都采用無線通信方式進行數(shù)據(jù)傳輸。隨著網(wǎng)絡及通信技術的飛速發(fā)展,人們對無線通信的需求越來越大,人們在享受蜂窩移動通信系統(tǒng)帶來的便捷的同時,對短距離的無線通信又提出了新的需求,這釋短距離的無線通信主要用于家庭、辦公室、商場等室內場所,有時也用于室外環(huán)境。這種技術的應用
2、大大改善了人們的生活與工作質量,對現(xiàn)有的無線長距離通信技術是一個很好的補充。同時又由于無線頻率資源的日漸珍貴,電子產品市場需求的激增,這其中的無線短距離通信技術更是受到了各國工業(yè)界和研究機構的廣泛關注。短距離無線數(shù)據(jù)傳輸最流行的標準有藍牙(Bluetooth),8021lbfW一Fi)幫IrDA,這些協(xié)議和標準各有優(yōu)劣,各有自己擅長的應用領域,有的適合于辦公環(huán)境,有的適合于個人應用,有的則更適合家庭用戶。 本文采用的是REAL6410開發(fā)板自帶的Wifi模塊通過路由器傳輸數(shù)據(jù),通過在Linux下編寫兩個socket的程序:server和client進行通信。網(wǎng)絡的Socket數(shù)據(jù)傳輸是一種特殊
3、的I/O口,socket也是一種文件描述符socket也有一個類似于打開文件的函數(shù):socket(),調用socket(),該函數(shù)返回一個整型的socket的描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮饕捕际峭ㄟ^該socket實現(xiàn)。通信時,服務端進行監(jiān)聽,在收到客戶端的連接后,發(fā)送數(shù)據(jù)給客戶端;客戶端在接受到數(shù)據(jù)后打印出來,然后關閉。在本次綜合實踐中,我們只能實現(xiàn)本機通信,采用了回環(huán)地址。二:硬件、軟件及操作系統(tǒng)的介紹2.1 Real6410開發(fā)板Real6410開發(fā)板是華天科技推出的高性能、高集成、廣擴展的一體化開發(fā)板。Real6410由底板和核心板兩部分組成。其中核心板命名為E6Cor
4、e。該板具有配置高端、外設接口多、性能穩(wěn)定、抗干擾能力強等特點。此外,Real6410開發(fā)板配有256M超大內存,徹底解決了以往開發(fā)板內存不足的問題。也正是如此,Real6410開發(fā)板成功地將開發(fā)和學習集合于一體,因而備受企業(yè)用戶和高校推崇,是當今國內外性價比最好的ARM11開發(fā)系統(tǒng)。2.2 S3C6410芯片S3C6410 是 SAMSUNG公司基于ARM1176的 16/32 位的高性能低功耗的 RSIC 通用微處理器,適用于手持、移動等終端設備。S3C6410 是一款低功率、高性價比、高性能的用于移動電話和通用處理RSIC 處理器。為 2.5G 和 3G 通信服務提供了優(yōu)化的硬件性能,采
5、用 64/32bit 的內部總線架構,融合了AXI、AHB、APB 總線。還有很多強大的硬件加速器,包括運動視頻處理、音頻處理、2D加速、顯示處理和縮放。一個集成的MFC(Multi-Format video Codec)支持 MPEG4/H.263/H.264 編解碼和 VC1 的解碼,這個硬件編解碼器支持實時的視頻會議以及 NTSC和 PAL 制式的 TV 輸出。此外還內置一個采用最先進技術的 3D 加速器,支持 OpenGL ES1.1/ 2.0 和 D3DM API 能實現(xiàn) 4M triangles/s 的 3D 加速。S3C6410 包括優(yōu)化的外部存儲器接口,該接口能滿足在高端通信服
6、務中的數(shù)據(jù)帶寬要求。接口分為兩路,DRAM 和 Flash/ROM/DRAM 端口。DRAM 端口可以通過配置來支持Mobile DDR、DDR、Mobile SDRAM、SDRAM。Flash/ROM/DRAM 端口支持 NOR-Flash,NAND-Flash,OneNAND,CF,ROM 等類型的外部存儲器和任意的 Mobile DDR、DDR、Mobile SDRAM、SDRAM 存儲器。2.2.1時鐘信號的產生6410需要四路時鐘信號,分別如下1、主時鐘,12MHZ 2、Video時鐘信號27HZ,用于顯示模塊,如MFC LCD TV模塊提供時鐘信號3、USB時鐘,48MHZ,用于U
7、SB SD卡SDIO提供時鐘信號4、RTC時鐘,32.768KHZ,用于實時時鐘模塊提供時鐘信號其是1 2 3可以選擇用有源晶振還是無源晶振,除主時鐘外,2和3都需要做CPU寄存器的配置才能產生相應的時鐘,即選擇無源還是有源的。而主時鐘用的是有源的還是無源的,由OM0引腳來配置,當OM0拉高時,使用無源晶振,當置低時,使用有源晶振,當使用無源晶振時,XEXTCLK引腳需要拉高。綜上所要求,設計如下所示,由于成本考慮,采用無源晶振2.2.2 Wifi模塊模塊要求3.3V供電,我們采用LDO LM1117-3.3為WIFI模塊供電。SD通道0接至WIFI模塊的SD接口,圖中LED2為連接指示燈,當
8、連接時,LED2會閃爍,連接成功后,LED2燈常亮。由于模塊是默認是SD卡接口連接,所以接口選擇可以不接。模塊的RESET引腳可以接至CPU的復位引腳,也可以不接。PDn引腳是上電使能引腳,模塊默認拉高,低電平關閉模塊供電。SD0通道0也接在iNAND上,兩者不能同時使用SD0,所以當使用iNAND時,不能使用WIFI模塊,反之亦然。2.3 NRF24L01無線收發(fā)模塊2.3.1簡介nRF24L01是一款新型單片射頻收發(fā)器件,工作于2.4 GHz2.5 GHz ISM頻段。內置頻率合成器、功率放大器、晶體振蕩器、調制器等功能模塊,并融合了增強型ShockBurst技術,其中輸出功率和通信頻道可
9、通過程序進行配置。nRF24L01功耗低,在以-6 dBm的功率發(fā)射時,工作電流也只有9 mA;接收時,工作電流只有12.3 mA,多種低功率工作模式(掉電模式和空閑模式)使節(jié)能設計更方便。2.3.2工作原理發(fā)射數(shù)據(jù)時,首先將nRF24L01配置為發(fā)射模式:接著把接收節(jié)點地址TX_ADDR和有效數(shù)據(jù)TX_PLD按照時序由SPI口寫入nRF24L01緩存區(qū),TX_PLD必須在CSN為低時連續(xù)寫入,而TX_ADDR在發(fā)射時寫入一次即可,然后CE置為高電平并保持至少10s,延遲130s后發(fā)射數(shù)據(jù);若自動應答開啟,那么nRF24L01在發(fā)射數(shù)據(jù)后立即進入接收模式,接收應答信號(自動應答接收地址應該與接
10、收節(jié)點地址TX_ADDR一致)。如果收到應答,則認為此次通信成功,TX_DS置高,同時TX_PLD從TX FIFO中清除;若未收到應答,則自動重新發(fā)射該數(shù)據(jù)(自動重發(fā)已開啟),若重發(fā)次數(shù)(ARC)達到上限,MAX_RT置高,TX FIFO中數(shù)據(jù)保留以便在次重發(fā);MAX_RT或TX_DS置高時,使IRQ變低,產生中斷,通知MCU。最后發(fā)射成功時,若CE為低則nRF24L01進入空閑模式1;若發(fā)送堆棧中有數(shù)據(jù)且CE為高,則進入下一次發(fā)射;若發(fā)送堆棧中無數(shù)據(jù)且CE為高,則進入空閑模式2。 接收數(shù)據(jù)時,首先將nRF24L01配置為接收模式,接著延遲130s進入接收狀態(tài)等待數(shù)據(jù)的到來。當接收方檢測到有效
11、的地址和CRC時,就將數(shù)據(jù)包存儲在RX FIFO中,同時中斷標志位RX_DR置高,IRQ變低,產生中斷,通知MCU去取數(shù)據(jù)。若此時自動應答開啟,接收方則同時進入發(fā)射狀態(tài)回傳應答信號。最后接收成功時,若CE變低,則nRF24L01進入空閑模式1。在寫寄存器之前一定要進入待機模式或掉電模式,如下圖spi操作機時序圖 圖2.5 SPI 寫操作2.4 Linux系統(tǒng) Linux是一套免費使用和自由傳播的類Unix操作系統(tǒng),是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng)。它能運行主要的UNIX工具軟件、應用程序和網(wǎng)絡協(xié)議。它支持32位和64位硬件。Linux繼承
12、了Unix以網(wǎng)絡為核心的設計思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡操作系統(tǒng)。它主要用于基于Intel x86系列CPU的計算機上。這個系統(tǒng)是由全世界各地的成千上萬的程序員設計和實現(xiàn)的。其目的是建立不受任何商品化軟件的版權制約的、全世界都能自由使用的Unix兼容產品。 Linux以它的高效性和靈活性著稱,Linux模塊化的設計結構,使得它既能在價格昂貴的工作站上運行,也能夠在廉價的PC機上實現(xiàn)全部的Unix特性,具有多任務、多用戶的能力。Linux是在GNU公共許可權限下免費獲得的,是一個符合POSIX標準的操作系統(tǒng)。Linux操作系統(tǒng)軟件包不僅包括完整的Linux操作系統(tǒng),而且還包括了文本
13、編輯器、高級語言編譯器等應用軟件。它還包括帶有多個窗口管理器的X-Windows圖形用戶界面,如同我們使用Windows NT一樣,允許我們使用窗口、圖標和菜單對系統(tǒng)進行操作。2.5 嵌入式系統(tǒng) 嵌入式系統(tǒng)是一種以應用為中心、以計算機技術為基礎、軟件硬件可裁剪、適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。它主要由嵌入式微處理器、外圍硬件設備、嵌入式操作系統(tǒng)和特定的應用程序四部分組成。嵌入式系統(tǒng)具有系統(tǒng)內核小、專用性強、系統(tǒng)精簡、實時性和可靠性高等特點,因而受到了人們的一致好評。2.6 VMware Workstation VMw
14、are Workstation 是VMware公司提供的一款功能強大的桌面虛擬計算機軟件,此軟件可以提供虛擬機功能,使計算機可以同時運行多個不同操作系統(tǒng)。用戶可在單一的桌面上同時運行不同的操作系統(tǒng),和進行開發(fā)、測試 、部署新的應用程序的最佳解決方案。VMware Workstation 可在一部實體機器上模擬完整的網(wǎng)絡環(huán)境,以及可便于攜帶的虛擬機器,具有極強的靈活性和實用性,是當今IT領域開發(fā)人員的必備工具之一。2.7 Ubuntu Ubuntu 是一個由全球化的專業(yè)開發(fā)團隊建造的操作系統(tǒng)它包含了:瀏覽器、Office套件、
15、多媒體程序、即時消息等應用程序。由于Ubuntu 項目完全遵從開源軟件開發(fā)的原則,并且鼓勵人們使用、完善并傳播開源軟件,因而Ubuntu操作系統(tǒng)有著十分廣闊的應用領域。三:設計方案3.1設計思路 本次用到的數(shù)字采集系統(tǒng),是用S3C6410的ADC模塊定時地從AIN引腳采集電壓信號,經模/數(shù) 轉 換 器ADC采樣、量化、編碼后,成為數(shù)字信號,存入數(shù)據(jù)存儲器,或通過無線方式將數(shù)據(jù)發(fā)送給接收端進行處理。無線數(shù)據(jù)傳輸系統(tǒng)就是這樣一套利用無線手段,將采集的數(shù)據(jù)由測量站發(fā)送出去。在本系統(tǒng)中采用無線傳輸模塊NRF24L01。短距離無線數(shù)據(jù)傳輸系統(tǒng)分以下幾個模塊1、定時模塊:使用硬件RTC作為定時裝
16、置;2、電壓采集模塊:使用實驗板上S3C6410的ADC采集電壓信號;3、數(shù)據(jù)接收、發(fā)送模塊:nRF2401數(shù)傳模塊、wifi模塊作為無線傳輸模塊;4、存儲模塊:將采集到的電壓信號存儲到TXT文本中;5、顯示模塊:無圖形界面;3.2數(shù)據(jù)采集程序流程圖:四:軟件配置過程4.1 Tftp服務器的建立sudo apt-get install tftp tftpd /安裝tftp/目錄下建一個 tftpboot, 把屬性改成 777cd / /轉至根目錄sudo mkdir tftpboot /新建tftp文件夾sudo chmod 777 tftpboot /改名在建立過程執(zhí)行到該步驟時,由于在et
17、c中缺少inetd.conf文件,需要先執(zhí)行sudo apt-get install openbsd-inetd /下載安裝軟件包的簡單命令行接口sudo apt-get install telnetdsudo gedit /etc/inetd.conf 先建立這樣的一個文件sudo vi /etc/inetd.conf將tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot添加到inetd.conf中重啟服務器sudo /etc/init.d/openbsd-inetd restartsudo i
18、n.tftpd -l /tftpboot測試tftp服務器在/tftpboot 文件夾下新建立一個文件cd /tftpboottouch test進入另外一個文件夾tftp> tftp get test服務器建立完成4.2 nfs配置過程sudo apt-get install nfs-kernel-server nfs-common rpcbind /安裝nfs客戶端sudo service rpcbind start /啟動客戶端showmount e /顯示nfs客戶端輸出清單配置 /etc/exports將/nfsboot *(rw,sync,no_root_
19、squash)添加到exportssudo exportfs r /更新exports文件sudo /etc/init.d/nfs-kernel-server restart /重啟客戶端sudo mount -t nfs 31:/nfsboot / /mnt /客戶端掛載df /顯示掛載情況sudo umount /mnt /取消掛載4.3交叉編譯環(huán)境的安裝與配置mv /home/liyuhuan/桌面/arm-2008q3.tar.bz2 /root/ /解壓包移至root下tar -xjvf arm-2008q3.tar.bz2 (或右鍵單擊提取文件) /解壓文件
20、gedit /etc/bash.bashrc /打開待編譯文本文件source /etc/bash.bashrc /啟動待編譯文件arm-linux-gcc v /完成交叉編譯在打開編譯文本中加入PATH=/root/ arm-2008q3/bin:$PATH export PATH,保存完成即可4.4mkcramfs的安裝將root_mkfs.tar.bz2移動到/usr/local/bin下先將文件移動到桌面,再往相應文件夾里移命令如下:Mv /home/liyuhuan/桌面/ root_mkfs.tar.bz2 /usr/local/bin/Mkcramfs配置命令如下:mv /hom
21、e/liyuhuan/桌面/root_mkfs.tar.bz2 /usr/local/bin/ /移動文件apt-get install cramfsprogs /文件安裝mkcramfs /文件執(zhí)行既可以完成mkcramfs的安裝4.5Uboot配置與編譯Mv home/tmp/ VMwareDnD /s3c-u-boot-1.1.6-Real6410.tar.bz2 /home/liyuhuantar jxvf s3c-u-boot-1.1.6-Real6410.tar.bz2home/liyuhuan/s3c-u-boot-1.1.6-Real6410./make_nand_image
22、/在s3c-u-boot-1.1.6-Real6410 目錄下產生u-boot.bin,home/liyuhuan/s3c-u-boot-1.1.6-Real6410 ./make_mmc_image /在s3c-u-boot-1.1.6-Real6410 目錄下產生u-boot_mmc.binuboot配置編譯完成4.6uboot 燒寫燒寫 SD 啟動uboota:打開tools/IROM_Fusing_Tool 工具。b:選擇SD卡所在盤符以及要燒錄的文件u-boot_mmc.bin。c:點擊START,進行燒寫。d:開啟tools/DWN應用程序,用USB轉串口線連接計算機和實驗箱并在W
23、indows上查找驅動的鏈接口標號。e:對DWN進行配置后點擊connect進行連接。f:格式化 NandFlash選擇選項 f(格式化flash)g:燒寫 NandFlash 啟動的 uboot選擇選項 u(下載固化在Nandflash中的u_boot.bin鏡像)à 添加USB驅動(/tools/USB驅動/secusb2.sys))à加載u-boot.bin文件(完成燒寫 NandFlash 啟動的 uboot工作)h:燒寫 Linux 內核選擇選項 k(下載Linux Kernel文件zImage)à加載linuxlinux-imagezImage(完成L
24、inux核的燒寫,下載root_mkfs.cramfs鏡像)àqi:燒寫 cramfs 根文件系統(tǒng)選擇選項c à加載linuxlinux-imageroot_mkfs.cramfs(完成cramfs 根文件系統(tǒng))j:燒寫 ubifs 根文件系統(tǒng)復制linuxlinux-imageqtopia.tar.gz到SD卡 à 選擇選項q à 進行屏幕校準uboot 配置與編譯4.7Linux內核的編譯(1)zImage鏡像文件的生成cd /home/liyuhuan/linux/s3c-linux--Real6410 /解壓cp Real6410
25、-3c.config .configapt-get install lie libncurses5-dev / 加載配置庫文件make menuconfig /生成配置菜單make zImage /生成鏡像文件(2)kconfig文件的配置在kconfig文件中加入命令將config S3C_AESbool "S3C AES support"depends on CPU_S3C6410default nhelp Say Y here if you want to use the S3C AES復制在endmenu上面修改如下:config LEDtristate "
26、;Real6410 leds support"depends on CPU_S3C6410default mhelp Say Y here if you want to use the S3C AESMakefile文件配置(3)在Makefile文件中obj-y +=led.oobj-$(CONFIG_LEGACY_PTYS)+= pty.o修改如下:obj-$(CONFIG_LED)+=led.oobj-$(CONFIG_LEGACY_PTYS)+= pty.o(4)動態(tài)鏈接配置real6410-3c文件中查找char如下文件CONFIG_MTD_CHAR=yCONFIG_MTD
27、_BLKDEVS=y修改如下:CONFIG_LED=m /配置后可生成.KO文件CONFIG_MTD_CHAR=yCONFIG_MTD_BLKDEVS=y(5)生成模塊在終端執(zhí)行Make modules指令4.8 ADC模塊驅動配置(1)將“adc.c”與“adc.h”放在“drivers à char”下(2)在“char”下的Makefile文件開頭添加如下指令:FONTMAPFILE = cp437.uniobj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o tty_buffer.o tty_port.
28、oobj-$(CONFIG_S3C6410_ADC)+= adc.oobj-y+= tty_mutex.o(3)在“char”下的在“Kconfig”文件中加入如下指令:config S3C6410_ADC tristate "S3C6410 ADC's driver" depends on (CPU_S3C6400 | CPU_S3C6410)default y -help- (4)刪除起先存在的“.config”,并執(zhí)行“cp Real6410_3d.config .config”指令(5)執(zhí)行“make menuconfig”指令(6)在開啟的配置菜單中的“L
29、oad an Alternate Configuration File”選項下載入“Real6410_3d.config”并作如下修改“Device Drivers à Character devices à <M> S3C6410 ADC's driver”(7)執(zhí)行“make modules”命令生成“adc.ko”文件(8)編寫“.sh”文件,簡化開啟adc驅動的過程#!/bin/shcp /mnt/sdcard/adc/adc.ko /lib/modules/ /復制驅動準備開啟modprobe adc /加載adc模塊,開啟驅動
30、lsmod /顯示所加載的模塊cd /mnt/sdcard/adc /轉入驅動所在文件夾方便指令開啟4.9minicom的安裝與nfs掛載命令(1):將編輯鏈接中的ipv4設置中方法改為“手動“,地址設置為11,子網(wǎng)掩碼為(2):網(wǎng)絡適配器仍為橋接方式,且打鉤“復制物理機地址”(3):用ifconfig查看板子IP,并相互ping同(4):下載minicom軟件,并查看網(wǎng)絡配置(注意:一般/dev/ttyUSBS0為超級終端接口)(相關網(wǎng)址:(5):在終端下輸入cp /home/liyuhuan/linux/helloworld1 /nfsboo
31、t/liyuhuan(helloworld1是在arm-linux-gcc -o helloworld1 helloworld.c生成的可執(zhí)行文件,可以在LED屏上執(zhí)行)helloworld.c文件#include <stdio.h>int main(int argc, char *argv)printf("Hello, World!n");(6):在超級終端下輸入minicom,執(zhí)行如下掛載命令:mount -o nolock 11:/nfsboot/ /mnt/nfs,在顯示屏上執(zhí)行cd /mnt/nfs/liyuhuan,ls 顯示h
32、elloworld1(7):在顯示屏上執(zhí)行./helloworld1,會看到hello,world !4.10 WLAN的啟動與配置 搜索 /proc 目錄,在/net目錄下發(fā)現(xiàn) wireless文件,說明wlan模塊及驅動已經加載 執(zhí)行 iwconfig 命令,查找wlan模塊,在eth1 執(zhí)行 ifconfig eth1 up,打開wlan 執(zhí)行 iwlist scanning,查找可用的無線網(wǎng)接入點 執(zhí)行 iwconfig
33、0;eth1 essid Diaosi,連接路由器(可能需要 iwconfig eth1 channel ?、iwconfig eth1 key off) 執(zhí)行 iwconfig,查看連接狀況 執(zhí)行 ifconfig eth1 雙機互ping,成功(板子上arp協(xié)議有問題,需要手動添加arp項,命令:arp s 9C:21:6A:7F:72:E8,路由器端的a
34、rp也最好設置一下。)附:路由器設置 無線名稱為ds 信道固定 模式11b only 不開啟無線安全 關閉WMM,關閉AP隔離 關閉DHCP 重啟無線 查看系統(tǒng)路由表,確定網(wǎng)關、子網(wǎng)掩碼、子網(wǎng)地址電腦連接設置: 手動指定ip地址,11 子網(wǎng)掩碼 默認網(wǎng)關 11 DNS:(任意)4.11 24L01無線模塊驅動配置(1)將“24L01.c”與“24L01.h”放在
35、“drivers à char”下(2)在“char”下的Makefile文件開頭添加如下指令:FONTMAPFILE = cp437.uniobj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o tty_buffer.o tty_port.oobj-$(CONFIG_24L01)+= 24L01.oobj-y+= tty_mutex.o(3)在“char”下的在“Kconfig”文件中加入如下指令:config 24L01 tristate "S3C6410 24L01's driver&q
36、uot; depends on (CPU_S3C6400 | CPU_S3C6410)default y -help- (4)執(zhí)行“make menuconfig”指令(5)刪除起先存在的“.config”,在開啟的配置菜單中的“Load an Alternate Configuration File”選項下載入“Real6410_3d.config”并作如下修改“Device Drivers à Character devices à <M> S3C6410 24L01's driver”(6)并執(zhí)行“cp Real6410_3d.config .co
37、nfig”指令(7)執(zhí)行“make modules”命令生成“24L01.ko”文件(8)編寫“.sh”文件,簡化開啟adc驅動的過程#!/bin/shcp /mnt/sdcard/24L01/24L01.ko /lib/modules/ /復制驅動準備開啟modprobe 24L01 /加載adc模塊,開啟驅動lsmod /顯示所加載的模塊cd /mnt/sdcard/24L01 /轉入驅動所在文件夾方便指令開啟五:主程序(1) ADC定時采集實現(xiàn)主程序:float timeuse; /定義當前累加時間float timeuse1; /定義上一次采集的累加時間 float t
38、imeused; /定義定時時間間隔 static timer_count = 0;int sockClient;char buf5;void adc1 () /adc1()電壓采集函數(shù)int fd = open("/dev/s3c6410_adc",O_RDWR); /打開"/dev/s3c6410_adc"/printf("*%d*n",fd);if(fd < 0)printf("open ADC device failed!n");exit(1);int i = 1; /定時時間內采集一次int ret
39、;time_t t = time(NULL); int data;unsigned int port = 0;int k=1;ioctl(fd,ADC_SET_PRSCVL,200); / ioctl是設備驅動程序中對設/備的I/O通道進行管理的函數(shù),返回值:成功為0,出錯為-1;while(i-)port = 0 ;ret = ioctl(fd,ADC_SET_SEL_MUX,port);ioctl(fd,ADC_SET_RESSEL,12);if(ret < 0 )switch(errno)case EFAULT:printf("argp references an ina
40、ccessible memory area.n");break;case EINVAL:printf("Request or argp is not valid.n");break;case ENOTTY:printf("d is not associated with a character special device.n");break;default:printf("undefined error!n");break;/perorr("the value of ioctl is %d n",ioc
41、tl(fd,port,1);ret = read(fd,&data,sizeof(data);if(ret != sizeof(data)printf("%f erorrn",errno);if(errno != EAGAIN)printf("read ADC device failed!n");continue;elsesprintf(buf,"%d",(int)data);send(sockClient,buf,strlen(buf),0);close(fd);void prompt_info(int signo) /定時
42、程序time_t t = time(NULL); /每兩秒采集一次,并輸出printf("%d prompt_info calledn", +timer_count); /輸出"prompt_info called"printf(" current time %s", ctime(&t); /顯示當前時間gettimeofday(&tpend,NULL);timeuse1=timeuse; timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpsta
43、rt.tv_usec; timeuse/=1000000;timeused=timeuse-timeuse1; adc1 (); /調用上述的電壓采集函數(shù),輸出采集電壓printf(" Used Time:%fn",timeused); /輸出間隔時間void init_sigaction(void) struct sigaction act; act.sa_handler=prompt_info; / 信號到了要執(zhí)行的任務處理函數(shù)為prompt_infoact.sa_flags=0; sigemptyset(&act.sa_mask); /初始化信號集sigact
44、ion(SIGPROF,&act,NULL); /建立信號處理機制gettimeofday(&tpstart,NULL); /開始計時void init_time() struct itimerval value; value.it_value.tv_sec=2; /設定執(zhí)行任務的時間間隔為2秒0微秒value.it_value.tv_usec=0; value.it_interval=value.it_value; /設定初始時間計數(shù)也為2秒0微秒setitimer(ITIMER_PROF,&value,NULL); /設置計時器ITIMER_REAL void so
45、cket_init() sockClient=socket(AF_INET,SOCK_STREAM,0);struct sockaddr_in addrSrv; addrSrv.sin_addr.s_addr=inet_addr("");/網(wǎng)絡服務器IP(由于這個程序是在本機上運行只能用這個)addrSrv.sin_family=AF_INET; /設置本機IPaddrSrv.sin_port=htons(uint16_t)123456); /設置端口connect(sockClient,(struct sockaddr*)&addrSrv,siz
46、eof(struct sockaddr);/連接服務器六:實現(xiàn)未能解決的問題(1)本次設計要求使用兩種方法傳輸數(shù)據(jù):nRF2401數(shù)傳模塊作為無線傳輸模塊;使用WiFi模塊通過路由器傳輸數(shù)據(jù)。但是我們小組僅實現(xiàn)利用WiFi模塊通過路由器傳輸數(shù)據(jù),第一種方法沒能實現(xiàn),原因是驅動程序未能解決,由于兩機之間wifi無法連接,只能實現(xiàn)本機兩個終端利用回環(huán)地址實現(xiàn)數(shù)據(jù)傳輸。(2)數(shù)據(jù)存儲可以使用自定義格式文件,也可采用某種嵌入式數(shù)據(jù)庫(如SQLite)。我們小組成員馮媛媛開始對嵌入式數(shù)據(jù)庫有相關研究,但是由于有一定難度,另外其他很多問題亟待解決,以至于我們沒采用嵌入式數(shù)據(jù)庫方式,在發(fā)送
47、程序中加入了存儲程序,存在一個文本中,但只能實現(xiàn)最后一個數(shù)據(jù)的存儲,前面的數(shù)據(jù)都被覆蓋,一直沒有解決掉。(3)程序界面可以有多種方式:無圖形界面方式、自建圖形界面方式、Qtopia界面方式、Android界面方式。由于時間有限,我們小組只實現(xiàn)無圖形界面方式,其他界面方式有待研究實現(xiàn)。七:實驗心得短距離無線數(shù)據(jù)傳輸系統(tǒng)的實現(xiàn)有效地簡化了數(shù)據(jù)傳輸?shù)膹碗s性,可以給人們的生活和工作帶來極大的方便,同時也是無線產業(yè)發(fā)展中的一項新的突破,本文只是簡單的介紹了它的實現(xiàn)過程,而其日后的推廣與發(fā)展還要經過不懈的努力,只有不斷地完善和創(chuàng)新才能使我們的成果得以廣泛應用,相信在不遠的未來,短距離無線數(shù)據(jù)將會在更多人的
48、努力下得到更好地發(fā)展,讓我們一起期待吧! 參考文獻1 馮國進Linux驅動程序開發(fā)實例機械工業(yè)出版社199524(1):161-1642 周立功 陳明計等ARM嵌入式Linux系統(tǒng)構建與驅動開發(fā)范例【M】北京航空航天大學出版社20063 陳文智嵌入式系統(tǒng)開發(fā)與原理實踐【M】清華大學出版社20064 美約瑟H多爾著,張林升等譯教育新理念教育科學出版社199878.4 ClaudiaSalzberg Rodiaguez Linux內核編程M機械工業(yè)出版社2006附錄:Ad_send.c實現(xiàn)源代碼#include <sys/time.h> #include <signal.h>
49、; #include <stdlib.h>#include <errno.h>#include <sys/ioctl.h>#include <linux/fcntl.h>#include <linux/ioctl.h> #include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h
50、>#include <stdio.h>#define ADC_IOC_MAGIC 100/*在代碼中使用不同的8位數(shù)字*/#define ADC_SET_SEL_MUX _IO(ADC_IOC_MAGIC,0) /設置通道#define ADC_SET_RESSEL _IO(ADC_IOC_MAGIC,1) /設置ADC精度define ADC_SET_PRSCVL _IO(ADC_IOC_MAGIC,2) /設置預分頻率struct timeval tpstart,tpend; float timeuse; /定義當前累加時間float timeuse1; /定義上一次采集
51、的累加時間 float timeused; /定義定時時間間隔 static timer_count = 0;int sockClient;char buf5;void adc1 () /adc1()電壓采集函數(shù)int fd = open("/dev/s3c6410_adc",O_RDWR); /打開"/dev/s3c6410_adc"/printf("*%d*n",fd);if(fd < 0)printf("open ADC device failed!n");exit(1);int i = 1; /定時時
52、間內采集一次int ret;time_t t = time(NULL); int data;unsigned int port = 0;int k=1;ioctl(fd,ADC_SET_PRSCVL,200); / ioctl是設備驅動程序中對設/備的I/O通道進行管理的函數(shù),返回值:成功為0,出錯為-1;while(i-)port = 0 ;ret = ioctl(fd,ADC_SET_SEL_MUX,port);ioctl(fd,ADC_SET_RESSEL,12);if(ret < 0 )switch(errno)case EFAULT:printf("argp refe
53、rences an inaccessible memory area.n");break;case EINVAL:printf("Request or argp is not valid.n");break;case ENOTTY:printf("d is not associated with a character special device.n");break;default:printf("undefined error!n");break;/perorr("the value of ioctl is %
54、d n",ioctl(fd,port,1);ret = read(fd,&data,sizeof(data);if(ret != sizeof(data)printf("%f erorrn",errno);if(errno != EAGAIN)printf("read ADC device failed!n");continue;elsesprintf(buf,"%d",(int)data);send(sockClient,buf,strlen(buf),0);close(fd);void prompt_info(i
55、nt signo) /定時程序time_t t = time(NULL); /每兩秒采集一次,并輸出printf("%d prompt_info calledn", +timer_count); /輸出"prompt_info called"printf(" current time %s", ctime(&t); /顯示當前時間gettimeofday(&tpend,NULL);timeuse1=timeuse; timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec; timeuse/=1000000;timeused=timeuse-timeuse1; adc1 (); /調用上述的電壓采集函數(shù),輸出采集電壓printf(" Used Time:%f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度地基資源買賣合同協(xié)議3篇
- 概率論課程設計小標題
- 2024-2025學年度山東省德州市臨邑博文中學高一第一學期第三次月考歷史試題
- 英語學科的課程設計方案
- 猜音符課程設計
- 網(wǎng)站課程設計收獲總結
- 班級班長培訓課程設計
- 穩(wěn)壓器課程設計
- 英語交際用語課程設計
- 教輔行業(yè)助理的工作總結和技能要求
- 江蘇省鹽城市、南京市2024-2025學年度第一學期期末調研測試高三政治試題(含答案)
- 2024-2025學年二年級數(shù)學上冊期末樂考非紙筆測試題(二 )(蘇教版)
- 光伏項目施工總進度計劃表(含三級)
- 中小微企業(yè)融資情況調查問卷
- 西門子s7200格式s7200硬件手冊
- 時間序列分析論文
- 職校生個人簡歷自薦信范文模板
- 交通標志結構計算書
- 汽車吊吊裝計算
- 個人獨資公司章程范本-
- 中國核電標準化組織方式及工作方案
評論
0/150
提交評論