应用程序开发课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《应用程序开发课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用程序 开发 课件
- 资源描述:
-
1、 第第11章章 应用程序开发应用程序开发本章主要内容a)串口应用程序的编写方法。b)TCP/IP协议以及Socket的编写方法。c)基于uClinux音频接口的应用程序的编写 方法。d)键盘和LCD的应用程序的编写方法。e)汉字音乐点播程序的编写实例。第十一章 目录q1.串口应用程序 l 串口主要函数介绍l 串口举例 q2.网络应用l TCP/IP网络应用l Web服务器应用q3 音频设备应用l 常用音频文件格式l 播放WAV文件举例q4 键盘及LCD显示应用l LCD介绍l 键盘实现q5 汉字音乐点播应用第十一章 目录q1.串口应用程序 l 串口主要函数介绍l 串口举例 q2.网络应用l T
2、CP/IP网络应用l Web服务器应用q3 音频设备应用l 常用音频文件格式l 播放WAV文件举例q4 键盘及LCD显示应用l LCD介绍l 键盘实现p3 音频设备应用 本章从一个针对运行在本章从一个针对运行在S3C44B0X上的上的uClinux操作系统进行应用程序的开发入手,操作系统进行应用程序的开发入手,给出给出Windows操作系统平台上使用操作系统平台上使用Hitool for uClinux等工具开发的多种应用程序。等工具开发的多种应用程序。本章主要介绍了:本章主要介绍了:a)串口应用程序的编写方法。b)TCP/IP协议以及Socket的编写方法。c)基于uClinux音频接口的应
3、用程序的编写 方法。d)键盘和LCD的应用程序的编写方法。e)汉字音乐点播程序的编写实例。11.1 11.1 串口应用程序串口应用程序nS3C44B0X提供提供2个个UART收发器,对它们可以操作在中断方式或收发器,对它们可以操作在中断方式或DMA方式。它们内置波特率发生器,波特率发生器的时钟源为方式。它们内置波特率发生器,波特率发生器的时钟源为S3C44B0X的系统使用,所以最高速率可达的系统使用,所以最高速率可达115.2K bps。二个串口有。二个串口有单独的波特率发生器,接收、发送和控制单元,支持红外方式的传送单独的波特率发生器,接收、发送和控制单元,支持红外方式的传送和接收。和接收。
4、n同时,在同时,在S3C44B0X串口的接收器和发送器中都有串口的接收器和发送器中都有16字节的字节的FIFO,FIFO可以有效的降低接收器和发送器对可以有效的降低接收器和发送器对CPU的中断频率,提高发送的中断频率,提高发送和接收的效率。和接收的效率。n串口设备的可配置参数包括波特率,起始位数量,数据位数量,停止串口设备的可配置参数包括波特率,起始位数量,数据位数量,停止位数量和流量控制协议。位数量和流量控制协议。n在在Linux操作系统中,设备驱动是以主设备号为主,每个设备都有唯操作系统中,设备驱动是以主设备号为主,每个设备都有唯一的主设备号和从设备号。一的主设备号和从设备号。11.1.1
5、 11.1.1 串行口主要函数介绍串行口主要函数介绍 1.1.打开串口打开串口 在在Linux 下串口文件是位于下串口文件是位于/dev 下,串口下,串口0为为/dev/ttyS0,串口,串口1为为/dev/ttyS1,O_RDWR是以读写方式打开串口,是以读写方式打开串口,O_NOCTTY表示该程表示该程序不会成为控制终端,避免了当在键盘输入类似序不会成为控制终端,避免了当在键盘输入类似ctrl+c的命令后,终的命令后,终止程序的运行。止程序的运行。打开串口是通过使用标准的文件打开函数操作:打开串口是通过使用标准的文件打开函数操作:int fd;fd=open(/dev/ttyS0,O_RD
6、WR);if(-1=fd)perror(提示错误!提示错误!);11.1.1 11.1.1 串行口主要函数介绍串行口主要函数介绍2.2.设置串口设置串口最基本的设置串口包括波特率设置,效验位和停止位设置。串口的最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置主要是设置如下设置主要是设置如下struct termios 结构体的各成员值:结构体的各成员值:struct termios unsigned short c_iflag;/输入模式标志输入模式标志unsigned short c_oflag;/输出模式标志输出模式标志unsigned short c_cflag;/控制模式
7、标控制模式标志志unsigned short c_lflag;/local mode flags unsigned char c_line;/line disciplineunsigned char c_ccNCC;/control characters ;11.1.1 11.1.1 串行口主要函数介绍串行口主要函数介绍n通过对通过对c_cflag的赋值,设置波特率,字符大小,使能本地连接,使能的赋值,设置波特率,字符大小,使能本地连接,使能串行口驱动读取输入数据。串行口驱动读取输入数据。n通过设置通过设置c_iflag,控制端口对字符的输入处理过程,控制端口对字符的输入处理过程,IGNPAR
8、符号常符号常量表示忽略奇偶性错误的字节,不对输入数据进行任何校验,量表示忽略奇偶性错误的字节,不对输入数据进行任何校验,ICRNL 将回车符映射为换行符。将回车符映射为换行符。这里就只考虑常见的一些设置:这里就只考虑常见的一些设置:(1)波特率设置:波特率设置:下面是修改下面是修改波特率波特率的代码:的代码:struct termios Opt;tcgetattr(fd,&Opt);cfsetispeed(&Opt,B19200);/设置为设置为19200Bpscfsetospeed(&Opt,B19200);tcsetattr(fd,TCANOW,&Opt);11.1.1 11.1.1 串行
9、口主要函数介绍串行口主要函数介绍(2)校验位和停止位的设置:校验位和停止位的设置:无效验无效验8 位位Option.c_cflag&=PARENB;Option.c_cflag&=CSTOPB;Option.c_cflag&=CSIZE;Option.c_cflag|=CS8;偶效验偶效验(Even)7 位位Option.c_cflag&=PARENB;Option.c_cflag|=PARODD;Option.c_cflag&=CSTOPB;Option.c_cflag&=CSIZE;Option.c_cflag|=CS7;奇效验奇效验(Odd)7 位位Option.c_cflag|=PAR
10、ENB;Option.c_cflag&=PARODD;Option.c_cflag&=CSTOPB;Option.c_cflag&=CSIZE;Option.c_cflag|=CS7;Space 效验效验7 位位Option.c_cflag&=PARENB;Option.c_cflag&=CSTOPB;Option.c_cflag&=&CSIZE;Option.c_cflag|=CS8;11.1.1 11.1.1 串行口主要函数介绍串行口主要函数介绍 设置停止位设置停止位1 位:位:options.c_cflag&=CSTOPB;2 位:位:options.c_cflag|=CSTOPB;需要
11、需要注意注意的是:的是:如果不是开发终端之类的,只是串口传输数据,而不需要串口来如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式处理,那么使用原始模式(Raw Mode)(Raw Mode)方式来通讯方式来通讯。设置方式如下:设置方式如下:options.c_lflag&=(ICANON|ECHO|ECHOE|ISIG);/Inputoptions.c_oflag&=OPOST;/Output3.3.读写串口读写串口设置好串口之后,读写串口就很容易,把串口当作文件读写就可以了。设置好串口之后,读写串口就很容易,把串口当作文件读写就可以了。(1)发送数据发送数据ch
12、ar buffer1024;int Length1024;11.1.1 11.1.1 串行口主要函数介绍串行口主要函数介绍 int nByte;nByte=write(fd,buffer,Length)(2)读取串口数据读取串口数据 使用文件操作使用文件操作read 函数读取,如果设置为原始模式函数读取,如果设置为原始模式(Raw Mode)传输传输数据,那么数据,那么read函数返回的字符数是实际串口收到的字符数。可以使函数返回的字符数是实际串口收到的字符数。可以使用操作文件的函数来实现异步读取,如用操作文件的函数来实现异步读取,如fcntl,或者,或者select等来操作。等来操作。cha
13、r buff1024;int Len1024;int readByte=read(fd,buff,Len);4.4.关闭串口关闭串口关闭串口就是关闭文件。关闭串口就是关闭文件。close(fd);11.1.2 11.1.2 串口举例串口举例 假设接收程序假设接收程序readtest.c运行在装有标准运行在装有标准Linux的的PC机上,发送程机上,发送程序序writetest.c运行在目标板运行在目标板S3C44B0X上,两台设备的串口通过交叉线上,两台设备的串口通过交叉线连接在一起。连接在一起。接收程序接收程序readtest.c的源码如下:的源码如下:#include#include#in
14、clude#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=open(/dev/ttyS1,O_RDWR|O_NOCTTY);if(spfd0)return-1;tcgetattr(spfd,&oldtio);/保存串口的当前设置保存串口的当前设置 cfmakeraw(&oldtio);cfsetispeed(&oldtio
15、,B19200);cfsetospeed(&oldtio,B19200);tcsetattr(spfd,TCSANOW,&oldtio);/选择新设置,选择新设置,TCSANOW表示设表示设 置立即生效置立即生效 rbuf=hd;printf(ready for receiving data.n);retv=read(spfd,rbuf,1);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);i
16、f(retv=-1)perror(read);for(i=0;incount;i+)realdata+=(hd i-48)*pow(10,ncount-i-1);printf(complete receiving the data%dn,realdata);close(spfd);return 0;11.1.2 11.1.2 串口举例串口举例发送程序发送程序writetest.c的源码如下:的源码如下:#include#include#include#include#include#include#include#include int spfd;int main(int argc,char*
17、argv)char fname16,*sbuf;int sfd,retv,i;struct termios oldtio;spfd=open(/dev/ttyS0,O_RDWR|O_NOCTTY);perror(open/dev/ttyS0);if(spfd0)return-1;printf(ready for sending data.n);tcgetattr(spfd,&oldtio);cfmakeraw(&oldtio);cfsetispeed(&oldtio,B19200);cfsetospeed(&oldtio,B19200);tcsetattr(spfd,TCSANOW,&oldt
18、io);fname0=1;fname1=2;fname2=3;fname3=0;sbuf=(char*)malloc(4);strncpy(sbuf,fname,4);retv=write(spfd,sbuf,4);if(retv=-1)perror(write);printf(the number of char sent is%dn,retv);close(spfd);return 0;11.1.2 11.1.2 串口举例串口举例 本例程实现:本例程实现:在发送端发送数字在发送端发送数字123123,在接收端接收,在接收端接收并显示接收到的数据。并显示接收到的数据。这里请同学们这里请同学们
19、注意注意的是:的是:发送方按字符发送数据,接收方将接收的字发送方按字符发送数据,接收方将接收的字符相应的符相应的asciiascii值与字符值与字符0 0所对应的所对应的asciiascii值相减,值相减,最终得到实际的十进制数值。最终得到实际的十进制数值。11.2 网络应用11.2.1 TCP/IP网络应用 以太网技术作为当前局域网的主流技术,可以提供从以太网技术作为当前局域网的主流技术,可以提供从10Mbit/s,100Mbit/s到到1000Mbit/s的物理带宽,以及比较好的抗干扰性、比较大的物理带宽,以及比较好的抗干扰性、比较大的网络半径和比较低系统维护费用;同时在不同速率以太网之间
20、保持的网络半径和比较低系统维护费用;同时在不同速率以太网之间保持比较好的前向兼容性,所以在系统升级时很方便。比较好的前向兼容性,所以在系统升级时很方便。图11-1 以太网电路结构图11.2.1 TCP/IP11.2.1 TCP/IP网络应用网络应用1.1.网络基础网络基础(1)TCP/IP协议分层模型协议分层模型 在实际操作中接触到的通常只是网络系统的最高层在实际操作中接触到的通常只是网络系统的最高层应用层的用户界面。应用层的用户界面。实际上要进行网际的数据传送,需要经过如下的步骤:实际上要进行网际的数据传送,需要经过如下的步骤:需要发送的数据如需要发送的数据如E-mail、web页等,通过用
21、户界面由应用程序传送到应页等,通过用户界面由应用程序传送到应用程序的数据发送缓冲区,并设置好与下一层连接的参数等待发送。用程序的数据发送缓冲区,并设置好与下一层连接的参数等待发送。数据做好传输前的准备工作,进入传输层。传输层主要负责为两台主机上数据做好传输前的准备工作,进入传输层。传输层主要负责为两台主机上的应用程序提供端口到端口的通信。的应用程序提供端口到端口的通信。然后进入网络层的范畴。这里主要处理数据分组在网络中的活动,例如分然后进入网络层的范畴。这里主要处理数据分组在网络中的活动,例如分组的选路。组的选路。当然最终数据还是要靠物理层的电磁波或光导纤维来传输。当然最终数据还是要靠物理层的
22、电磁波或光导纤维来传输。在接收的一方是相反的过程,数据从最底层一直到应用层还原为在接收的一方是相反的过程,数据从最底层一直到应用层还原为 用户可以识别的信息,这一切都是由上面的协议来规范的。用户可以识别的信息,这一切都是由上面的协议来规范的。11.2.1 TCP/IP11.2.1 TCP/IP网络应用网络应用(2)数据的封装与分用数据的封装与分用 数据的封装数据的封装用户数据从应用层逐级传送到链路层,每经过一层都要被该层的协议用户数据从应用层逐级传送到链路层,每经过一层都要被该层的协议进行一定的封装、标识和改造,就是给这个数据增加一些头部信息进行一定的封装、标识和改造,就是给这个数据增加一些头
23、部信息(或尾部信息或尾部信息)。数据封装过程数据封装过程如图如图11-3所示。所示。图 11-3 数据的封装过程11.2.1 TCP/IP11.2.1 TCP/IP网络应用网络应用 数据的分用数据的分用(解包解包)在接收端接收这些数据的时候,经过拆分的数据要重新组合,并且去在接收端接收这些数据的时候,经过拆分的数据要重新组合,并且去掉各层加上的头部信息,把数据还原。掉各层加上的头部信息,把数据还原。(3)客户客户服务器模型服务器模型 目前大多数网络应用程序在编写时都采用客户目前大多数网络应用程序在编写时都采用客户服务器模型,假服务器模型,假设设端是客户,另一端是服务器,让服务器提供给客户一定的
24、服务内端是客户,另一端是服务器,让服务器提供给客户一定的服务内容。容。并发型交互并发型交互在并发型交互模式下,程度的主要运作步骤如下:在并发型交互模式下,程度的主要运作步骤如下:等待一个客户请求的到来;等待一个客户请求的到来;生成一个新的进程或者任务来处理这个客户请求,同时这里还可生成一个新的进程或者任务来处理这个客户请求,同时这里还可以以 接收其他客户的请求。处理结束后,终止这个进程。接收其他客户的请求。处理结束后,终止这个进程。反馈客户端;反馈客户端;等待新的客户请求的到来并进行下一次服务,如此循环运作。等待新的客户请求的到来并进行下一次服务,如此循环运作。11.2.1 TCP/IP11.
25、2.1 TCP/IP网络应用网络应用 重复型交互重复型交互 重复型交互摸式下,程序的的主要运作步骤如下:重复型交互摸式下,程序的的主要运作步骤如下:等待一个客户请求的到来;等待一个客户请求的到来;处理客户的请求,对客户进行服务;处理客户的请求,对客户进行服务;给客户反馈信息,服务结束;给客户反馈信息,服务结束;等待下一个请求到来,如此循环。等待下一个请求到来,如此循环。11.2.1 TCP/IP11.2.1 TCP/IP网络应用网络应用2.2.TCP套接字套接字 Linux系统的套接字是一个通用的网络编程接口。系统的套接字是一个通用的网络编程接口。TCP协议就是通协议就是通过套接字来实现连接的
展开阅读全文