基于嵌入式系统的手机应用设计实验报告.doc_第1页
基于嵌入式系统的手机应用设计实验报告.doc_第2页
基于嵌入式系统的手机应用设计实验报告.doc_第3页
基于嵌入式系统的手机应用设计实验报告.doc_第4页
基于嵌入式系统的手机应用设计实验报告.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录第一章、 引言0第二章、嵌入式开发基本介绍11.1 嵌入式 Linux 简介11.2 嵌入式 Linux 开发平台简介2第三章、嵌入式LINUX 开发21建立开发环境22建立开发环境32.1开发环境32.2引导装载程序(BOOTLOADER)的建立与烧写、配置32.3移植LINUX 内核并烧写52.4建立根文件系统并烧写72.5开发应用程序并植入Linux7第四章、基于嵌入式系统的手机应用设计91主函数的编写92功能实现。93程序编译与运行9结束语11附录12第一章、 引言 目前 Linux已广泛应用于信息家电、数据网络、工业控制、医疗卫生航空航天等众多领域。在嵌入式领域,随着价格低廉、结构小巧的各种微处理器的产生为外设连接提供了稳定可靠的硬件架构,限制嵌入式系统发展的瓶颈就突出表现在软件方面。 尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有 Vxwork、pSOS、Neculeus 和 Windows CE。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步,并且其源代码的封闭性也大大限制了开发者的积极性。 结合中国实情,当前国家对自主操作系统的大力支持,为源码开放的 LINUX 的推广提供的广阔的发展前景。对上层应用开发者而言,嵌入式系统需要的是一套高度简练、界面友善、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。Linux 对厂商不偏不倚而且成本极低,能够很快成为用于各种设备的操作系统。如今,业界已经达成共识:即嵌入式 linux 是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。第二章、嵌入式开发基本介绍1.1 嵌入式 Linux 简介 Linux 正在嵌入式开发领域稳步发展。因为 Linux 使用 GPL,所以任何对将 Linux 定制于自己特定开发板或 PDA、掌上机、可佩带设备感兴趣的人都可以从因特网免费下载其内核和应用程序,并开始移植或开发。许多 Linux 改良品种迎合了嵌入式市场。它们包括 RTLinux(实时 Linux) 、uclinux(用于非 MMU 设备的 Linux) 、Montavista Linux(用于 ARM、MIPS、PPC 的 Linux 分发版) 、ARM-Linux(ARM 上的 Linux)和其它 Linux 系统。 嵌入式 Linux 的发展比较迅速。NEC、索尼已经在销售个人视频录像机等基于 Linux 的消费类电子产品, 摩托罗拉则计划在其未来的大多数手机上使用Linux, IBM也制定了在手持机上运行Linux的计划。 数年来,“Linux 标准库”组织一直在从事对在服务器上运行的 Linux进行标准化的工作,现在,嵌入式计算领域也开始了这一工作。嵌入式 Linux 标准吸引了“Linux标准库”以及 Unix 组织中有益的元素。1.2 嵌入式 Linux 开发平台简介 嵌入式 LINUX 可以运行的硬件平台十分广泛,从 X86、MIPS、POWERPC 到ARM,以及其他许多硬件体系结构,目前在世界范围,ARM体系结构的 SOC 逐渐占领32 位嵌入式微处理器市场,并且在国内市场上很容易购买到 ARM 核的嵌入式处理器,我们所介绍的硬件平台也是基于 ARM 体系结构,Intel 的Xscale PXA270处理器,由北京博创兴业科技有限公司开发的 UP-TechPXA270 实验仪器。 博创科技近日正式推出基于 Intel XScale 架构的两款高端嵌入式系统教学科研平台 UP-TECHPXA270 和UP-TECHPXA270。 其中 UP-TECHPXA270 采用 Intel XScale 架构 PXA270 嵌入式微处理器, UP-TECHPXA270基于 Intel XSCALE 架构最新的 PXA270 嵌入式微处理器。PXA270 最高主频可达 624MHz,加入了 Wireless MMX 技术,大大提升了多媒体处理能力;同时 PXA270 还加入了 Intel SpeedStep 动态电源管理技术,在保证CPU 性能的情况下,最大限度地降低移动设备功耗。PXA270 可以广泛应用于 PDA、智能手机、PMP 产品中。 博创科技的 UP-TECHPXA270 教学科研平台主要是面向计算机、软件专业的高端平台,微处理器主频稳定运行在 520MHz,采用1313mm VFBGA 封装,内部集成 iwmmx 指令,加速处理器对多媒体数据的 处理速度。可运行 Linux 2.4.x 和Linux 2.6.x 内核,支持 QT/E、miniGUI 等嵌入式图形界面,提供完整的驱动和应用程序。既适合作为计算机、软件等专业开设嵌入式软件课程的教学平台,又适合广大从事 PMP、PDA、智能手机的厂商和科研单位作为参考设计平台。 UP-TECHPXA270 教学科研平台由处理器核心板、主板及 LCD 三部份组成。核心板和主板的接口设计充分考虑了升级产品的兼容性,核心板可以升级到 PXA271、PXA272 微处理器,而主板资源不变。此外,除了具有丰富的接口资源,良好的可扩展性也是 UP-TECHPXA270 平台的一大特色。UP-TECHPXA270 预留了 32位扩展总线接口,与博创 UP-NetARM2410、UP-NetARM2410-S 平台兼容,从而大大减轻了用户扩展新功能的负担。第三章、嵌入式LINUX 开发1建立开发环境操作系统可以使用一般的Linux发行版本,选择定制安装或全部安装。安装好后配置开发主机。先配置MINICOM,一般的参数为波特率115200,数据位8 位,停止位1,无奇偶校验,软件硬件流控设为无。在WINDOWS 下的超级终端的配置也是这样。MINICOM 软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络,主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。从网络上下载一些公开源代码的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT 等,根据自己具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如三星的ARM7、ARM9 系列芯片,这样就需要编写烧写开发板上FLASH 的烧写程序,网络上有免费下载的WINDOWS 下通过JTAG 并口简易仿真器烧写ARM 外围FLASH 芯片的烧写程序。也有LINUX 下的公开源代码的J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果你购买了厂家的仿真器当然比较容易烧写FLASH 了,这对于需要迅速开发自己的应用的人来说可以极大提高开发速度,但是其中的核心技术是无法了解的。Linux内核2.6系列。对于一些较常见的开发平台,Linux内核已经加入了支持,可以直接使用。如果有专门针对你所使用的平台移植好的LINUX 内核补丁,我们则可以下载后对标准内核打好补丁后即可。如果没有对应的补丁,我们则需要在标准内核中添加自己的CPU的支持,再移植该平台特定硬件的驱动程序,进行调试修改,直至符合要求。由于上一步已经移植好了Bootloader,我们可以使用它来对移植好的内核进行烧写。从 下载Busybox进行功能裁减,可以产生一个最基本的根文件系统。Busybox已经包含了Linux系统的大部分命令,可以再根据自己的应用需要添加其他程序。默认的启动脚本一般不会符合应用的需要,所以需要修改根文件系统中的启动脚本,它位于/etc 目录下,包括:/etc/init.d/rc.S 、/etc/profile 、/etc/.profile 等, 自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs,genromfs 等工具来生成映象文件。根文件系统一般也使用Bootloader进行烧写。我们编写好了针对目标平台的应用程序代码后,可以在PC机上对代码进行交叉编译,编译后生成可在目标开发板上执行的应用程序文件。然后可以通过网络,串口,USB等方式,将应用程序文件传送在目标板的文件系统中,进行执行调试。2建立开发环境2.1开发环境在基于Linux的PC机上正确的嵌入式开发软件环境包括1、minicom配置正确;2、arm-linux-gcc及其它交叉编译工具可用;3、PC机nfs服务器和tftp服务器工作正常。2.2引导装载程序(BOOTLOADER)的建立与烧写、配置主要过程如下:运行minicom,即在终端输入minicom回车,可以看到如下界面:启动pxa270 开发板,立即按ctlc 组合键进入blob配置Blob比较复杂,下面详细叙述:首先,修改MAC地址。由于开发板出厂时MAC地址均相同,需要修改开发板的MAC地址才能避免地址冲突。在blob 下使用下面的命令修改MAC地址:blobifconfig mac 08:00:3E:2A:14:03 上述命令配置开发板的MAC地址,08:00:3E:2A:14:03即为的开发板的MAC地址,一定要更改得与别的开发板不同,只需要改后面的3个字节即可,注意是16进制数。然后,为开发板设置IP参数blobifconfig server 3 。其中3 为tftp 服务器(即PC机)的IP地址。blobifconfig ip 55 。其中55为开发板的IP地址。再将配置参数烧写进FLASH芯片中,再用blobflash param save命令将MAC地址保存到Flash中,以便复位或断电重启的情况下这些参数仍然有效,不用重新更改:特别注意的是:由于这里设置的开发板IP地址仅在blob环境下有效。因此烧写完内核并进入Linux环境后,还需要重新设置开发板以太网接口eth0的IP地址,否则将自动被设置为192.168.0.?。在Linux环境下设置eth0的IP地址命令如下:#ifconfig eth0 55,否则pc不能ping到板。另外,在pc的linux环境下也要#ifconfig eth0 3,否则板不能ping到pc。配置完以后用ping测试是否两个IP地址是否可达。这里是用板ping主机,100%丢包率说明不通。这里是用板ping主机, 0%丢包率说明通。2.3移植LINUX 内核并烧写详细步骤如下:已经移植好的Linux内核压缩包为/up-techpxa270/exp/kernel/up-linux-2.6.9-release-2006-6-9.tar.bz2。解压内核包local hostcdlocal hostmkdir kernellocal hostcd kernel local hosttar jxvf/up-techpxa270/exp/kernel/up-linux-2.6.9-release-2006-6-9.tar.bz2编译内核local hostcd linux-2.6.9-release local hostmake cleanlocal hostmake zImage生成的二进制文件为arch/arm/boot/zImage,把它拷贝到PC机的tftp服务目录命令为local hostcp arch/arm/boot/zImage /tftpboot/烧写内核首先,运行minicom.启动pxa270 开发板,按ctlc 组合键进入blob。然后用blobtdownload kernel命令烧写zImage 到Ram。按用blobflash kernel命令烧写zImage 到flash。2.4建立根文件系统并烧写首先,解压根文件系统,生成root 目录local hostcd /up-techpxa270/exp/root/local hosttar jxvf /up-techpxa270/exp/root/up-techpxa270-root-2006-05-31.tar.bz2然后,生成JFFS2 文件系统,先改变mkfs.jffs2文件权限,用local host chmod 755 mkfs.jffs2命令使该文件可以执行。再用local host./mkfs.jffs2 -r root -o rootfs.img -e 0x20000 -pad=0xd00000命令生成文件系统镜像。其中的选项含义分别是:-r: -root=DIR,由目录生成镜像文件;-e:Flash 擦除扇区大小,默认为64KB,此处指定为128KB-pad:指定创建的根文件系统的大小生成的映像文件为rootfs.img,用local hostcp rootfs.img /tftpboot/命令把它拷贝到PC机的tftp服务目录。按照blobtdownload ramdisk命令烧写rootfs.img 到Ram。按blobflash ramdisk命令烧写rootfs.img 到flash。最后blobboot,在blob 下启动Linux。2.5开发应用程序并植入Linux首先要建立工作目录:local hostcdlocal hostmkdir 01_hellolocal hostcd 01_hello 然后,编写程序源代码。这里举例:C语言和汇编语言混合编程,键盘输入1个十进制数x, 用汇编语言计算3*x2+2*x3,由终端输出计算结果。这里的主函数文件为ex3.c;包含计算3*x2+2*x3过程的文件为compute.S。最后编写Makefile文件。这是因为由于编译程序的过程较为繁琐,因此编写了一个简单的Makefile来组织这些源程序,因为程序是要在开发板上运行,因此指定了交叉编译工具。这里的程序见附录。在进行编译应用程序PC机上,在程序目录下运行,(/nfsroot为NFS服务目录)。local hostmakelocal hostcp ex3 /nfsroot开发板上,挂接宿主机的根目录。成功之后在开发板上进入/mnt 目录,便相应进入宿主机NFS目录,再进入开发程序目录运行刚刚编译好的ex3 程序,查看运行结果。如果该程序不具有可执行属性,需要用chmod命令修改,使其可以执行。pxa270mount -o nolock 3:/nfsroot /mnt/nfs这是将/mnt/nfs挂接于3的/nfsrootpxa270cd /mnt/nfspxa270chmod 755 ex3pxa270./ex3开发板挂接宿主机目录只需要挂接一次便可,只要开发板没有重起,就可以一直保持连接。这样可以反复修改、编译、调试,不需要下载到开发板的过程,当然当调试好程序后,就可以下载到开发板运行。第四章、基于嵌入式系统的手机应用设计1主函数的编写首先进行波特率的确定。在main函数中,输入的参数有两个,分别是int argc,char* argv。用get_baudrate(argc, argv)进行波特率的选择,这里用argv来确定其波特率的大小,分别有4800、9600、19200、38400、57600、115200。之后调用tty_init()进行pc与实验板的通讯。由于实验板没有输入输出设备,需要pc的minicom作为实验板的终端进行操作使设备运行。这里设置端口2以及波特率等。创建2个进程,分别是读取模块和读取键盘。读取模块使用pthread_create(&th_b, NULL, gprs_read, 0),其中gprs_read与modem通信,读取modem模块中的信息。另一个读取键盘是为了读取终端pc对于系统的控制,其函数为pthread_create(&th_a, NULL, keyshell, 0),其中keyshell先显示选项1是打电话,2是接电话,3是挂电话,4是发短信,5是换波特率,6是退出,*是帮助。然后读取键盘输入的命令,以执行相应功能。这里个功能的执行方式将在下面进行详述。一切就绪后,进行循环等待输入,语句为while(!STOP) usleep(100000)。最后,当STOP=1的时候跳出循环,用tty_end();结束程序。2功能实现。打电话功能。当选择1的时候进入电话功能,可以实现拨号并与他人手机进行通话的功能。在用strncmp语句确定选择后,提示输入电话号码。将它存到cmd变量,由gprs_call(cmd, strlen(cmd);进行处理。在这里先发送拨打命令ATD,将输入的数字串解析成号码,再开始进行呼叫。当选择2的时候,进入接电话功能。用gprs_ans();函数完成,向模块发送接听命令ATA。当选择3的时候,挂电话。用gprs_hold();函数完成,向模块发送挂机命令ATH。当选择4的时候,进入发短信功能。先输入发送短信的电话号码get_line(cmd);,用gprs_msg(cmd, strlen(cmd);函数完成发送功能。具体gprs_msg的工作方式如下。先确定要发送的字符,即发的信息,向模块发送发送修改字符集命令at+cmgf=1,再发送发短信命令at+cmgs=。当选择5的时候,换波特率。先输入要变换的波特率,再用gprs_baud(cmd, strlen(cmd);函数完成。当选择6的时候,退出程序。将STOP置1,使main的while(!STOP) usleep(100000)语句不满足循环条件执行tty_end()退出程序。3程序编译与运行通过建立makefile文件,将这些.c文件进行编译,形成gprs.exe程序。在运行前,需要将NFS配置好,将编译好的程序gprs放到/nfsroot中,为了开发板与pc连接成功,要开放/nfsroot的读写权限。将开发板的/mnt/nfs挂接到pc的/nfsroot。语句如下:mount -o nolock 1:/nfsroot /mnt/nfspxa270cd /mnt/nfspxa270./gprs其中,选1是打电话,2是接电话,3是挂电话,4是发短信,5是换波特率,6是退出,*是帮助例如可以选1打电话结束语这次课程设计,虽然时间比较紧,但是,通过编程操作,学习和掌握构建基于PXA270硬件平台和嵌入式Linux软件开发环境的方法,基本的掌握GPRS 通讯原理,认识了GPRS 通信电路的主要构成,应用ARM 嵌入式开发平台配置的GPRS 扩展板,通过编程应用程序控制GPRS 扩展板,实现发送固定内容的短信,接打语音电话等通信模块的基本功能。实现GPRS模块的访问与控制,以及实现接打语音电话的功能,还有发送固定内容的短信的功能。参考文献1李俊.嵌入式Linux设备驱动开发详解M.北京:人民邮电出版社,20082杨刚.32位RISC嵌入式处理器及其应用M.北京:电子工业出版社,20073石秀民,魏洪兴.嵌入式系统原理与应用-基于XScale与LinuxM.北京:北京航空航天大学出版社,2007附录主函数文件为ex3.c:#include extern int compute(int data);int main()int x;printf(Input x=);scanf(%d,&x);printf(The result is %dn,compute(x);return 0;包含计算3*x2+2*x3过程的文件为compute.S:.text.align.global compute compute:stmfd sp!,r4-r11,r14mul r1,r0,r0mov r3,#2mul r2,r1,r3mov r3,#3mul r4,r1,r3mla r0,r2,r0,r4ldmfd sp!,r4-r11,r15Makefile文件CC= arm-linux-gccNAME = ex3 ex3 : ex3.c compute.S$(CC) ex3.c compute.S -o $(NAME)clean:rm -f $(NAME)(以上首行空格是TAB键生成,否则会引起遗漏分隔符错误)Gprs.c#include #include #include /linux的系统调用,包含了许多 U N I X系统服务的函数原型#include /#include #include tty.h#includegprs.hvoid gprs_init() int i;for(i=0; i5; i+) tty_writecmd(cmdi, strlen(cmdi); /下面选择通道0,使用普通电话话柄/* gprs_cmd(AT+CHFA=0r); /设置通话通道为0 usleep(1000); gprs_cmd(AT+CLVL=100r);/设置受话器音量最大 usleep(1000); gprs_cmd(AT+CMIC=0,10r);/设置通道0的话筒增益 usleep(1000);*/void gprs_hold()tty_writecmd(at, strlen(at);tty_writecmd(ath, strlen(ath);/发送挂机命令ATHvoid gprs_ans() tty_writecmd(at, strlen(at);tty_writecmd(ata, strlen(ata);/发送接听命令ATA/拨叫 void gprs_call(char *number, int num) tty_write(atd, strlen(atd); /发送拨打命令ATDtty_write(number, num);tty_write(;r, strlen(;r);usleep(200000);/发送短信void gprs_msg(char *number, int num) char ctl=26,0;char text=Welcome to use up-tech embedded platform!;tty_writecmd(at, strlen(at);tty_writecmd(at, strlen(at);tty_writecmd(at+cmgf=1, strlen(at+cmgf=1);/发送修改字符集命令tty_write(at+cmgs=, strlen(at+cmgs=);/发送发短信命令,具体格式见手册tty_writecmd(number, strlen(number);tty_write(text, strlen(text);tty_write(ctl, 1); /“CTRL+Z的ASCII码usleep(300000);void gprs_baud(char *baud,int num)tty_write(at+ipr=, strlen(at+ipr=);tty_writecmd(baud, strlen(baud) );usleep(200000);Keyshell.c#include #include #include #include #include #include #include #include char shell_s=nkeyshell$: ;/*int argc, char *argv*/#define CMD_TPYE(0)#define PHONE_NUMBER(1)#define MAX_CMD_DEPTH (2)extern volatile int STOP ;int get_line(char *cmd) int i=0; char temp;while (1) temp = getchar();if (temp = r | temp = n) return 0 ;cmdi=temp; if(cmdi=13) cmdi=0; break; fflush(stdout); i+;void * keyshell()char cmd256=0,;gprs_init();/GPRS 初始化printf(n);printf(n 1 give a call);printf(n 2 respond a call);printf(n 3 hold a call);printf(n 4 send a msg);printf(n 5 change baudrate);printf(n 6 exit);printf(n * help menu);while(1)printf(shell_s);fflush(stdout);get_line(cmd);printf(rn);/显示必要的输出if(strncmp(1,cmd,1)=0)printf(nyou select to gvie a call, please input number:);fflush(stdout);get_line(cmd);gprs_call(cmd, strlen(cmd);printf(ncalling.); else if(strncmp(2,cmd,1)=0)gprs_ans();printf(nanswering.); else if(strncmp(3,cmd,1)=0)gprs_hold();printf(nhold a call);else if (strncmp(4,cmd,1)=0)printf(nyou select to send a message, please input number:);fflush(stdout);get_line(cmd);gprs_msg(cmd, strlen(cmd);printf(nsending.); else if(strncmp(6,cmd,1)=0)printf(nexit this program!n);STOP=1;break; else if(strncmp(5,cmd,1)=0)printf(nyou select to change baudrate, please input baudrate:);fflush(stdout);get_line(cmd);gprs_baud(cmd, strlen(cmd);printf(please exit and run as another baudrate.);else if (strncmp(*,cmd,2)=0)printf(n);printf(n 1 give a call);printf(n 2 respond a call);printf(n 3 hold a call);printf(n 4 send a msg);printf(n 5 change baudrate);printf(n 6 exit);printf(n * help menu);else if(cmd0 != 0)system(cmd);Main.c#include #include #include #include #include /#include #include #include tty.h#include gprs.h/*-*/#define ENDMINITERM 27 /* ESC to quit miniterm */#define FALSE0#define TRUE 1/*-*/volatile int STOP=FALSE;int GET_GPRS_OK=FALSE;volatile int baud=B115200;char * cmd20=at,ate1,at+chfa=1, /设置通话通道为1,AT+CHFA 命令切换主副音频通道at+clvl=100,/设置受话器音量最大, AT+CLVL 命令可以调节输出音频信号增益at+cmic=1,10/设置通道1的话筒增益/atd12345678r,;void * keyshell() ;/* modem input handler */void* gprs_read(void * data)int i=0;char c;char buf1024; printf(nread modemn); while (STOP=FALSE) tty_read(&c,1); printf(%c,c); printf(exit from reading modemn); return NULL; int get_baudrate(int argc,char* argv)/看波特率的输入值int v=atoi(argv1);switch(v)case 4800:return B4800;case 9600:return B9600;case 19200:return B19200;case 38400:return B38400;case 57600:return B57600;case 115200:return B115200;default:return -1; /*-*/int main(int argc,char* argv)int ok; pthread_t th_a, th_b; void * retval;if (argc 1)baud=get_baudrate(argc, argv);/获取波特率tty_init();/终端初始化,pc与实验版的通信设置,如波特率。pthread_create(&th_b, NULL, gprs_read, 0); /创建进程,读取模块 pthread_create(&th_a, NULL, keyshell, 0); /读取键盘while(!STOP) /循环等待usleep(100000); tty_end(); exit(0); Tty.c#include #include #include #include #include extern volatile int baud;/#define COM1 /dev/tts/0#define COM2 /dev/ttse/0/#define COM2 /dev/ttyS0static int fd;static struct termios oldtio,newtio;/=int tty_end() tcsetattr(fd,TCSANOW,&oldtio); /* restore old modem setings */ close(fd);/=int tty_read(char *buf,int nbytes)return read(fd,buf,nbytes);/=int tty_write(char *buf,int nbytes)int i;for(i=0; inbytes; i+) write(fd,&bufi,1);usleep(100);return tcdrain(fd);/=int tty_writecmd(char *buf,int nbytes)int i;for(i=0; inbytes; i+) write(fd,&bufi,1);usleep(100);write(fd,r,1);usleep(300000);return tcdrain(fd);/=int tty_init()fd = open(COM2, O_RDWR ); /| O_NONBLOCK);/if (fd 0) perror(COM2); exit(-1); tcgetattr(fd,&oldtio); /* save current modem settings */bzero(&newtio, sizeof(newtio); /newtio.c_cflag = oldstdtio.c_cflag;/newtio.c_iflag = oldstdtio.c_iflag;/newtio.c_oflag = oldstdtio.c_oflag;/ newtio.c_lflag = oldstdtio.c_lflag;newtio.c_cflag = baud | /*CRTSCTS |*/ CS8 /*| CLOCAL | CREAD */;newtio.c_iflag = IGNPAR | ICRNL; newtio.c_oflag = 0; newtio.c_lflag = ICANON; newtio.c_ccVINTR = 0; /* Ctrl-c */ newtio.c_ccVQUIT = 0; /* Ctrl- */ newtio.c_ccVERASE = 0; /* del */ newtio.c_ccVKILL = 0; /* */ newtio.c_ccVEOF = 4; /* Ctrl-d */ newtio.c_ccVTIME = 0; /* 不使用分割字元组的计时器 */ newtio.c_ccVMIN = 1; /* 在读取到 1 个字元前先停止 */ newtio.c_ccVSWTC = 0; /* 0 */ newtio.c_ccVSTART = 0; /* Ctrl-q */ newtio.c_ccVSTOP = 0; /* Ctrl-s */ newtio.c_ccVSUSP = 0; /* Ctrl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论