嵌入式實驗報告_第1頁
嵌入式實驗報告_第2頁
嵌入式實驗報告_第3頁
嵌入式實驗報告_第4頁
嵌入式實驗報告_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、嵌入式系統設計與開發實驗報告書專業班級計132學 號139074059姓 名冉慶寒指導教師陶陶安徽工業大學計算機科學與技術學院實驗一 熟悉實驗開發環境一、實驗目的熟悉 ADS1.2 開發環境,學會 ARM 仿真器的使用。使用 ADS 編譯、下載、調試并跟蹤一段已有的程序,了解嵌入式開發的基本思想和過程。二、實驗內容本次實驗使用 ADS 集成開發環境。新建一個簡單的工程文件,并編譯這個工程文件。學習 ARM 仿真器的使用和開發環境的設置。 下載已經編譯好的文件到嵌入式控制器中運行。學會在程序中設置斷點,觀察系統內存和變量,為調試應用程序打下基礎。三、預備知識C 語言的基礎知識、程序調試的基礎知識

2、和方法。四、實驗設備及工具(包括軟件調試工具)硬件:ARM 嵌入式開發平臺、用于 ARM7TDMI 的 JTAG 仿真器、PC 機 Pentium100 以上、串口線。軟件:PC 機操作系統 win98、Win2000 或 WinXP、ARM SDT 2.51 或 ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序。五、實驗步驟1)建立工程(1)運行 ADS1.2 集成開發環境(CodeWarrior for ARM Developer Suite) 。選擇 FileNew菜單,在對話框中選擇 Project,如圖 1B-1 所示,新建一個工程文件。圖中示例的工程名為 Exp6.mc

3、p。點 set按鈕可為該工程選擇路徑如圖 1B-2 所示,選中 CreatFolder 選項后將以圖 1B-1 中的 ProjectName 或圖 1B-2 中的文件名為名創建目錄,這樣可以將所有與該工程相關的文件放到該工程目錄下,便于管理工程。在圖1B-1中工程模板列表中的44B0 ARM Executable Image是專為本嵌入式開發板設置的工程模板,后文有具體說明。在此也可選擇 ARM Executable Image 通用模板。(2)在新建的工程中,如圖 1B-3 所示,選擇 Debug 版本,使用 Edit | Debug Settings菜單對 Debug 版本進行參數設置。(

4、3) 在 Debug Settings 對話框中選擇 Target Settings 項, 如圖 1B-4 所示。 在 Post-linker一欄中選擇 ARM fromELF。(4)在 Debug Settings 對話框中選擇 ARM Linker 項,如圖 1B-5。在 Output 選項卡的Simple image 框中設置連接的 Read-Only (只讀) 和 Read-Write (讀寫) 地址。 地址 0x0c080000是開發板上 SDRAM 的真實地址, 是由系統的硬件決定的; 0x0c200000 指的是系統可讀寫的內存地址。也就是說,在 0x0c0800000xC1ff

5、fff 之間是只讀區域,存放程序的代碼段,在0xC200000 開始是程序的數據段。2) 進行程序的在線仿真、調試(1)回到圖 1B-12 所示的工程窗口選中 Debug 版本,執行菜單 Project | Make 對工程進行編譯連接。在出現的錯誤/警告窗口中選擇某錯誤/警告信息,ADS 會自動打開相應源文件并用箭頭指向出錯的文本行。如果某個源文件被修改,重新編譯時 ADS 會自動同步各文件的日期信息。(2)在 ADS 中執行菜單 Project | Debug 啟動 ADS1.2 的調試工具 AXD。(3) 在 AXD 中執行菜單 Options | Configure Target 對

6、AXD 進行設置。 如圖 1B-13 所示。選擇 ADP 即遠程調試,點 Configure 按鈕進一步設置具體參數,如圖 1B-14 所示。(4)在圖 1B-14 中點 Select 按鈕選擇遠程連接為 ARM ethernet driver,點 Configure 按鈕輸入仿真器的 IP 地址。如果用戶使用的是并行口仿真器,請輸入 127.0.0.1 即可。(5)等待程序裝載完畢以后,通過 Execute | Go 菜單以及 Execute | Stop(或者工具欄中的相應按鈕)運行或暫停程序。程序暫停后在窗口中將顯示出程序暫停的位置。(6)通過 Execute | Step 菜單(或者工

7、具欄中的相應按鈕)可以單步運行程序。也可以使用 Step In、Step Out 菜單命令進入或者跳出函數的調用。Run To Cursor 命令運行到光標位置。(7)程序停止后可以通過 Processor Views | Sources 菜單查看源文件,并可在適當位置按 F9 設置端點。(8)使用在 Processor View 菜單下的 Registers、Variables 和 Memory 命令可以查看工作寄存器或者內存變量。讀者可以逐一地嘗試,為以后調試程序打下基礎。注意:在進行調試時在 ADS 中必須選擇當前工程的 Debug 版本, 如果選擇 Release 版本則無法正常調試程

8、序。但在調試通過后就必須選擇 Release 版本進行編譯連接并將生產的system.bin 文件復制到開發板的 Flash 中。 實驗二 ARM串口實驗一、實驗目的掌握 ARM 的串行口工作原理。學習編程實現 ARM 的 UART 通訊。掌握 CPU 利用串口通訊的方法。二、實驗內容學習串行通訊原理,了解串行通訊控制器,閱讀 ARM 芯片文檔,掌握 ARM 的 UART相關寄存器的功能,熟悉 ARM 系統硬件的 UART 相關接口。編程實現 ARM 和計算機實現串行通訊:ARM 監視串行口,將接收到的字符再發送給串口(計算機與開發板是通過超級終端通訊的) ,即按 PC 鍵盤通過超級終端發送數

9、據,開發板將接收到的數據再返送給 PC,在超級終端上顯示。三、預備知識1、用 ARM SDT 2.5 或 ADS1.2 集成開發環境,編寫和調試程序的基本過程。2、ARM 應用程序的框架結構。3、了解串行總線四、實驗設備及工具硬件:ARM 嵌入式開發平臺、用于 ARM7TDMI 的 JTAG 仿真器、PC 機 Pentium100 以上、串口線。軟件:PC 機操作系統 win98、Win2000 或 WinXP、ARM SDT 2.51 或 ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序。五、實驗原理及說明1異步串行 IO異步串行方式是將傳輸數據的每個字符一位接一位(例如先低位、

10、后高位)地傳送。數據的各不同位可以分時使用同一傳輸通道,因此串行 IO 可以減少信號連線,最少用一對線即可進行。接收方對于同一根線上一連串的數字信號,首先要分割成位,再按位組成字符。為了恢復發送的信息,雙方必須協調工作。在微型計算機中大量使用異步串行 IO 方式,雙方使用各自的時鐘信號,而且允許時鐘頻率有一定誤差,因此實現較容易。但是由于每個字符都要獨立確定起始和結束(即每個字符都要重新同步),字符和字符間還可能有長度不定的空閑時間,因此效率較低。串行接口的物理層標準通用的串行 IO 接口有許多種,現僅就最常見的兩種標準作簡單介紹。1)EIA RS232C這是美國電子工業協會推薦的一種標準(E

11、lectronic industries Association Recoil-mendedStandard)。它在一種 25 針接插件(DB25)上定義了串行通信的有關信號。這個標準后來被世界各國所接受并使用到計算機的 IO 接口中。3ARM 自帶的串行口寄存器ARM 自帶兩個串行口, 各帶有 16 字節的 FIFO (先入先出寄存器) , 最大波特率 115.2K。每個 UART 有 7 種狀態:溢出錯誤,校驗錯誤,幀錯誤,暫停態,接收緩沖區準備好,發送緩沖區空,發送移位緩沖器空,這些狀態可以由相應的 UTRSTATn/UERSTATn 表示,并且與發送接收緩沖區相對應的有錯誤緩沖區。波特

12、率的可以通過控制波特率寄存器(UBRDIVn)控制,與 UART 有關的寄存器主要有以下幾個:UART 線性控制寄存器 ULCONn,其地址和各位的意義參見下表:UART 控制寄存器 UCONn,該寄存器決定 UART 的各種摸式。UART FIFO 控制寄存器 UFCONn,UART MODEM 控制寄存器,分別決定 UART FIFO 和 MODEM 的摸式。其中 UFCONn 的第 0 位決定是否啟用 FIFO, UMCONn 的第 0 位是請求發送位, 對我們來說是比較重要的讀寫狀態寄存器 UTRSTAT 以及錯誤狀態寄存 UERSTAT,可以反映芯片目前的讀寫狀態以及錯誤類型。FIF

13、O 狀態寄存器 UFSTAT 和 MODEM 狀態寄存器 UMSTAT,通過前者可以讀出目前 FIFO 是否滿以及其中的字節數;通過后者可以讀出目前 MODEM 的 CTS狀態。六、實驗步驟1新建工程,將“Exp2 ARM 串口實驗”中的文件添加到工程中,這些是啟動時所需要的文件。2定義與 UART 有關的各個寄存器地址和一些特殊的位命令。3編寫串口驅動函數(MyUart.c) 4在主函數中實現將從串口 0 接收到的數據發送到串口 0(Main.c)實驗三 ARM的 A/D 接口實驗 一、實驗目的 1熟悉 ARM 本身自帶的八路十位 A/D 控制器及相應寄存器。2編程實現 ARM 系統的 A/

14、D 功能。 3掌握帶有 A/D 的 CPU 編程實現 A/D 功能的主要方法。 二、實驗內容 學習 A/D 接口原理,了解實現 A/D 系統對于系統的軟件和硬件要求。閱讀 ARM 芯片文 檔,掌握 ARM 的 A/D 相關寄存器的功能,熟悉 ARM 系統硬件的 A/D 相關接口。利用外部 模擬信號編程實現 ARM 循環采集全部前 4 路通道,并且在超級終端上顯示。 三、預備知識 1、用 ARM SDT 2.5 或 ADS1.2 集成開發環境,編寫和調試程序的基本過程。2、ARM 應用程序的框架結構。3、能夠自己完成在 LCD 上顯示指定參量。 四、實驗設備及工具 硬件:ARM 嵌入式開發平臺、

15、用于 ARM7TDMI 的 JTAG 仿真器、PC 機 Pentium100 以 上、模擬電壓信號源。 軟件:PC 機操作系統 win98、Win2000 或 WinXP、ARM SDT 2.51 或 ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。五、實驗步驟 1新建工程,將“Exp5 ARM A/D 接口實驗”種的文件添加到工程。2編寫獲取轉換結果函數(main.c) 3主函數(main.c) 六、思考題1逐次逼近型的 A/D 轉換器原理是什么?答:逐次逼近型模數轉換器一般由順序脈沖發生器、逐次逼近寄存器、數模轉換器和電壓比較器等幾部分組成其原理框圖如圖所示:2 A/D 轉

16、換的重要指標包括哪些?答:分辨率、轉換速率、量化誤差、偏移誤差、線性度、滿刻度誤差3 ARM 的 A/D 功能的相關寄存器有哪幾個,對應的地址是什么?答:ADC控制寄存器(ADCCON) 0X58000000 ADC觸摸屏控制寄存器(ADCTSC) 0X5800000A ADC啟動延時寄存器(ADCDLY) 0X5800000C ADCDAT0 0X5800000C ADC轉換數據寄存器(ADCCON) ADCAT1 0X580000104如何啟動 ARM 開始轉換 A/D,有幾種方式?轉換開始時 ARM 是如何知道轉換哪路通道的?如何判斷轉換結束?答:方式一:軟件啟動 1. 定義與A/D轉換

17、相關的寄存器 2. 定義與A/D轉換相關的 寄存器初始化 3. RADCCON=0X1; 方式二:硬件啟動 1. 復位A/D轉換器 2. 外接用高電平觸發ADCCON0.轉換開始時ARM時知道轉換哪條通道的方式:通過對ADCCON5:3的未賦值來選擇通道。七、實驗總結 A/D 轉換器是模擬信號源和 CPU 之間聯系的接口,它將連續變化的模擬信號轉換為數字信號,以便計算機和數字系統進行處理、存儲、控制和顯示。上面的截圖即是ARM 在循環采集全部前3路通道時候隨機截圖的。實驗四 GUI繪圖實驗一、實驗目的 學習使用嵌入式系統繪圖的 API 函數。理解繪圖設備上下文( DC)在多任務操作系統中的作用

18、。會使用繪圖設備上下文( DC)在屏幕上繪制一個圓角矩形和一個圓。了解繪制動畫防止閃爍的基本原理,可以實現無閃爍的動畫。二、實驗內容 本次實驗通過使用嵌入式系統的繪圖 API 函數,首先,在屏幕上繪制一個圓角矩形和一個整圓。然后,再在屏幕上無閃爍的繪制一個移動的正弦波。三、預備知識1、用 ARM SDT 2.5 或 ADS1.2 集成開發環境,編寫和調試程序的基本過程。2、基于 uCOS-II 操作系統的應用程序的框架結構。四、實驗設備及工具(包括軟件調試工具)硬件: ARM 嵌入式開發平臺、用于 ARM7TDMI 的 JTAG 仿真器、 PC 機 Pentium100 以上。軟件: PC 機

19、操作系統 win98、 Win2000 或 WinXP、 ARM SDT 2.51 或 ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序五、實驗步驟1、新建工程,將“ Exp14 繪圖的 API 函數”中的文件加入工程。2、編輯 Main.c 文件,在 Main_Task 任務中加入代碼。使用操作系統的繪圖 API 函數,繪制出如圖所示的圖形。 提示:1)繪制整個圓可以用 Circle 函數,繪制直線用 LineTo 函數,繪制圓弧用 ArcTo 函數。調試的過程中可以在每次調用繪圖函數之后調用 OSTimeDly()函數,使系統更新顯示,輸出到液晶屏上。2)為方便繪圖,可使用 S

20、etDrawOrg 函數設置繪圖的原點。3)因為本次實驗不用系統的字符顯示,所以,可以去掉 Main()函數中 LoadFont()函數,以節省系統啟動的時間。3、用 ARM SDT 2.5 或 ADS1.2 編譯、下載并調試上述程序,檢查運行結果。4、在屏幕上無閃爍的繪制一個移動的正弦波。提示:1)繪制正弦波等有數學表達式的曲線時,可以根據平面幾何的知識通過數學計算得到曲線上點的坐標,然后用線段連起來構成整個曲線。兩幀畫面之間可以清屏擦掉原來圖形,然后重畫新圖形。2)因為繪圖需要使用 sin()函數,所以需要在 main.c 中加入#include 。5、用 ARM SDT 2.5 或 AD

21、S1.2 編譯、下載并調試上述程序,檢查運行結果。6、生成發行版本的.bin 文件,通過 USB 下載到嵌入式開發板中,運行并檢查輸出結果。六、思考題1怎樣實現復雜的圖形繪畫?如何利用象素的邏輯運算提高圖形重畫速度? 復雜代碼可以實現復雜的圖形繪畫2怎樣實現一個低速示波器,將 AD 采集的結果用曲線繪制出來? 用C語言模擬示波器實驗五 文件操作一、實驗目的 學習使用文件相關的 API 函數,了解在 uCOS-II 操作系統上擴展文件系統的情況。二、實驗內容 通過使用開發平臺提供的 API 函數,打開一個保存在 FLASH 海量存儲器中的英文文本文件,將其文件內容輸出顯示在液晶屏上。三、預備知識

22、1、用 ARM SDT 2.5 或 ADS1.2 集成開發環境,編寫和調試程序的基本過程。2、基于 uCOS-II 操作系統的應用程序的框架結構。3、操作系統原理中有關文件系統的知識,了解文本文件以及字符串的處理方法。4、使用 LCD_printf 向液晶屏輸出字符。四、實驗設備及工具(包括軟件調試工具)硬件: ARM 嵌入式開發平臺、用于 ARM7TDMI 的 JTAG 仿真器、 PC 機 Pentium100 以上。軟件: PC 機操作系統 win98、 Win2000 或 WinXP、 ARM SDT 2.51 或 ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序五、實驗原理

23、 uCOS-II 操作系統本身并沒有文件系統,不支持文件相關的管理功能。在將 uCOS-II 操作系統移植到 ARM 嵌入式開發平臺時參考 FAT16 為該系統擴展了一個簡單的文件系統,從而使該操作系統功能更強大,也符合實際嵌入式產品開發的需要。開發平臺的硬件中有一片容量至少 16M 的 NAND FLASH 存儲芯片作為嵌入式設備的固態數據存儲器, 或稱為電子硬盤。該存儲器由文件系統管理,在文件系統的功能函數與 FLASH 芯片之間有相關驅動程序實現高層系統功能和底層具體硬件的數據交換。嵌入式系統經常使用的存儲介質 FLASH 芯片具有和磁盤完全不同的結構特點,開發平臺上的 K9F2808U

24、0A 芯片具有 1024 個 Block,每個 Block 有 32 個 Page,每個 Page 有 51216528 個 Byte。這種芯片的讀寫操作具有以下特點:1)必須以 Page 為單位進行讀寫;2)寫之前必須先擦除原有內容;3)擦除操作必須對 Block 進行,即一次至少擦除一個 Block 的內容。針對這種情況,將一個 Page 定為一個扇區;將 2 個 Block 即 64 個扇區定為一個簇簇的容量正好為 5126432K,滿足 FAT16 對簇的要求。 FAT 是按簇為單位分配空間的,但其給出的地址 LBA( Logical Block Address)只是一個扇區號, 比如

25、 LBA=0x40 對于 FLASH芯片來說實際代表簇 2 的扇區 0。因此需要將 LBA 轉換為芯片的物理地址才可以進行數據存取操作。轉換關系如下: FLASH 的 BlockLBA/0x20; FLASH 的 Page LBA%0x20。 根據該公式就可以將 LBA 轉換為正確的 Block 和 Page,然后就可以用芯片的讀寫命令存取該 Block/Page 的數據了。FAT 文件系統包括 MBR 區, FAT 區, DIR 區, DATA 區。其中 MBR(主引導記錄)區在磁盤文件系統中也稱 0 扇區。硬盤上由于存在多個分區而在每個分區中還有 DBR( DOS引導記錄)區。 MBR 扇

26、區必須包括 BPB( BIOS Parameter Block),其中有對文件系統進行識別的關鍵信息。由于開發平臺的電子硬盤結構比較簡單并且不要求啟動, MBR 不必含有啟動代碼,但最后兩個字節必須是 0x55AA。關于引導扇區、 FAT 和 DIR 的詳細結構請參考相關資料。FLASH 前兩個 Block 的內容如下:在系統對 FLASH 芯片進行格式化操作時將 FAT 寫入芯片,使其邏輯空間符合文件系統的需要。當主機發出 READ 命令后, FLASH 讀寫操作開始,首先讀取 MBR 得到諸如扇區大小、每簇扇區數、總扇區數等存儲介質有關信息。然后讀取 FAT 得到文件目錄列表,基于此就可以

27、進行文件的復制、刪除、創建等操作了。開發平臺的電子硬盤可以和 USB 通訊構成 U 盤,當和 PC 機連接并激活該 U 盤后會在 PC 上出現可移動磁盤。 PC 機啟動時 BIOS 會讀取 MBR 中的 Excutable Code(引導程序)并把控制權轉交于它,然后由該引導程序負責引導操作系統。而 ARM 嵌入式設備啟動時 BIOS 則直接依賴文件系統從 FLASH 中引導用戶的可執行程序。在用戶程序中也可以使用平臺提供的文件操作函數存取 FLASH 中的文件。請參考附錄 API 函數文件系統部分,在 OSFile.h 中定義。有了這個文件系統函數,用戶就能屏蔽硬件上 FLASH 芯片物理空

28、間和讀寫時序等復雜問題,可以象在 PC 機上一樣使用文件系統,存取并處理文件。在使用文件系統之前必須通過 initOSFile()函數初始化文件系統, 為文件緩沖區分配存儲空間。 FILE 是一個文件相關的結構體,定義如下:typedef structU8 BufferBlock_Size; /文件緩沖區 32*1024U32 fileCluster; /文件當前的簇的位置U32 filemode; /打開文件的模式U32 filebufnum; /文件緩沖區中已經讀取/寫入的字節數U32 fileCurpos; /讀寫的當前位置U32 filesize; /文件的大小FILE;在 FLASH

29、 存儲器中數據是按整塊( Block)存儲的,在文件緩沖區中是以 Block 為單位開辟空間的,每個 Block 是 16KB 大小。 另外可以用 OpenOSFile()函數以指定模式打開文件;用 ReadOSFile()函數讀取已打開文件 數 據 到 指 定 緩 沖 區 ; 用 WriteOSFile() 函 數 將 指 定 緩 沖 區 的 數 據 寫 入 到 文 件 ; 用LineReadOSFile()函數讀取文本文件的一行字符;用 CloseOSFile()函數關閉文件,釋放文件緩沖區;用 SeekOSFile()函數定位文件指針;用 DeleteOSFile()函數刪除指定文件。六

30、、實驗步驟1、進入嵌入式開發平臺的 BIOS,連接 USB 電纜并激活 U 盤,在 PC 機上向開發平臺的 FLASH 存儲器復制一個小體積文本文件。2、新建工程,將“ Exp16 文件的使用”中的文件加入工程。3、打開 Main.c 文件,編輯 Main_Task 任務中的代碼,打開上述的文本文件,逐行讀取文件,并顯示在液晶屏上。具體的流程如圖所示:提示:1) 使用 OpenOSFile()函數以只讀方式( FILEMODE_READ)打開文件。2)通過 LineReadOSFile()函數逐行讀取文本文件,并在液晶屏上顯示出來。LineReadOSFile()函數的返回值是讀取該行的字節數

31、(包括:回車和換行符),可以根據LineReadOSFile()函數的返回值判斷是否讀到文件的結尾(讀到文件結尾時該函數返回值小于 2,只有換行回車的空行等于 2)。3)文件讀取完畢以后,一定要用 CloseOSFile()函數關閉文件,釋放文件緩沖區中的內存空間。4、用 ARM SDT 2.5 或 ADS1.2 編譯、下載并調試上述程序,檢查運行結果。5、生成發行版本的.bin 文件,通過 USB 下載到嵌入式開發板中,運行并檢查輸出結果。七、思考題1 PC 機上的文件系統原理是怎樣的? PC 機的啟動過程是怎樣的?2如何在應用程序中把采集的數據用文件形式保存到 FLASH?實驗六 UDP通

32、訊實驗一、實驗目的1學習 UDP 通訊原理。2掌握 Socket 編程方法。二、實驗內容編程實現嵌入式開發平臺和計算機之間的 UDP 通訊。通過觸摸屏進行畫圖,使其在液晶屏上顯示,同時通過網絡傳輸數據,使其在計算機屏幕上顯示;由計算機控制清除液晶屏上的圖形。三、預備知識1用 ARM SDT 2.5 或 ADS1.2 集成開發環境,編寫和調試程序的基本過程。2基于 uCOS-II 操作系統的應用程序的框架結構。3系統消息循環和觸摸屏消息的處理。4繪圖 API 函數的使用4UDP 通信原理和網絡相關知識。四、實驗設備及工具硬件:ARM 嵌入式開發平臺、用于 ARM7TDMI 的 JTAG 仿真器、

33、PC 機 Pentium100 以上、交叉序網線。軟件:PC 機操作系統 win98、Win2000 或 WinXP、ARM SDT 2.51 或 ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序。五、實驗原理及說明1UDP 協議簡介1)UDP 協議簡介UDP 協議是英文 User Datagram Protocol 的縮寫,即用戶數據報協議,主要用來支持那些需要在計算機之間傳輸數據的網絡應用。包括網絡視頻會議系統在內的眾多客戶/ 服務器模式的網絡應用都需要使用 UDP 協議。UDP 協議從問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協議所掩蓋, 但即使是在今天, U

34、DP 仍然不失為一項非常實用和可行的網絡傳輸層協議。與我們所熟知的 TCP(傳輸控制協議)協議一樣,UDP 協議直接位于 IP(網際協議)協議的頂層。根據 OSI(開放系統互連)參考模型,UDP 和 TCP 都屬于傳輸層協議。UDP 協議的主要作用是將網絡數據流壓縮成數據報的形式。一個典型的數據報就是一個二進制數據的傳輸單位。每一個數據報的前 8 個字節用來包含報頭信息,剩余字節則用來包含具體的傳輸數據。 UDP 報頭由 4 個域組成,其中每個域各占用 2 個字節,具體如下:2)UDP 和 TCP 協議的主要區別UDP 和 TCP 協議的主要區別是兩者在如何實現信息的可靠傳遞方面不同。TCP

35、協議中包含了專門的傳遞保證機制,當數據接收方收到發送方傳來的信息時,會自動向發送方發出確認消息;發送方只有在接收到該確認消息之后才繼續傳送其它信息,否則將一直等待直到收到確認信息為止。與 TCP 不同,UDP 協議并不提供數據傳送的保證機制。如果在從發送方到接收方的傳遞過程中出現數據報的丟失,協議本身并不能做出任何檢測或提示。因此,通常人們把 UDP協議稱為不可靠的傳輸協議。2SOCKET 簡介1)什么是 SocketSocket 接口是 TCP/IP 網絡的 API, Socket 接口定義了許多函數或例程, 程序員可以用它們來開發 TCP/IP 網絡上的應用程序。要學 Internet 上

36、的 TCP/IP 網絡編程,必須理解 Socket接口。Socket 接口設計者最先是將接口放在 Unix 操作系統里面的。如果了解 Unix 系統的輸入和輸出,就很容易了解 Socket 了。絡的 Socket 數據傳輸是一種特殊的 I/O,Socket 也是一種文件描述符。Socket 也具有一個類似于打開文件的函數調用 Socket(),該函數返回一個整型的 Socket 描述符, 隨后連接建立、 數據傳輸等操作都是通過該 Socket 實現的。 常用的 Socket類型有兩種:流式 Socket(SOCK_STREAM)和數據報式 Socket(SOCK_DGRAM) 。流式是一種面向

37、連接的 Socket,針對于面向連接的 TCP 服務應用;數據報式 Socket 是一種無連接的 Socket,對應于無連接的 UDP 服務應用。2)Socket 建立為了建立 Socket, 程序可以調用 Socket 函數, 該函數返回一個類似于文件描述符的句柄。socket 函數原型為:int socket(int domain, int type, int protocol);domain 指明所使用的協議族,通常為 PF_INET,表示互聯網協議族(TCP/IP 協議族) ;type 參數指定 socket 的類型:SOCK_STREAM 或 SOCK_DGRAM,Socket 接口

38、還定義了原始 Socket(SOCK_RAW) ,允許程序使用低層協議;protocol 通常賦值0。Socket()調用返回一個整型 socket 描述符,你可以在后面的調用使用它。Socket 描述符是一個指向內部數據結構的指針,它指向描述符表入口。調用 Socket 函數時,socket 執行體將建立一個 Socket,實際上建立一個 Socket意味著為一個 Socket 數據結構分配存儲空間。Socket 執行體為你管理描述符表。兩個網絡程序之間的一個網絡連接包括五種信息:通信協議、本地協議地址、本地主機端口、遠端主機地址和遠端協議端口。Socket 數據結構中包含這五種信息。3)S

39、ocket 配置通過 socket 調用返回一個 socket 描述符后,在使用 socket 進行網絡傳輸以前,必須配置該 socket。面向連接的 socket 客戶端通過調用 Connect 函數在 socket 數據結構中保存本地和遠端信息。無連接 socket 的客戶端和服務端以及面向連接 ocket 的服務端通過調用 bind 函數來配置本地信息。4)連接建立面向連接的客戶程序使用 Connect 函數來配置 socket 并與遠端服務器建立一個 TCP 連接,其函數原型為:int connect(int sockfd, struct sockaddr *serv_addr,int

40、 addrlen);Sockfd 是 socket 函數返回的 socket 描述符;serv_addr 是包含遠端主機 IP 地址和端口號的指針;addrlen 是遠端地質結構的長度。Connect 函數在出現錯誤時返回-1,并且設置 errno為相應的錯誤碼。進行客戶端程序設計無須調用 bind(),因為這種情況下只需知道目的機器的 IP 地址,而客戶通過哪個端口與服務器建立連接并不需要關心,socket 執行體為你的程序自動選擇一個未被占用的端口,并通知你的程序數據什么時候到達端口。5)數據傳輸Send()和 recv()這兩個函數用于面向連接的 socket 上進行數據傳輸。Send(

41、)函數原型為:int send(int sockfd, const void *msg, int len, int flags);Sockfd 是你用來傳輸數據的 socket 描述符;msg 是一個指向要發送數據的指針;Len 是以字節為單位數據的長度;flags 一般情況下設置為 0(關于該參數的用法可參照 man 手冊) 。Send()函數返回實際上發送出的字節數,可能會少于你希望發送的數據。在程序中應該將 send()的返回值與欲發送的字節數進行比較。 當 send()返回值與 len 不匹配時, 應該對這種情況進行處理。6)結束傳輸當所有的數據操作結束以后,你可以調用 close()

42、函數來釋放該 socket,從而停止在該socket 上的任何數據操作:close(sockfd);你也可以調用 shutdown()函數來關閉該 socket。該函數允許你只停止在某個方向上的數據傳輸,而一個方向上的數據傳輸繼續進行。可以關閉某 socket 的寫操作而允許繼續在該socket 上接受數據,直至讀入所有數據。int shutdown(int sockfd,int how);Sockfd 是需要關閉的 socket 的描述符。參數 how 允許為 shutdown 操作選擇以下幾種方式:0-不允許繼續接收數據1-不允許繼續發送數據2-不允許繼續發送和接收數據,均為允許則調用 c

43、lose ()shutdown 在操作成功時返回 0,在出現錯誤時返回-1 并置相應 errno。六、實驗步驟1新建工程,將“Exp20UDP 通訊實驗”中的文件加入工程。2在 main.c 文件中編輯初始化網絡函數。3定義計算機端套接字,全局變量。struct sockaddr_in servaddr;4編寫 Main_Task 任務及消息循環主要負責響應觸摸屏消息,在屏幕上畫圖,然后將數據傳輸到計算機上。流程圖見圖20-2。提示:1)對觸摸屏消息的處理和鍵盤消息類似,其消息類型 pMsg-Message 為OSM_TOUCH_SCREEN, 消息參數 pMsg-LParam 中包含了觸摸屏

44、的動作信息, 定義如下:#define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1 /觸摸屏單擊#define TCHSCR_ACTION_DBCLICK 2 /觸摸屏雙擊#define TCHSCR_ACTION_DOWN 3 /觸摸屏按下#define TCHSCR_ACTION_UP 4 /觸摸屏抬起#define TCHSCR_ACTION_MOVE 5 /觸摸屏移動消息參數 pMsg-WParam 中則包含了觸摸點的坐標信息,低 16 位是 X 坐標值,高16 位是 Y 坐標值。這里當觸摸屏產生“按下”動作后采用 MoveTo

45、()函數設置繪圖起始點坐標,當產生“移動”動作后采用 LineTo()函數繪制線段。5編寫 Receive_Task 任務主要負責接收計算機發出的清屏控制命令,來執行清屏操作。同時在計算機端設置開發平臺 IP 時負責接收數據包來獲得計算機端 IP。 6用 ARM SDT 2.5 或 ADS1.2 編譯、下載并調試上述程序,檢查運行結果。7打開 VC 目錄下的上位機控制程序,點菜單“控制設置 IP”并在對話框中輸入開發平臺的 IP (確定后控制程序只是向開發平臺發送一個數據, 使其獲得計算機的 IP 及端口) 。8用手指在觸摸屏上輕輕的畫圖,在計算機控制軟件的窗口中顯示相應的圖形。9通過菜單“控制清屏”命令可以清除計算機和觸摸屏上的圖形,重新繪圖。實驗七 綜合設計實驗一、實驗目的1進一步了解觸摸屏的工作原理。2學習在 uCOS-II 操作系統下對觸摸屏的編程。3進一步熟悉繪圖 API,圖形控件,消息循環等內容。二、實驗內容 在液晶屏上設置四個按鈕控件,表示四種畫板功能:畫直線、畫圓、畫任意折線以及清除圖形。在觸摸屏上單擊一個按鈕后,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論