paper51.com
图2 MODEM数模转换 paper51.com 2.3.2 AT命令 内容来自www.paper51.com
和其它通信标准一样,MODEM通信也有其自己的一套规则和标准。Hayes公司的SmartMODEM系列产品已成为MODEM的事实上的标准,而几乎所有应用于计算机通信的MODEM均号称与Hayes SmartMODEM兼容。 内容来自www.paper51.com
所谓Hayes兼容MODEM,主要是指它能识别并执行称为AT命令的某些命令和命令串。目前各厂家生产的MODEM除了可以执行最基本的Hayes命令集外,还有自己特有的命令。AT命令的建立使得DTE(Data Terminal Equipment,用于发送和接收数据的数据终端设备)从以上杂条中解脱出来,振铃检测、载波检测、速率选择等等都可以由MODEM来完成。此时TXD和RXD不仅仅是传输数据,还传送AT命令。DTE发送AT命令到MODEM,MODEM执行后通过RXD返回结果给DTE。这些命令和返回结果符合RS-232C数据格式。MODEM由AT命令和几个特定的S寄存器的状态确定DTE发出的是命令还是数据。 http://www.paper51.com 3 系统开发环境3.1 系统开发环境 内容来自www.paper51.com
本系统采用的软件工具有: 内容来自论文无忧网 www.paper51.com Windows平台虚拟机:VMware-workstation-5.5.1-19175 http://www.paper51.com 操作系统: Radhat 9.0 内容来自www.paper51.com
编辑器:VI paper51.com 编译器:gcc 3.2.220030222 paper51.com
函数库:glibc 2.3.2.so copyright paper51.com 系统头文件:glibc_header 内容来自www.paper51.com 3.2 gcc简介 http://www.paper51.com
Linux系统下的gcc(GNU CCompiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。 copyright paper51.com Gcc编译器能将C、C++语言源程序、汇编程序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别。 copyright paper51.com
虽然称gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。 paper51.com
命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。 copyright paper51.com
gcc编译器的调用参数大约有100多个,其中多数参数可能根本就用不到,开发过程中使用最多的命令就是:gcc -O test test.c, test.c是C语言源程序,test是可执行文件,-O是gcc的参数,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。 copyright paper51.com 4 程序的设计4.1 设计概要 内容来自论文无忧网 www.paper51.com
此次设计之所以选择Linux,是因为Linux支持各种硬件平台和外部设备,Linux对串口的操作非常简单,功能齐全,且Linux有功能强大的C语言编译器(gcc),使程序的可移植性非常好。Linux又是完全开放的操作系统,很大程度上,Linux的开放性,赋予了其无穷的生命力。 内容来自www.paper51.com
本设计基于Linux操作系统,利用POSIXtermios函数控制计算机串口,通过AT命令初始化本地MODEM并让本地MMODEM与异地MODEM进行拨号连接。本设计使用的是56K MODEM,不同于现在市面上常见的ADSL MODEM。 连接成功后,通过读写计算机串口来实现文件传输--这个过程是用一个自编的文件传输协议来完成的。整个程序使用C语言实现。总体设想如图3所示: http://www.paper51.com 内容来自论文无忧网 www.paper51.com 图3 预期设计效果 内容来自www.paper51.com 总体来说,设计可以分成两部分来进行:RS-232-C与MODEM。但这两部分并不独立,MODEM的初始化及拨号连接等等一切对MODEM的控制和访问,都要通过串口,因为串口是计算机与MODEM的唯一通道。两部分的关系如图4如示: 内容来自www.paper51.com copyright paper51.com 图4 RS-232-C 内容来自www.paper51.com 所以设计的关键是现实对RS-232-C控制,然后再完成MODEM的部分。 http://www.paper51.com
4.2 RS-232-C建立与打开 paper51.com 一个输入/输出(I/O)端口是用来将资料送入计算机及从计算机取出的通道,有许多种类的输出/输入端口,现在要处理的是串行端口,每一个串行端口必须有一个输入/输出地址,以及一个中断号码(IRQ),有四个串口设备对应到COM1- COM4: paper51.com ttyS0 (COM1) address 0x3f8 IRQ 4 内容来自www.paper51.com ttyS1 (COM2) address 0x2f8 IRQ 3 copyright paper51.com
ttyS2 (COM3) address 0x3e8 IRQ 4 内容来自www.paper51.com ttyS3 (COM4) address 0x2e8 IRQ 3 内容来自论文无忧网 www.paper51.com
ttyS*是串口在Linux中的命名方式,COM*是串口在Windows中的命名方式,Linux是以ttyS0开始命名的,与Windows从COM1开始命名不同。ttyS0和ttyS2使用同一个中断IRQ4,ttyS1和ttyS3使用同一个中断IRQ3,所以如果同时使用了ttyS0和ttyS2或者ttyS1和ttyS3,就必须重设它们的中断才可以,幸运的是,现在常见的设备都不使用串口,所以连接56K MODEM时,多数情况都不必再重设串口中断,如果是外置MODEM,则它占用的是ttyS0,如果是内置MODEM,则它占用的很可能是ttyS2。Linux下可以使用ls –l/dev/ttyS*来检查系统是否正确的建立了串口设备。 内容来自论文无忧网 www.paper51.com |