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

正文內(nèi)容

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

2025-02-14 17:29 本頁面
 

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