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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于pic單片機(jī)的wifi控制系統(tǒng)設(shè)計(jì)(編輯修改稿)

2025-02-14 17:29 本頁面
 

【文章內(nèi)容簡介】 核心結(jié)構(gòu),包含了網(wǎng)絡(luò)驅(qū)動(dòng)層所需要的一切信息,如果需要一些設(shè)備信息,只需得到PRTMP_ADAPTER的指針即可。網(wǎng)絡(luò)操作函數(shù)注冊(cè)到內(nèi)核后,內(nèi)核就可以使用網(wǎng)絡(luò)驅(qū)動(dòng)程序提供的一系列的服務(wù),usb_rtusb_sendpkt此函數(shù)很重要,當(dāng)有網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送時(shí)會(huì)調(diào)用此函數(shù)。usb_rtusb_init_device函數(shù)是RT73模塊真正的初始化過程,一些配置信息和核心線程都是在這個(gè)函數(shù)中實(shí)現(xiàn)的。usb_rtusb_init_device函數(shù)實(shí)現(xiàn)了網(wǎng)卡具體的初始化過程。課題關(guān)注的是網(wǎng)卡的初始化過程,網(wǎng)卡的基帶芯片是一個(gè)8051核的微控制器,為了保證處理速度,網(wǎng)卡的內(nèi)置程序并沒有固化在基帶芯片中,而是需要在每一次上電后由USB的Control傳輸下載到基帶芯片中的SRAM中,所以網(wǎng)卡初始化的第一步就是下載固化程序,而基帶芯片的工作狀態(tài)和配置信息都存放在特定的控制寄存器中,所以控制寄存器也是初始化的重點(diǎn)。 網(wǎng)卡初始化流程圖,當(dāng)收到數(shù)據(jù)包后,隨即將此函數(shù)作為tasklet被調(diào)度,在系統(tǒng)某個(gè)特定的安全事件運(yùn)行在軟件中斷的執(zhí)行現(xiàn)場。無線網(wǎng)卡的配置信息一般來自于用戶的配置文件,當(dāng)然也會(huì)有一些默認(rèn)的配置。在網(wǎng)卡初始化時(shí),這些配置信息會(huì)被引用。無論是發(fā)送和接收網(wǎng)卡驅(qū)動(dòng)都實(shí)現(xiàn)了一些數(shù)據(jù)結(jié)構(gòu)來維護(hù)需要發(fā)送的數(shù)據(jù),這樣可以保證數(shù)據(jù)發(fā)送的輕重緩急,更有效的進(jìn)行數(shù)據(jù)通信。RT2571硬件初始化部分是關(guān)注的重點(diǎn),當(dāng)采用MCU驅(qū)動(dòng)無線網(wǎng)卡時(shí),同樣需要進(jìn)行硬件的初始化操作,所以這部分的流程是一樣的。Mlme線程用于連接路由的操作,本身是一個(gè)復(fù)雜的狀態(tài)機(jī),Cmd線程是命令隊(duì)列線程,這個(gè)線程會(huì)將用戶的操作轉(zhuǎn)換為命令發(fā)送到Mlme線程中,來改變網(wǎng)絡(luò)運(yùn)行狀態(tài)。RT73無線網(wǎng)卡的數(shù)據(jù)發(fā)送和接受流程, 數(shù)據(jù)發(fā)送流程圖在usb的probe函數(shù)里,會(huì)初始化發(fā)送和接收相關(guān)的數(shù)據(jù)結(jié)構(gòu): 。驅(qū)動(dòng)程序?qū)崿F(xiàn)了幾個(gè)發(fā)送隊(duì)列,當(dāng)內(nèi)核調(diào)用網(wǎng)卡的發(fā)送函數(shù)后,送入的skb網(wǎng)絡(luò)數(shù)據(jù)將被傳入不同的發(fā)送隊(duì)列,這里的發(fā)送函數(shù)本身是異步的,是可以被內(nèi)核重入的,也就是說操作系統(tǒng)中運(yùn)行的不同函數(shù)有可能會(huì)“同時(shí)”調(diào)用發(fā)送函數(shù),所以這些由內(nèi)核發(fā)送來的skb數(shù)據(jù)包就會(huì)安放在發(fā)送隊(duì)列里等待發(fā)送,由上流程圖可以看出,每次skb數(shù)據(jù)包放入發(fā)送隊(duì)列后,隨即調(diào)用出列函數(shù)RTMPDeQueuePacket,此函數(shù)除了直接被RTMPSendPacket函數(shù)調(diào)用外,還會(huì)被發(fā)送完成的回調(diào)函數(shù)調(diào)用,來檢測是否有未發(fā)送完的數(shù)據(jù)。以上是典型的多任務(wù)處理機(jī)制。這里比較重要的函數(shù)是RTUSBHardTransmit函數(shù),和RT73發(fā)送描述符的封裝,也就是說要搞清楚RT73無線網(wǎng)卡的工作原理,這個(gè)函數(shù)提供了詳細(xì)的信息。 。_TXD_STRUC結(jié)構(gòu)體說明了RT73發(fā)送描述符,RT73發(fā)送描述符一共占用6個(gè)字節(jié),它處于整個(gè)發(fā)送幀的最前面。發(fā)送描述符描述了此發(fā)送幀對(duì)RT2571基帶芯片具體的發(fā)送要求,基帶芯片會(huì)根據(jù)發(fā)送描述符改變發(fā)送狀態(tài),最終將數(shù)據(jù)幀發(fā)送出去,重要的位說明:MoreFrag位,是否有更多的數(shù)據(jù)片等待發(fā)送,需要將數(shù)據(jù)幀分成片。不過一般而言上層的TCP/IP協(xié)議可以設(shè)置網(wǎng)絡(luò)包最大長度,所以可以將TCP/,這樣就消除了數(shù)據(jù)分片的可能性。ACK 位,是否需要ACK應(yīng)答,因?yàn)闊o線媒介的不確定性,一般都需要進(jìn)行應(yīng)答。DataByteCnt 域,指明數(shù)據(jù)幀的長度。CipherAlg 域,指明此幀的加密方式,根據(jù)加密方式的不同,基帶芯片會(huì)進(jìn)行不同的加密處理。接收數(shù)據(jù)流程: 接收數(shù)據(jù)流程圖接收過程,采用了tasklet 機(jī)制,這是一種比較常見的機(jī)制,通常用于減少中斷處理的時(shí)間,為了最大程度的避免中斷處理時(shí)間過長而導(dǎo)致中斷丟失,有時(shí)候內(nèi)核需要把一些在中斷處理中不是非常緊急的任務(wù)放在后面執(zhí)行,而讓中斷處理程序盡快返回將本應(yīng)該是在中斷服務(wù)程序中完成的任務(wù)轉(zhuǎn)化成軟中斷完成。當(dāng)RT73網(wǎng)卡連接上時(shí),內(nèi)核調(diào)用probe函數(shù)時(shí)裝載了RTUSBBulkRxHandle軟中斷例程,這個(gè)軟中斷會(huì)在系統(tǒng)空閑的時(shí)候運(yùn)行,隨后RTUSBBulkRxHandle接收參數(shù)pAd,這個(gè)指針指向了包含了網(wǎng)卡的信息的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)PRTMP_ADAPTER,由這個(gè)數(shù)據(jù)接收可以獲得任何信息,也包括現(xiàn)在正在進(jìn)行BULKIN的urb的信息,這里可以判斷正在進(jìn)行的urb數(shù)據(jù)請(qǐng)求已啟動(dòng),如果已啟動(dòng)這時(shí)需調(diào)用RTUSBBulkRcecive函數(shù)進(jìn)行實(shí)際的urb傳輸,反之,如果urb已完成,并將處理后的數(shù)據(jù)包傳送到網(wǎng)絡(luò)系統(tǒng)的上層,通常是TCP/IP層,這里RTUSBRxPacket完畢后再調(diào)用urb傳輸。Urb傳輸完畢后,內(nèi)核會(huì)調(diào)用RTUSBBulkRxComplete函數(shù),此函數(shù)會(huì)檢測此次urb是否成功,然后重新裝載tasklet。由上圖可以看出,接收流程圖是一個(gè)封閉的回路,一旦開始接收例程后,接收操作就不會(huì)停止,所以RTUSBRxPacket是重要的處理函數(shù)。另外兩個(gè)核心的內(nèi)核線程MLMEthread和CMDthread主要是完成一些管理操作,這里不去深究,因?yàn)檎n題主要的目標(biāo)是實(shí)現(xiàn)底層的通信移植。 RT73無線網(wǎng)卡驅(qū)動(dòng)的裁剪和改寫本節(jié)進(jìn)行RT73單片機(jī)驅(qū)動(dòng)程序的具體移植,目標(biāo)如下:a) 實(shí)現(xiàn)對(duì)RT73無線網(wǎng)卡的初始化操作,進(jìn)行基本設(shè)置并讀取MAC地址。b) 實(shí)現(xiàn)RT73無線網(wǎng)卡基本數(shù)據(jù)幀的收發(fā)操作。c) 實(shí)現(xiàn)RT73模塊連接無線AP的功能( AP模式為不需加密,)。RT73無線網(wǎng)卡驅(qū)動(dòng)程序整體結(jié)構(gòu):,USB部分主要處理RT73無線網(wǎng)卡的初始化和BULK數(shù)據(jù)傳輸,主要有連接AP和封裝數(shù)據(jù)幀的功能。 ,可以建立如下的狀態(tài)機(jī)模型:enum { RT73_S_BROKEN, RT73_S_IDLE, RT73_S_SCAN, RT73_S_CONNECTING, RT73_S_CONNECTED, RT73_S_MASTER,}。默認(rèn)情況下,剛剛初始化完畢的驅(qū)動(dòng)程序處于IDLE狀態(tài),此時(shí)用戶發(fā)出一個(gè)SCAN指令,此時(shí)PIC32會(huì)發(fā)出probe requset幀,無線AP收到probe幀后,會(huì)返回probe response幀,當(dāng)收到需要連接到的AP的response幀后,PIC32會(huì)發(fā)出association request幀,相應(yīng)的AP會(huì)發(fā)出association response 幀,PIC32收到response幀后轉(zhuǎn)為CONNECTED狀態(tài)。下面分述具體的代碼部分:a) RT73無線網(wǎng)卡初始化RT73的初始化如下流程圖: 單片機(jī)RT73熱插拔流程圖RT73初始化在USB任務(wù)的中斷上下文中進(jìn)行,USBTask 被系統(tǒng)每隔一段段時(shí)間輪詢調(diào)用,當(dāng)系統(tǒng)檢測到USB連接中斷時(shí),會(huì)通知USBTask進(jìn)行設(shè)備枚舉操作,USBTask會(huì)獲得USB設(shè)備的描述符信息,進(jìn)行VID和PID比對(duì)后,此時(shí)確認(rèn)為RT73無線網(wǎng)卡,然后USBTask會(huì)回調(diào)RT73驅(qū)動(dòng)程序的初始化例程,開始網(wǎng)卡芯片的初始化。 單片機(jī)網(wǎng)卡初始化流程圖RT73Setup 進(jìn)行RT2571基帶芯片本身初始化,包括固件下載,這里的固件是被放在一個(gè)const型的數(shù)組中的,所以直接調(diào)用此數(shù)組發(fā)送到RT2571芯片即可;等待基帶芯片正常運(yùn)行,通過反復(fù)檢測一個(gè)狀態(tài)寄存器進(jìn)行;初始化基帶芯片控制寄存器為默認(rèn)值。RT73SetupEEprom 進(jìn)行eeprom中的默認(rèn)配置的讀取,其中就包括了射頻芯片信息的讀取,每個(gè)信道發(fā)射功率的配置,MAC地址等信息。rt2501_switch_channel 進(jìn)行初步的信道選擇,不進(jìn)行此步驟也可以,這僅僅用來測試。ieee80211_init 。b) ,可以分為控制幀,管理幀,和數(shù)據(jù)幀,其中管理幀和數(shù)據(jù)幀是必須使用到的,所以驅(qū)動(dòng)程序必須實(shí)現(xiàn)對(duì)管理幀和數(shù)據(jù)幀的處理。而控制幀主要用來對(duì)數(shù)據(jù)的分片和RTS,CTS進(jìn)行處理這部分對(duì)于簡單的通信來講是不需要的,所以并沒有實(shí)現(xiàn)控制幀的處理。: 上層封裝好的數(shù)據(jù)包一般是以太網(wǎng)數(shù)據(jù)包,因?yàn)樯蠈右话闶且粋€(gè)TCP/IP協(xié)議棧,故這里需要對(duì)以太網(wǎng)數(shù)據(jù)包進(jìn)行轉(zhuǎn)換,首先需去掉以太網(wǎng)幀頭,只保留IP包數(shù)據(jù),,一是加密模式,因?yàn)榧用苣J降牟煌瑫?huì)影響許多域的設(shè)置,這里只實(shí)現(xiàn)了簡單的無加密模式的封裝方式,二是地址域的裝填,addr1裝填關(guān)聯(lián)到的路由的MAC地址,addr2裝填RT73無線網(wǎng)卡的MAC地址(源地址),addr3裝填以太幀中的目的地址。,還需裝填基帶處理芯片的發(fā)送描述符,對(duì)于精簡的驅(qū)動(dòng)程序而言,如果選擇無加密模式,需要設(shè)置的發(fā)送描述域較少,而且一些域比較固定。將所有數(shù)據(jù)裝填好后,就可以調(diào)用USB發(fā)送函數(shù)發(fā)送數(shù)據(jù)了,真正的發(fā)送過程在中斷中啟動(dòng),并在中斷中確認(rèn)結(jié)束,這里可以選用兩種方案進(jìn)行USB發(fā)送過程,一種是等待USB發(fā)送過程的結(jié)束,一種是發(fā)送完畢后通知主程序。第一種方案效率比較低,第二種方案的軟件編寫較復(fù)雜,所以后面具體實(shí)現(xiàn)時(shí)采用了RTOS的方法。c) 和數(shù)據(jù)幀的發(fā)送相比,數(shù)據(jù)幀的接收比較復(fù)雜,因?yàn)閿?shù)據(jù)幀的發(fā)送本質(zhì)上是異步的,當(dāng)有數(shù)據(jù)幀需要發(fā)送時(shí),隨即調(diào)用發(fā)送函數(shù)將數(shù)據(jù)幀發(fā)送出去,而數(shù)據(jù)幀的接收本質(zhì)是一個(gè)中斷的過程,而USB總線的特點(diǎn)是主機(jī)輪詢,所以當(dāng)有數(shù)據(jù)幀放入基帶芯片的緩沖區(qū)中時(shí),基帶芯片不能主動(dòng)通知PIC32,而需要PIC32主動(dòng)試探,當(dāng)沒有數(shù)據(jù)時(shí),基帶芯片返回NAK握手包,直到有數(shù)據(jù)才返回?cái)?shù)據(jù),這樣PIC32的輪詢頻率就是一個(gè)關(guān)鍵的變量,輪詢的時(shí)間間隔不能過小,過小會(huì)導(dǎo)致CPU負(fù)荷較重,也不能間隔過大,過大會(huì)使數(shù)據(jù)通信延遲變大,綜合考慮將BULKIN,傳輸設(shè)置為1ms進(jìn)行一次,也就是每次sof包后立即進(jìn)行一次BULKIN傳輸。當(dāng)有數(shù)據(jù)時(shí)隨即進(jìn)行讀入,當(dāng)收到NAK握手包時(shí),等待下一次sof包后進(jìn)行BULKIN傳輸。: ,如果是管理幀,則我們直接進(jìn)行管理幀的封裝然后發(fā)送出去進(jìn)行響應(yīng),當(dāng)是網(wǎng)絡(luò)數(shù)據(jù)包時(shí),需要將數(shù)據(jù)包暫存起來然后經(jīng)由TCP/IP層協(xié)議處理。d) ,因?yàn)檫@里沒有實(shí)現(xiàn)linux中類似的MLME和CMD核心線程,所以一些類似的管理幀都由接收時(shí)的協(xié)議棧處理。圖 處理程序根據(jù)不同的幀的類型轉(zhuǎn)到了不同的處理函數(shù)中, 管理幀處理進(jìn)入ieee80211_input_mgt處理后,首先根據(jù)subtype域判定收到的幀狀態(tài),根據(jù)不同的幀狀態(tài)執(zhí)行不同的處理。probe response幀和beacon 幀的處理代碼相同,因?yàn)檫@兩種幀都是由AP發(fā)送出的用來宣告網(wǎng)絡(luò)存在的管理幀,這兩種幀包含的信息基本相同,通常情況下,無線AP會(huì)隔一段時(shí)間發(fā)送一個(gè)beacon幀,而probe response幀是在probe request幀發(fā)出后,無線AP的回應(yīng)幀,包括了無線網(wǎng)絡(luò)的參數(shù),BSSID,SSID,加密的方式,支持的速率等信息。當(dāng)收到beacon幀或probe response幀后,如果無線網(wǎng)卡處于SCAN狀態(tài)下,會(huì)將處理后的beacon幀結(jié)果傳入scan_callback回調(diào)函數(shù)中,在這個(gè)回調(diào)函數(shù)中,單片機(jī)會(huì)發(fā)送association幀,最終會(huì)和無線AP建立鏈路層的連接。數(shù)據(jù)幀處理流程, 數(shù)據(jù)幀處理數(shù)據(jù)幀一般有兩種類型,一種類型為NO_DATA數(shù)據(jù),此種數(shù)據(jù)只是無線AP為了求證工作站是否還存在于網(wǎng)絡(luò)中,每當(dāng)工作站有一段時(shí)間沒有進(jìn)行通信后,無線AP就會(huì)發(fā)送NO_DATA數(shù)據(jù)包;另外一種數(shù)據(jù)幀就是正常的網(wǎng)絡(luò)數(shù)據(jù)包。這里并沒有進(jìn)行數(shù)據(jù)的拷貝,主要是效率的考慮,直接利用USBIN傳輸?shù)慕邮站彌_區(qū),所以在以太網(wǎng)幀封裝好后立即進(jìn)行TCP/IP層的處理。 LWIP和FreeRTOS的移植WIFI控制系統(tǒng)僅僅有網(wǎng)卡驅(qū)動(dòng)是不夠的,還需實(shí)現(xiàn)上層TCP/IP協(xié)議,TCP/IP協(xié)議選用的是LWIP,輕量型的TCP/IP協(xié)議,實(shí)現(xiàn)了TCP/IP大部分的功能,此外,系統(tǒng)的軟件結(jié)構(gòu)決定了WIFI控制系統(tǒng)的數(shù)據(jù)實(shí)時(shí)性和吞吐率,一般而言,單片機(jī)程序的結(jié)構(gòu)為前后臺(tái)型。前后臺(tái)程序,中斷處理程序?yàn)榍芭_(tái)程序,main函數(shù)中的循環(huán)為后臺(tái)程序,當(dāng)有數(shù)據(jù)中斷主循環(huán)時(shí),系統(tǒng)會(huì)跳至中斷程序中對(duì)中斷數(shù)據(jù)進(jìn)行處理,中斷程序會(huì)設(shè)置全局變量通知主循環(huán)中的函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理,所以從數(shù)據(jù)中斷產(chǎn)生到對(duì)數(shù)據(jù)進(jìn)行處理之間有一個(gè)延遲,這個(gè)延遲決定于主循環(huán)的時(shí)間,如果主循環(huán)循環(huán)一次時(shí)間較長,或者有類似延時(shí)的阻塞代碼,此時(shí)響應(yīng)時(shí)間會(huì)大大增加。和前后臺(tái)程序相對(duì)應(yīng)的一種程序結(jié)構(gòu)是基于實(shí)時(shí)操作系統(tǒng)(RTOS)的結(jié)構(gòu),這個(gè)時(shí)候最底層運(yùn)行的是RTOS,每當(dāng)有數(shù)據(jù)中斷發(fā)生時(shí),數(shù)據(jù)處理任務(wù)一般處于一個(gè)較高的優(yōu)先級(jí)中,所以會(huì)搶占正在運(yùn)行的低優(yōu)先級(jí)的任務(wù)的CPU時(shí)間,此時(shí)中斷中的數(shù)據(jù)就會(huì)得到立即響應(yīng)。采用RTOS的缺點(diǎn)是RTOS本身就占用了一定的資源,所以RTOS一般用在資源相對(duì)豐富的嵌入式系統(tǒng)中。本節(jié)將LWIP協(xié)議棧和實(shí)時(shí)操作系統(tǒng)FreeRTOS放在一起主要是考慮這兩個(gè)組件聯(lián)系密切,LWIP是輕量級(jí)的IP協(xié)議棧,并且具有靈活的配置選項(xiàng),方便裁剪和配置。根據(jù)系統(tǒng)的需要和系統(tǒng)資源的限制,對(duì)LWIP進(jìn)行了裁剪和配置。移植LWIP最重要的是實(shí)現(xiàn)鏈路層的設(shè)備接口,故分別添加了iwnetif無線WiFi的接口定義和底層數(shù)據(jù)包的收發(fā)代碼,此外還需實(shí)現(xiàn)操作系統(tǒng)模擬層的代碼,這部分FreeRTOS支持的比較完善。 LWIP協(xié)議棧的移植LWIP的作者已經(jīng)為移植提供了框架和接口,移植需要改動(dòng)以下的文件:a) 這個(gè)文件中實(shí)現(xiàn)了操作系統(tǒng)模擬層,LWIP可以被配置為在RTOS中運(yùn)行,它內(nèi)部會(huì)有一個(gè)核心TCP/IP線程,這個(gè)TCP/IP線程在沒有數(shù)據(jù)包收到時(shí)處于阻塞狀態(tài),一旦有數(shù)據(jù)包收到,此時(shí)網(wǎng)卡接口層會(huì)向TCP/IP線程發(fā)送數(shù)據(jù)包的指針,TCP/IP線程接收到數(shù)據(jù)包指針開始處理收到的數(shù)據(jù)幀?;旧螰reeRTOS提供的系統(tǒng)服務(wù)能夠滿足LWIP的需要。b) 網(wǎng)絡(luò)接口層,LWIP作者已實(shí)現(xiàn)了程序框架,只要進(jìn)行修改即可。網(wǎng)絡(luò)接口層最終需要實(shí)現(xiàn)三個(gè)底層操作,分別是設(shè)備初始化,數(shù)據(jù)包接收和數(shù)據(jù)包發(fā)送,分別對(duì)應(yīng)的實(shí)現(xiàn)函數(shù)為low_level_init, low_level_input和low_level_output,low_level_init初始化中主要完成MA
點(diǎn)擊復(fù)制文檔內(nèi)容
電大資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1