第11章应用程序开发-哈尔滨理工大学电子邮件系统精编版

上传人:ahu****ng1 文档编号:142242689 上传时间:2020-08-18 格式:PPTX 页数:99 大小:2.09MB
返回 下载 相关 举报
第11章应用程序开发-哈尔滨理工大学电子邮件系统精编版_第1页
第1页 / 共99页
第11章应用程序开发-哈尔滨理工大学电子邮件系统精编版_第2页
第2页 / 共99页
第11章应用程序开发-哈尔滨理工大学电子邮件系统精编版_第3页
第3页 / 共99页
第11章应用程序开发-哈尔滨理工大学电子邮件系统精编版_第4页
第4页 / 共99页
第11章应用程序开发-哈尔滨理工大学电子邮件系统精编版_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《第11章应用程序开发-哈尔滨理工大学电子邮件系统精编版》由会员分享,可在线阅读,更多相关《第11章应用程序开发-哈尔滨理工大学电子邮件系统精编版(99页珍藏版)》请在金锄头文库上搜索。

1、第11章 应用程序开发,本章主要内容,串口应用程序的编写方法。 TCP/IP协议以及Socket的编写方法。 基于uClinux音频接口的应用程序的编写 方法。 键盘和LCD的应用程序的编写方法。 汉字音乐点播程序的编写实例。,第十一章 目录,1.串口应用程序 串口主要函数介绍 串口举例 2.网络应用 TCP/IP网络应用 Web服务器应用,3 音频设备应用 常用音频文件格式 播放WAV文件举例 4 键盘及LCD显示应用 LCD介绍 键盘实现 5 汉字音乐点播应用,第十一章 目录,1.串口应用程序 串口主要函数介绍 串口举例 2.网络应用 TCP/IP网络应用 Web服务器应用,3 音频设备应

2、用 常用音频文件格式 播放WAV文件举例 4 键盘及LCD显示应用 LCD介绍 键盘实现 3 音频设备应用,本章从一个针对运行在S3C44B0X上的uClinux操作系统进行应用程序的开发入手,给出Windows操作系统平台上使用Hitool for uClinux等工具开发的多种应用程序。,本章主要介绍了:,串口应用程序的编写方法。 TCP/IP协议以及Socket的编写方法。 基于uClinux音频接口的应用程序的编写 方法。 键盘和LCD的应用程序的编写方法。 汉字音乐点播程序的编写实例。,11.1 串口应用程序,S3C44B0X提供2个UART收发器,对它们可以操作在中断方式或DMA方

3、式。它们内置波特率发生器,波特率发生器的时钟源为S3C44B0X的系统使用,所以最高速率可达115.2K bps。二个串口有单独的波特率发生器,接收、发送和控制单元,支持红外方式的传送和接收。 同时,在S3C44B0X串口的接收器和发送器中都有16字节的FIFO,FIFO可以有效的降低接收器和发送器对CPU的中断频率,提高发送和接收的效率。 串口设备的可配置参数包括波特率,起始位数量,数据位数量,停止位数量和流量控制协议。 在Linux操作系统中,设备驱动是以主设备号为主,每个设备都有唯一的主设备号和从设备号。,11.1.1 串行口主要函数介绍,1. 打开串口 在Linux 下串口文件是位于/

4、dev 下,串口0为/dev/ttyS0 ,串口1为/dev/ttyS1,O_RDWR是以读写方式打开串口,O_NOCTTY表示该程序不会成为控制终端,避免了当在键盘输入类似ctrl+c的命令后,终止程序的运行。 打开串口是通过使用标准的文件打开函数操作: int fd; fd = open( /dev/ttyS0, O_RDWR); if (-1 = fd) perror( 提示错误!); ,11.1.1 串行口主要函数介绍,2. 设置串口 最基本的设置串口包括波特率设置,效验位和停止位设置。串口的 设置主要是设置如下struct termios 结构体的各成员值: struct termi

5、os unsigned short c_iflag; / 输入模式标志unsigned short c_oflag; / 输出模式标志 unsigned short c_cflag; / 控制模式标志unsigned short c_lflag; / local mode flags unsigned char c_line; / line discipline unsigned char c_ccNCC; / control characters ;,11.1.1 串行口主要函数介绍,通过对c_cflag的赋值,设置波特率,字符大小,使能本地连接,使能串行口驱动读取输入数据。 通过设置c_i

6、flag ,控制端口对字符的输入处理过程,IGNPAR符号常量表示忽略奇偶性错误的字节,不对输入数据进行任何校验,ICRNL 将回车符映射为换行符。 这里就只考虑常见的一些设置: (1) 波特率设置: 下面是修改波特率的代码: struct termios Opt; tcgetattr(fd, ,11.1.1 串行口主要函数介绍,(2) 校验位和停止位的设置: 无效验8 位 Option.c_cflag , 奇效验(Odd) 7 位 Option.c_cflag |= PARENB; Option.c_cflag ,11.1.1 串行口主要函数介绍, 设置停止位 1 位:options.c_c

7、flag ,11.1.1 串行口主要函数介绍,int nByte; nByte = write(fd, buffer ,Length) (2) 读取串口数据 使用文件操作read 函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。可以使用操作文件的函数来实现异步读取,如fcntl,或者select等来操作。 char buff1024; int Len1024; int readByte = read(fd, buff, Len); 4. 关闭串口 关闭串口就是关闭文件。 close(fd);,11.1.2 串口举例,假设接收程序re

8、adtest.c运行在装有标准Linux的PC机上,发送程序writetest.c运行在目标板S3C44B0X上,两台设备的串口通过交叉线连接在一起。 接收程序readtest.c的源码如下: #include #include #include #include #include #include #include #include #include #include ,int spfd; int main() char fname16,hd16,*rbuf; int retv,i,ncount=0; struct termios oldtio; int realdata=0; spfd=o

9、pen(/dev/ttyS1,O_RDWR|O_NOCTTY); if(spfd0) return -1; tcgetattr(spfd,if(retv=-1) perror(read); reture -1; while(*rbuf!=0) ncount+=1; rbuf+; retv=read(spfd,rbuf,1); printf(the number received is %dn,retv); if(retv=-1) perror(read); for(i=0;incount;i+) realdata+=(hd i -48)*pow(10,ncount-i-1); printf(c

10、omplete receiving the data %dn,realdata); close(spfd); return 0; ,11.1.2 串口举例,发送程序writetest.c的源码如下: #include #include #include #include #include #include #include #include int spfd; int main(int argc, char *argv) char fname16,*sbuf; int sfd,retv,i; struct termios oldtio; spfd=open(/dev/ttyS0,O_RDWR|

11、O_NOCTTY); perror(open /dev/ttyS0);,if(spfd0) return -1; printf(ready for sending data.n); tcgetattr(spfd, ,11.1.2 串口举例,本例程实现: 在发送端发送数字123,在接收端接收并显示接收到的数据。 这里请同学们注意的是: 发送方按字符发送数据,接收方将接收的字符相应的ascii值与字符0所对应的ascii值相减,最终得到实际的十进制数值。,11.2 网络应用11.2.1 TCP/IP网络应用,以太网技术作为当前局域网的主流技术,可以提供从10Mbit/s,100Mbit/s到100

12、0Mbit/s的物理带宽,以及比较好的抗干扰性、比较大的网络半径和比较低系统维护费用;同时在不同速率以太网之间保持比较好的前向兼容性,所以在系统升级时很方便。,图11-1 以太网电路结构图,11.2.1 TCP/IP网络应用,1. 网络基础 (1) TCP/IP协议分层模型 在实际操作中接触到的通常只是网络系统的最高层应用层的用户界面。实际上要进行网际的数据传送,需要经过如下的步骤: 需要发送的数据如E-mail、web页等,通过用户界面由应用程序传送到应用程序的数据发送缓冲区,并设置好与下一层连接的参数等待发送。 数据做好传输前的准备工作,进入传输层。传输层主要负责为两台主机上的应用程序提供

13、端口到端口的通信。 然后进入网络层的范畴。这里主要处理数据分组在网络中的活动,例如分组的选路。 当然最终数据还是要靠物理层的电磁波或光导纤维来传输。 在接收的一方是相反的过程,数据从最底层一直到应用层还原为 用户可以识别的信息,这一切都是由上面的协议来规范的。,11.2.1 TCP/IP网络应用,(2) 数据的封装与分用 数据的封装 用户数据从应用层逐级传送到链路层,每经过一层都要被该层的协议进行一定的封装、标识和改造,就是给这个数据增加一些头部信息(或尾部信息)。 数据封装过程如图11-3所示。,图 11-3 数据的封装过程,11.2.1 TCP/IP网络应用, 数据的分用(解包) 在接收端

14、接收这些数据的时候,经过拆分的数据要重新组合,并且去掉各层加上的头部信息,把数据还原。 (3) 客户服务器模型 目前大多数网络应用程序在编写时都采用客户服务器模型,假设端是客户,另一端是服务器,让服务器提供给客户一定的服务内容。 并发型交互 在并发型交互模式下,程度的主要运作步骤如下: 等待一个客户请求的到来; 生成一个新的进程或者任务来处理这个客户请求,同时这里还可以 接收其他客户的请求。处理结束后,终止这个进程。 反馈客户端; 等待新的客户请求的到来并进行下一次服务,如此循环运作。,11.2.1 TCP/IP网络应用, 重复型交互 重复型交互摸式下,程序的的主要运作步骤如下: 等待一个客户

15、请求的到来; 处理客户的请求,对客户进行服务; 给客户反馈信息,服务结束; 等待下一个请求到来,如此循环。,11.2.1 TCP/IP网络应用,2. TCP套接字 Linux系统的套接字是一个通用的网络编程接口。TCP协议就是通过套接字来实现连接的建立的,这里将就这个过程具体化并对其内部的函数进行必要的说明。 (1) 套接字地址结构 在头文件中定义了以下结构来保持套接字函数调用参数的一致性。 struct sockaddr unsigned short sa_family; / 地址类型,格式为AF_xxxchar sa_data14; / 14字节的协议地址;,11.2.1 TCP/IP网络应用,其中的sa_family为套接字的协议簇地址类型,TCP/IP的协议对于IPv4地址类型为AF_INET。sa_data中存储具体的协议地址,不同的协议簇有不同的地址格式。但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构sockaddr_in(在netinet/in.h中定义): struct sockaddr_in unsigned short int sin_len;/*IPv4地址长度*/ short int sin_family; /*地址类型*/ unsigned short in

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号