freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm的茶園wsns旱情監(jiān)測網(wǎng)關(guān)設(shè)計(jì)終稿-資料下載頁

2025-06-28 00:14本頁面
  

【正文】 nux/頭文件中,具體路徑在../。在這個數(shù)據(jù)類型中,每一個成員變量指向驅(qū)動程序中特定操作的函數(shù),對于沒有的操作函數(shù),相應(yīng)的成員函數(shù)可以設(shè)置成NULL。struct file_operations{struct module *owner。loff_t(*llseek)(struct file *,loff_t,int)。ssize_t(*read)(struct file *,char *,size_t,loff_t *)。ssize_t(*write)(struct file *,const char *,size_t,loff_t *)。int(*readdir)(struct file *,void *,filldir_t)。 . . . . . .}。其中,最常用的是read(讀設(shè)備)、write(寫設(shè)備)、ioctl(控制函數(shù))、open(打開設(shè)備)、release(釋放設(shè)備)5大函數(shù)。設(shè)備驅(qū)動程序通常包含3個最主要的部分:驅(qū)動程序的注冊和注銷;設(shè)備的打開和釋放;設(shè)備的讀寫操作。驅(qū)動程序的注冊和注銷由register_chrdev和unregister_chrdev函數(shù)完成,其具體路徑在../。int register_chrdev(unsigned int major,const char *name,struct file_operations *fops):major定義了設(shè)備的主設(shè)備號,*name定義了設(shè)備驅(qū)動名,*fops定義了驅(qū)動程序?qū)?yīng)的結(jié)構(gòu)體名;int unregister_chrdev(unsigned int major,const char * name):各定義同上。除了以上函數(shù)外,如果用戶想實(shí)現(xiàn)中斷服務(wù)程序,則可以在設(shè)備驅(qū)動程序中添加相應(yīng)的中斷程序,對于不支持中斷的設(shè)備,需要在讀寫時(shí)使用輪詢的方式查看設(shè)備的狀態(tài)。下面是CS8900芯片硬件接口驅(qū)動的具體實(shí)現(xiàn)。 CS8900驅(qū)動程序設(shè)計(jì) 的內(nèi)核里沒有包含CS8900芯片的驅(qū)動,在網(wǎng)上下載驅(qū)動源碼, 拷貝到內(nèi)核下的drivers/net 目錄,在實(shí)際實(shí)現(xiàn)過程中,而且修改內(nèi)容并不太多。1)初始化函數(shù)網(wǎng)絡(luò)的初始化主要由device結(jié)構(gòu)中的init函數(shù)指針?biāo)傅某跏蓟瘮?shù)來完成的。加載網(wǎng)絡(luò)模塊后,就會調(diào)用初始化過程。首先檢測網(wǎng)絡(luò)物理設(shè)備是否存在,這是通過檢測物理設(shè)備的硬件特征完成的,之后配置設(shè)備所需要的資源。這些完成之后就要構(gòu)造設(shè)備的device數(shù)據(jù)結(jié)構(gòu),用檢測到的數(shù)據(jù)初始化device中的相關(guān)變量,最后向Linux內(nèi)核中注冊設(shè)備并申請內(nèi)存空間。int init_module(void){struct net_local *lp。int ret=0。=irq。 //初始化中段請求號=io。 //初始化網(wǎng)絡(luò)接口的I/O基地址=cs8900_probe。 //初始化init函數(shù)為cs8900_probe=kmalloc(sizeof(struct net_local),GFP_KERNEL)。......}cs8900_probe函數(shù)檢測網(wǎng)絡(luò)物理設(shè)備是否存在,設(shè)備初始化實(shí)際是由cs8900_porbe和cs8900_probe1兩個函數(shù)共同完成的。Init_module函數(shù)最后通過register_netdev(struct net_device *deb)函數(shù)進(jìn)行注冊。2)卸載函數(shù)模塊卸載是通過cleanup函數(shù)實(shí)現(xiàn)的,它是每個驅(qū)動程序必備的函數(shù)。它主要完成資源的釋放工作,如取消設(shè)備注冊、釋放內(nèi)存、釋放端口等。下面是網(wǎng)關(guān)的才cleanup函數(shù)。Void cleanup_module(void) { if (!=NULL){/*Free up the private strcture,or leak memeory :) */ nregister_netdev(amp。dev_cs89X0)。 outw(pp_ChipID,+ADD_PORT)。 kfree()。 =NULL。/*getsreallocated by cs89X0_probe1 */ /* If we don39。t do this,we can39。t reinsmod it later. */ release_region(, NETCARD_IO_EXTENT)。 } } 3)其他函數(shù) Cs8900的打開net_open、關(guān)閉net_close、接收net_rx、發(fā)送net_send_packet和中斷處理net_interrupt基本上沒有做修改,在此不在贅述。接下來我們需要修改配置菜單,增加cs8900 配置選項(xiàng)。打開/,在config DM9000 后面增加以下內(nèi)容:config ARM_CS8900tristate CS8900 supportdepends on NET_ETHERNET amp。amp。 ARM amp。amp。 ARCH_SMDK2410helpSupport for CS8900A chipset based Ethernet cards. If you have a network (Ethernet) card of this type, say Y and read the EthernetHOWTO, available from as well asfile:Documentation/networking/. To pile this driver as a module, chooseM here and read file:Documentation/networking/. The module will becalled .在此增加cs8900 的配置選項(xiàng),這個配置選項(xiàng)位于Device Drivers 224。Network device support 224。Ethernet(10 or 100Mbit) 224。*CS8900 support接下來需要增加以太網(wǎng)口CS8900芯片的初始化代碼。新建一個頭文件/ifndef _INCLUDE_SMDK2410_H_define _INCLUDE_SMDK2410_H_include linux/define pSMDK2410_ETH_IO 0x19000000define vSMDK2410_ETH_IO 0xE0000000define SMDK2410_ETH_IRQ IRQ_EINT9endif // _INCLUDE_SMDK2410_H_打開文件/:include asm/archs3c2410/Static struct map_desc smdk2410_iodesc[] __initdata = {{vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE},}修改drivers/net/makefile,在這個文件中增加如下內(nèi)容:obj$(CONFIG_ARM_CS8900) += 到這一步CS8900以太網(wǎng)口芯片的驅(qū)動已經(jīng)增加完成。 本章小結(jié) 本章介紹了WSNs網(wǎng)關(guān)系統(tǒng)嵌入式軟件平臺的搭建,包括交叉編譯環(huán)境的建立、Bootloader、Linux kernel、文件系統(tǒng)的移植,并重點(diǎn)介紹了CS8900以太網(wǎng)口芯片的驅(qū)動程序?qū)崿F(xiàn)。5 遠(yuǎn)程數(shù)據(jù)傳輸方式設(shè)計(jì)與實(shí)現(xiàn)無線傳感器網(wǎng)絡(luò)與外部網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程數(shù)據(jù)傳輸?shù)倪^程中,網(wǎng)關(guān)處于承上啟下的地位,是數(shù)據(jù)傳輸?shù)闹袠泄?jié)點(diǎn)。因此,網(wǎng)關(guān)通信軟件的設(shè)計(jì)至關(guān)重要,也是本論文的一大技術(shù)難點(diǎn)。這部分程序主要包括串口讀寫程序和網(wǎng)絡(luò)數(shù)據(jù)收發(fā)程序。 網(wǎng)關(guān)與匯聚節(jié)點(diǎn)的通信實(shí)現(xiàn)網(wǎng)關(guān)與匯聚節(jié)點(diǎn)之間的通信主要是指網(wǎng)關(guān)接收匯聚節(jié)點(diǎn)數(shù)據(jù)的過程,一般采用串口通信方式。 Linux下的串口通信在本論文中網(wǎng)關(guān)與匯聚節(jié)點(diǎn)之間的通信是通過串口實(shí)現(xiàn)的,因此,需要網(wǎng)關(guān)應(yīng)用軟件中編寫串口通信程序。由于Linux中實(shí)現(xiàn)了串口驅(qū)動程序,內(nèi)核有一個設(shè)備驅(qū)動程序來負(fù)責(zé)串口的輸入輸出,對串口的操作可通過設(shè)備文件來實(shí)現(xiàn)讀取。其編程就是調(diào)用相應(yīng)的open、write、read等函數(shù)的過程。在Linux操作系統(tǒng)中,所有設(shè)備都以設(shè)備文件的形式存在于/dev目錄下,每一個設(shè)備都對應(yīng)一個主設(shè)備號和從設(shè)備號。串口等通信設(shè)備在linux系統(tǒng)中通常對應(yīng)于/dev/ttyS0、ttySttyS……,其中編號為0的是第一個串口(即COM1)。在Linux中,串行口的屬性參數(shù)全部反映在一個struct termios中,其結(jié)構(gòu)如下(Kurt Wall,2005):includedefine NCCS 19Struct termios{tcflag_t c_iflag。 /*輸入模式標(biāo)志(input mode flags)*/tcflag_t c_oflag。 /*輸出模式標(biāo)志(output mode flags)*/tcflag_t c_cflag。 /*控制模式標(biāo)志 (control mode flags)*/tcflag_t c_lflag。 /*局部模式標(biāo)志 (local mode flags)*/cc_t c_line。 /*行控制 (line discipline)*/. . . . . .}。其中含有大約50個標(biāo)志位,這些標(biāo)志位告訴串口驅(qū)動程序如何處理收發(fā)的字符,如何設(shè)置通信參數(shù)等。其中,c_ifiag為輸入模式標(biāo)志位字段,它定義了對串口收到的數(shù)據(jù)的處理過程,如忽略奇偶校驗(yàn)錯誤、CR與NL轉(zhuǎn)換等;c_oflag為輸出模式標(biāo)志位字段,定義了數(shù)據(jù)從串口發(fā)送之前的處理過程,最常用的是用來選擇用處理后的數(shù)據(jù)輸出還是用原始數(shù)據(jù)輸出;c_cflag為控制標(biāo)志位字段,它包含了串口的數(shù)據(jù)寬度、奇偶校驗(yàn)、停止位、波特率、硬件流控等信息。為了方便編程,Linux系統(tǒng)還包含了一系列針對與termios結(jié)構(gòu)的設(shè)置函數(shù),用來完成獲取和設(shè)置串口屬性,設(shè)置波特率等功能。通過這些專用通信函數(shù),可以方便的在Linux下設(shè)置串行口的屬性。另外,在Linux下串口是以設(shè)備文件的形式存在,因此其I/O函數(shù)與文件I/O函數(shù)是一致的,可以用open函數(shù)來打開一個串口,用read()和wtite()完成發(fā)送與接收,用close函數(shù)關(guān)閉串口等等。 Linux系統(tǒng)提供的串口設(shè)置函數(shù)函數(shù) 功能說明 tcgetattr 獲取串口屬性(termios結(jié)構(gòu)) tcsetattr 設(shè)置串口屬性(termios結(jié)構(gòu)) cfgetispeed 獲取輸入速率 cfgetospeed 獲取輸出速率 cfsetispeed 設(shè)置輸入速率 cfsetospeed 設(shè)置輸出速率 tcdrain 等待所有數(shù)據(jù)都發(fā)送完畢 tcflow 掛起或重新開始輸出 . . . . . .串口編程的步驟:1)打開串口設(shè)備 (/dev/ttyS1),設(shè)置打開方式;2)使用tcgetattr取得串口設(shè)備的當(dāng)前屬性;設(shè)置結(jié)構(gòu)termios成員c_iflag,c_oflag,c_lflag和c_cc的值;使用cfsetispeed和cfsetospeed設(shè)置波特率;使用tcsetatt設(shè)置設(shè)備屬性;3)使用read和write來讀寫串口;4)當(dāng)輸入輸出完畢后,關(guān)閉該串口,恢復(fù)原來的屬性。 匯聚節(jié)點(diǎn)數(shù)據(jù)幀在WSNs中,匯聚節(jié)點(diǎn)發(fā)送給網(wǎng)關(guān)的數(shù)據(jù)為主動消息(AM)幀結(jié)構(gòu),其結(jié)構(gòu)如下:int16_t addr。 //目標(biāo)地址uint8_t type。 //幀類型uint8_t group。 //組號 uint8_t length。 //數(shù)據(jù)長度int8_t data[TOSH_DATA_LENGTH] 。 //實(shí)際內(nèi)容 uint16_crc。 //CRC校驗(yàn)?zāi)繕?biāo)地址(2Bytes)類型 (1Byte)組號 (1Byte)數(shù)據(jù)長度(1Byte)實(shí)際內(nèi)容(24或27Bytes)CRC效驗(yàn)(2Bytes) 匯聚節(jié)點(diǎn)主動消息(AM)幀結(jié)構(gòu)數(shù)據(jù)總長度:2+1+1+1+24(或27)+2=31(34)字節(jié)。目前WSN數(shù)據(jù)的傳輸協(xié)議為 PPP in HDLClike Framing,所以,在最后通過無線方式發(fā)送之前,還要此數(shù)據(jù)包進(jìn)行封裝。封裝的主要工作是:1.幀的頭和尾都加上0xfd,作為標(biāo)識;2.對原始數(shù)據(jù)中的特殊字符,如0x7e,0x7d,進(jìn)行轉(zhuǎn)義,變?yōu)?個字符,即:0x7e→0x7d 0x5e、0x7d→0x7d 0x5d。可以看出實(shí)際內(nèi)容的長度并不是固定的,在本課題中匯聚節(jié)點(diǎn)發(fā)送的數(shù)據(jù)具有兩種幀類型:健康報(bào)告幀(0x03)和多跳幀(0x33),實(shí)際內(nèi)容長度分別為24和27。實(shí)例如下所示(以16進(jìn)制表示):1)健康報(bào)告幀原始數(shù)據(jù):fd 00 03 7d 18 00 00 34 00 00 11 d9 22 00 5b 02 00 00 16 00 b5 00 1d 00 00 fc 00 9d 92 fd封裝后數(shù)據(jù):fd 42 7d 5e 00 03 7d 5d 18 00 00 34 00 00 00 00 11 d9 2
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1