版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 <math.h>。5、用 AR
21、M SDT 2.5 或 ADS1.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 芯片具有和磁盘完全不同的结构特点,开
24、发平台上的 K9F2808U0A 芯片具有 1024 个 Block,每个 Block 有 32 个 Page,每个 Page 有 51216528 个 Byte。这种芯片的读写操作具有以下特点:1)必须以 Page 为单位进行读写;2)写之前必须先擦除原有内容;3)擦除操作必须对 Block 进行,即一次至少擦除一个 Block 的内容。针对这种情况,将一个 Page 定为一个扇区;将 2 个 Block 即 64 个扇区定为一个簇簇的容量正好为 512×6432K,满足 FAT16 对簇的要求。 FAT 是按簇为单位分配空间的,但其给出的地址 LBA( Logical Block
25、 Address)只是一个扇区号, 比如 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 扇区。硬盘上由于存在多个分区而在每个分区中还有 D
26、BR( DOS引导记录)区。 MBR 扇区必须包括 BPB( BIOS Parameter Block),其中有对文件系统进行识别的关键信息。由于开发平台的电子硬盘结构比较简单并且不要求启动, MBR 不必含有启动代码,但最后两个字节必须是 0x55AA。关于引导扇区、 FAT 和 DIR 的详细结构请参考相关资料。FLASH 前两个 Block 的内容如下:在系统对 FLASH 芯片进行格式化操作时将 FAT 写入芯片,使其逻辑空间符合文件系统的需要。当主机发出 READ 命令后, FLASH 读写操作开始,首先读取 MBR 得到诸如扇区大小、每簇扇区数、总扇区数等存储介质有关信息。然后读取
27、 FAT 得到文件目录列表,基于此就可以进行文件的复制、删除、创建等操作了。开发平台的电子硬盘可以和 USB 通讯构成 U 盘,当和 PC 机连接并激活该 U 盘后会在 PC 上出现可移动磁盘。 PC 机启动时 BIOS 会读取 MBR 中的 Excutable Code(引导程序)并把控制权转交于它,然后由该引导程序负责引导操作系统。而 ARM 嵌入式设备启动时 BIOS 则直接依赖文件系统从 FLASH 中引导用户的可执行程序。在用户程序中也可以使用平台提供的文件操作函数存取 FLASH 中的文件。请参考附录 API 函数文件系统部分,在 OSFile.h 中定义。有了这个文件系统函数,用
28、户就能屏蔽硬件上 FLASH 芯片物理空间和读写时序等复杂问题,可以象在 PC 机上一样使用文件系统,存取并处理文件。在使用文件系统之前必须通过 initOSFile()函数初始化文件系统, 为文件缓冲区分配存储空间。 FILE 是一个文件相关的结构体,定义如下:typedef structU8 BufferBlock_Size; /文件缓冲区 32*1024U32 fileCluster; /文件当前的簇的位置U32 filemode; /打开文件的模式U32 filebufnum; /文件缓冲区中已经读取/写入的字节数U32 fileCurpos; /读写的当前位置U32 filesize
29、; /文件的大小FILE;在 FLASH 存储器中数据是按整块( Block)存储的,在文件缓冲区中是以 Block 为单位开辟空间的,每个 Block 是 16KB 大小。 另外可以用 OpenOSFile()函数以指定模式打开文件;用 ReadOSFile()函数读取已打开文件 数 据 到 指 定 缓 冲 区 ; 用 WriteOSFile() 函 数 将 指 定 缓 冲 区 的 数 据 写 入 到 文 件 ; 用LineReadOSFile()函数读取文本文件的一行字符;用 CloseOSFile()函数关闭文件,释放文件缓冲区;用 SeekOSFile()函数定位文件指针;用 Dele
30、teOSFile()函数删除指定文件。六、实验步骤1、进入嵌入式开发平台的 BIOS,连接 USB 电缆并激活 U 盘,在 PC 机上向开发平台的 FLASH 存储器复制一个小体积文本文件。2、新建工程,将“ Exp16 文件的使用”中的文件加入工程。3、打开 Main.c 文件,编辑 Main_Task 任务中的代码,打开上述的文本文件,逐行读取文件,并显示在液晶屏上。具体的流程如图所示:提示:1) 使用 OpenOSFile()函数以只读方式( FILEMODE_READ)打开文件。2)通过 LineReadOSFile()函数逐行读取文本文件,并在液晶屏上显示出来。LineReadOSF
31、ile()函数的返回值是读取该行的字节数(包括:回车和换行符),可以根据LineReadOSFile()函数的返回值判断是否读到文件的结尾(读到文件结尾时该函数返回值小于 2,只有换行回车的空行等于 2)。3)文件读取完毕以后,一定要用 CloseOSFile()函数关闭文件,释放文件缓冲区中的内存空间。4、用 ARM SDT 2.5 或 ADS1.2 编译、下载并调试上述程序,检查运行结果。5、生成发行版本的.bin 文件,通过 USB 下载到嵌入式开发板中,运行并检查输出结果。七、思考题1 PC 机上的文件系统原理是怎样的? PC 机的启动过程是怎样的?2如何在应用程序中把采集的数据用文件
32、形式保存到 FLASH?实验六 UDP通讯实验一、实验目的1学习 UDP 通讯原理。2掌握 Socket 编程方法。二、实验内容编程实现嵌入式开发平台和计算机之间的 UDP 通讯。通过触摸屏进行画图,使其在液晶屏上显示,同时通过网络传输数据,使其在计算机屏幕上显示;由计算机控制清除液晶屏上的图形。三、预备知识1用 ARM SDT 2.5 或 ADS1.2 集成开发环境,编写和调试程序的基本过程。2基于 uCOS-II 操作系统的应用程序的框架结构。3系统消息循环和触摸屏消息的处理。4绘图 API 函数的使用4UDP 通信原理和网络相关知识。四、实验设备及工具硬件:ARM 嵌入式开发平台、用于
33、ARM7TDMI 的 JTAG 仿真器、PC 机 Pentium100 以上、交叉序网线。软件:PC 机操作系统 win98、Win2000 或 WinXP、ARM SDT 2.51 或 ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。五、实验原理及说明1UDP 协议简介1)UDP 协议简介UDP 协议是英文 User Datagram Protocol 的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多客户/ 服务器模式的网络应用都需要使用 UDP 协议。UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一
34、些类似协议所掩盖, 但即使是在今天, UDP 仍然不失为一项非常实用和可行的网络传输层协议。与我们所熟知的 TCP(传输控制协议)协议一样,UDP 协议直接位于 IP(网际协议)协议的顶层。根据 OSI(开放系统互连)参考模型,UDP 和 TCP 都属于传输层协议。UDP 协议的主要作用是将网络数据流压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前 8 个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。 UDP 报头由 4 个域组成,其中每个域各占用 2 个字节,具体如下:2)UDP 和 TCP 协议的主要区别UDP 和 TCP 协议的主要区别是两者在
35、如何实现信息的可靠传递方面不同。TCP 协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与 TCP 不同,UDP 协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把 UDP协议称为不可靠的传输协议。2SOCKET 简介1)什么是 SocketSocket 接口是 TCP/IP 网络的 API, Socket 接口定义了许多函数或例程, 程序员可以用它们来开发 TCP/IP 网络
36、上的应用程序。要学 Internet 上的 TCP/IP 网络编程,必须理解 Socket接口。Socket 接口设计者最先是将接口放在 Unix 操作系统里面的。如果了解 Unix 系统的输入和输出,就很容易了解 Socket 了。络的 Socket 数据传输是一种特殊的 I/O,Socket 也是一种文件描述符。Socket 也具有一个类似于打开文件的函数调用 Socket(),该函数返回一个整型的 Socket 描述符, 随后连接建立、 数据传输等操作都是通过该 Socket 实现的。 常用的 Socket类型有两种:流式 Socket(SOCK_STREAM)和数据报式 Socket(
37、SOCK_DGRAM) 。流式是一种面向连接的 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 或
38、SOCK_DGRAM,Socket 接口还定义了原始 Socket(SOCK_RAW) ,允许程序使用低层协议;protocol 通常赋值"0"。Socket()调用返回一个整型 socket 描述符,你可以在后面的调用使用它。Socket 描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用 Socket 函数时,socket 执行体将建立一个 Socket,实际上"建立一个 Socket"意味着为一个 Socket 数据结构分配存储空间。Socket 执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、
39、本地主机端口、远端主机地址和远端协议端口。Socket 数据结构中包含这五种信息。3)Socket 配置通过 socket 调用返回一个 socket 描述符后,在使用 socket 进行网络传输以前,必须配置该 socket。面向连接的 socket 客户端通过调用 Connect 函数在 socket 数据结构中保存本地和远端信息。无连接 socket 的客户端和服务端以及面向连接 ocket 的服务端通过调用 bind 函数来配置本地信息。4)连接建立面向连接的客户程序使用 Connect 函数来配置 socket 并与远端服务器建立一个 TCP 连接,其函数原型为:int connec
40、t(int sockfd, struct sockaddr *serv_addr,int addrlen);Sockfd 是 socket 函数返回的 socket 描述符;serv_addr 是包含远端主机 IP 地址和端口号的指针;addrlen 是远端地质结构的长度。Connect 函数在出现错误时返回-1,并且设置 errno为相应的错误码。进行客户端程序设计无须调用 bind(),因为这种情况下只需知道目的机器的 IP 地址,而客户通过哪个端口与服务器建立连接并不需要关心,socket 执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候到达端口。5)数据传输Sen
41、d()和 recv()这两个函数用于面向连接的 socket 上进行数据传输。Send()函数原型为:int send(int sockfd, const void *msg, int len, int flags);Sockfd 是你用来传输数据的 socket 描述符;msg 是一个指向要发送数据的指针;Len 是以字节为单位数据的长度;flags 一般情况下设置为 0(关于该参数的用法可参照 man 手册) 。Send()函数返回实际上发送出的字节数,可能会少于你希望发送的数据。在程序中应该将 send()的返回值与欲发送的字节数进行比较。 当 send()返回值与 len 不匹配时,
42、应该对这种情况进行处理。6)结束传输当所有的数据操作结束以后,你可以调用 close()函数来释放该 socket,从而停止在该socket 上的任何数据操作:close(sockfd);你也可以调用 shutdown()函数来关闭该 socket。该函数允许你只停止在某个方向上的数据传输,而一个方向上的数据传输继续进行。可以关闭某 socket 的写操作而允许继续在该socket 上接受数据,直至读入所有数据。int shutdown(int sockfd,int how);Sockfd 是需要关闭的 socket 的描述符。参数 how 允许为 shutdown 操作选择以下几种方式:0-
43、不允许继续接收数据1-不允许继续发送数据2-不允许继续发送和接收数据,均为允许则调用 close ()shutdown 在操作成功时返回 0,在出现错误时返回-1 并置相应 errno。六、实验步骤1新建工程,将“Exp20UDP 通讯实验”中的文件加入工程。2在 main.c 文件中编辑初始化网络函数。3定义计算机端套接字,全局变量。struct sockaddr_in servaddr;4编写 Main_Task 任务及消息循环主要负责响应触摸屏消息,在屏幕上画图,然后将数据传输到计算机上。流程图见图20-2。提示:1)对触摸屏消息的处理和键盘消息类似,其消息类型 pMsg->Mes
44、sage 为OSM_TOUCH_SCREEN, 消息参数 pMsg->LParam 中包含了触摸屏的动作信息, 定义如下:#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 中则包含了触摸点的
45、坐标信息,低 16 位是 X 坐标值,高16 位是 Y 坐标值。这里当触摸屏产生“按下”动作后采用 MoveTo()函数设置绘图起始点坐标,当产生“移动”动作后采用 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湟里自建房2019年度售后服务工作总结
- 屋面维修劳务承揽合同范本(2篇)
- 小学数学暑期班线上线下教学方案
- 机关单位消防安全管理制度
- 海尔冰箱市场竞争分析方案
- 牡丹江24年小学4年级英语第6单元综合卷
- 医疗设施PPP项目管理方案
- 医学类院校学生代表制度
- 2024-2025学年河北省邯郸市高三上学期10月联考化学试题及答案
- 2024-2025学年黑龙江省大庆市实验中学高三上学期10月考物理试题及答案
- OBE理念下的课程目标设计
- 新视野大学英语(第四版)读写教程4(思政智慧版)课件 Unit1 Urban development Section A
- 智慧体育行业商业计划书
- 部编人教版六年级上册语文全册课文教学课堂实录
- 人教版一年级起点小学四年级英语上册全套教案
- 境外汇款申请书(完成)
- 小学三年级、三班家长会
- 五年级主题班会 家长会 课件(共28张PPT)
- 中学生学习策略量表(LASSI)
- 活性炭吸附装置安全操作保养规程
- 绳索救援演示教学课件
评论
0/150
提交评论