函数cuteftp

cuteftp  时间:2021-04-21  阅读:()
NetBox-II嵌入式网络模块编程手册Emtronix英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-861806601感谢您购买英创信息技术有限公司的产品:NetBox-II嵌入式网络模块.
NetBox-II是一款基于32位微处理器Intel386EX的嵌入式PC模块,其外形尺寸为98mm*71mm;配有Flash、串口、以太网接口、GPIO、精简ISA总线、实时时钟、LCD接口、矩阵键盘接口等板载资源;采用BC3.
1作为开发调试工具.
NetBox-II上包括386EX在内的绝大多数芯片均为工业级,能够在大多数工业环境中稳定可靠地运行.
NetBox-II以其优良的性能,为数据通讯、工业自动化、嵌入式Web、智能终端、仪器仪表、分布式远程通讯与控制等众多行业的客户提供了快速、极高性能价格比的产品解决方案.
本手册主要是对NetBox-II的驱动程序及相应的测试程序作详细的介绍.
其相关的软件程序代码在所提供的应用光盘目录中,按照NetBox-II的不同应用分为以下几个子目录:.
.
\\startup程序起步的Demo例程.
.
\\driversNetBox-II相关的硬件接口函数及相应的测试例程.
.
\\UARTNetBox-II串口驱动程序及相应的测试例程.
.
\\LCDNetBox-IILCD汉字图形显示驱动程序及相应的测试例程.
.
\\Ethernet基于以太网的TCP/IP协议库API接口函数及相应的测试例程.
.
\\PPPnet基于PPP通讯的TCP/IP协议库API接口函数及相应的测试例程(主要是针对GPRS的应用测试例程)本手册将以上述几部分驱动程序为单元逐一介绍具体内容.
随着用户需求的不断发展,我们提供的驱动程序也在进行相应的更新调整.
用户可访问英创公司网站或直接与英创公司联系以及时获得NetBox-II的最新驱动程序.
此外,英创公司针对模块的使用编写有《NetBox-II嵌入式网络模块数据手册》;针对开发评估底板的使用编写有《NetBox-II嵌入式网络模块开发评估底板手册》.
这三个手册都包含在英创为用户提供的产品开发光盘里面,用户也可以登录英创公司的网站下载阅读.
用户还可以访问英创公司网站或直接与英创公司联系以获得NetBox-II的其他相关资料.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-861806602英创信息技术有限公司联系方式如下:地址:成都市高新区高朋大道5号博士创业园B座402#邮编:610041联系电话:028-8618066085140028028-85137442028-85136173传真:028-85141028网址:http://www.
emtronix.
com电子邮件:support@emtronix.
com.
cn英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-861806603目录1、C语言入门.
41.
1第一个应用程序.
41.
2建立工程文件51.
3文件读写62、硬件接口驱动程序.
72.
1硬件设置的接口函数定义72.
2硬件接口函数应用例程.
112.
2.
1Watchdog的使用.
112.
2.
2GPIO操作112.
2.
3中断程序.
123、TCP/IP协议库及其应用.
163.
1TCP/IP协议库函数原型定义.
163.
2TCP服务器演示程序283.
3TCP客户端演示程序293.
4UDP服务器演示程序303.
5UDP客户端演示程序303.
6FTP服务器演示程序.
313.
7支持多连接的服务器演示程序324、PPP及TCP/IP协议库及其应用334.
1PPPTCP/IP协议库函数原型定义334.
2GPRS应用454.
2.
1GPRS自动拨号上网.
454.
2.
2GPRS数据透明传输.
465、串口驱动程序.
515.
1串口驱动API函数.
515.
2RS232收发演示程序.
535.
3RS485数据收发.
536、LCD汉字显示程序.
556.
1汉字显示接口函数定义.
556.
2汉字显示程序的有关事项576.
3图形方式下汉字和西文显示示例.
57附录1BC31集成开发环境的基本配置60附录2基于NETBOX-II的应用软件开发流程61附录3TDRF及TD调试工具使用说明63英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066041、C语言入门本节主要是为那些初次接触C语言或对BC开发环境不太熟悉的用户提供的,如果你对此已有一定的了解,可跳过本节.
本节中说明的测试程序,在英创公司提供的光盘中子目录下.
1.
1第一个应用程序作为应用程序设计的第一步,我们将使用BC31集成开发环境,编写一个名为HELLO.
CPP的源程序并把它编译连接成可执行文件HELLO.
EXE:z将你的开发调试主机系统置于DOS提示符并进入你的工作目录下.
z键入命令BC,使系统进入BC集成开发环境,按F3打开一个名为HELLO.
CPP的文件.
这时,系统进入BC编辑环境.
无论用户是否使用BC的C++特性,我们建议用户的文件名都以CPP作为扩展名,这有利于程序的调试.
z通过键盘输入程序如下:#include#include#include#includeintmain(){structtimet;clrscr();//清屏printf("Hello!
\n");for(;;){gettime(&t);printf("%2d:%02d:%02d\r",t.
ti_hour,t.
ti_min,t.
ti_sec);英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-861806605if(kbhit())break;}return0;}z按F2键将程序存盘,再按F9对程序进行编译连接,生成EXE可执行文件.
z按ALT+X退出BC集成开发环境.
z在DOS提示符下,键入:td–rphello程序将被自动下载至NetBox-II下,并弹出源码调试窗口.
z按F9键,程序将运行.
如果接有LCD屏,可在LCD屏上看到"Hello!
"及动态刷新的当前时间串.
z如在NetBox-II上接有键盘,按任意键程序将退出.
在任意时候,可在PC上按CTRL+BREAK强制中断程序运行.
按ALT+X将退出TD调试状态.
1.
2建立工程文件建立工程文件可把多个程序模块方便地组合在一起进行编译连接,是设计专业程序的基本手段,这主要是因为通过建立工程文件可合理安排程序结构,快速调试程序错误,所以我们建议用户采用工程文件这一工具来设计自己的应用程序.
下面我们将建立一个工程文件MYPRJ.
PRJ,具有.
PRJ的扩展名.
z将你的开发调试主机系统置于DOS提示符下.
z键入命令BC,使系统进入BC集成开发环境,按ALT+P打开一个名为MYPRJ.
PRJ的工程文件.
这时按Insert键,向工程文件中添加TIMESTR.
CPP及HELO.
CPP.
z模块TIMESTR.
CPP定义了一个获取时间串的函数.
z模块HELO.
CPP包含了主函数main(),通过#include"timestr.
h",可以调用TIMESTR.
CPP模块中提供的获取时间串的函数.
z按F2键将程序存盘,再按F9对程序进行编译,自动对工程文件中两个源文件分别进行编译,然后连接,生成MYPRJ.
EXE可执行文件.
z利用TD,可以将MYPRJ.
EXE下载到NetBox-II下进行调试运行.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066061.
3文件读写利用操作系统提供的文件系统设计应用程序是嵌入式系统有别于一般单片机系统的一个显著特点.
任何一个文件在使用之前和使用之后,必须要进行打开和关闭,这是因为操作系统对于同时打开的文件数目是有限制的.
因此在使用文件前应打开文件,才可对其中的信息进行存取.
用完之后需要关闭,否则将会出现一些意想不到的错误.
BC提供了打开和关闭文件的函数:fopen()函数和fclose()函数.
在文件打开后,可根据需要调用相应的文件读写函数fread()函数和fwrite()函数.
我们提供的文件操作的例子程序,FILEIO.
PRJ包含了TIMESTR.
CPP和FILEIO.
CPP.
模块TIMESTR.
CPP定义了一个获取时间串的函数.
模块FILEIO.
CPP包含了主函数main(),实现了显示当前时间,并将当前时间转换成文本格式存盘.
在FILEIO.
CPP定义了一个存盘函数,代码主体如下:intSaveFile(char*FileName,char*str){FILE*fp;fp=fopen(FileName,"wt");//打开文件,格式为可写的文本文件if(fp==NULL){printf("CannotOpenthisFile!
\n");return-1;}fprintf(fp,"%s",str);//向文件中写入串fclose(fp);//关闭文件return0;}英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066072、硬件接口驱动程序与本节相关的程序在光盘中的目录下.
2.
1硬件设置的接口函数定义NetBox-II提供了可对低层硬件操作的接口函数,其定义在NetBox-II.
H中,NetBox-II.
CPP是对NetBox-II提供的低层操作C/C++接口函数的实现,各个函数的定义如下:(1)charfar*SetCSAsMem(unsignedCSIdx,unsignedBufferSize,unsignedWaitStates);函数功能描述:设置CS0#或CS1#为存储器片选线,返回片选区域首地址.
输入参数:CSIndex=0:forCS0#;=1:forCS1#BufferSize=2,4,8(单位:1K字节,即1024字节)WaitStates=0-31.
设置插入的总线节拍,用户通过此参数的调整,使NetBox-II的扩展总线时序与外部设备的读写速度相匹配;对于24MHz系统时钟,一个总线节拍则为83ns.
每个总线访问过程包括2个固定总线节拍和若干插入总线节拍组成.
举例:设置CS0#为访问8KB双口RAM的片选,加入0个总线节拍,总的访问时间为2个总线节拍,166ns的存储器访问周期.
charfar*bptr=SetCSAsMem(0,8,0);(2)intSetCSAsIO(unsignedCSIdx,unsignedBasePort,unsignedIOSize,unsignedWaitStates);函数功能描述:设置CS0#或CS1#为IO器件片选线输入参数:CSIndex=0:forCS0#;=1:forCS1#BasePort=NetBox未使用的端口,一般在0x200-0x3FF中选择.
建议IO设置区域:CS0#:0x200-0x27F;CS1#:0x300-0x37F英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-861806608IOSize=2,4,8,16,32,64,128(字节)WaitStates=0-31.
1定义同(1)举例:设置CS0#为访问16C554的片选,基地址=0x200,16C554占用32个IO地址.
8位数据宽度.
加入2个总线节拍,总的访问时间为4个总线节拍,形成330ns的IO访问周期.
SetCSAsMem(0,0x200,32,2);CS0#和CS1#片选区域的合法输入定义如下:片选区域定义选择存储器访问时片选空间选择I/O访问时片选空间22K字节2字节44K字节4字节88K字节8字节16未定义16字节32未定义32字节64未定义64字节128未定义128字节(3)intEnableWDT(floatseconds);函数功能描述:使能watchdog,并设置定时间隔.
输入参数:seconds=watchdog的定时时间间隔,单位为秒举例:使能watchdog,设置定时间隔为1分钟.
EnableWDT(60);注意:对24MHzNetBox-II,最大定时间隔=0xffffffff*83ns=356秒.
一旦watchdog使能,就不能再关闭,定时间隔也不能修改.
对定时间隔的设置,不能超出最大定时间隔.
(4)intReloadWDT();函数功能描述:重载watchdog.
注意:最好在程序的主流程中重载watchdog.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-861806609(5)intGetBootState();函数功能描述:返回系统启动的原因,当返回值等于0时,表明系统是正常启动;返回值等于1时,表明系统是watchdog启动的.
注意:本函数只能调用一次.
(6)intNB_Delay(unsignedintmilliseconds);函数功能描述:利用系统定时器的延时函数,输入参数为延时的毫秒数.
由于NetBox中系统定时器的输入时钟为1MHz,而不是标准PC的1.
19MHz,因此使用BC的延时函数delay(…)不能得到准确延时,建议在应用程序中用NB_Delay(…)来代替delay(…).
(7)voidSysReboot();函数功能描述:重新启动系统,相当于PC机的热启动.
(8)intEnterPowerSaveMode();函数功能描述:让CPU进入省电状态,此时功耗可下降至220mA水平(全速运行为280mA).
在省电状态的CPU可继续响应系统的所有硬件中断,从而重新进入正常工作状态.
(9)voidEnableGPIO();函数功能描述:使能在精简ISA扩展总线上的8位通用数字IO,同时地址总线的高8位A5-A12被禁止.
NetBox上电启动的缺省设置中:GPIO被使能,且所有8位信号均处于输入状态.
(10)voidEnableAddressBus();函数功能描述:使能在精简ISA扩展总线上的高8位地址总线A5-A12,同时8位通用数字IO被禁止.
(11)voidCfgGPIODir(unsignedcharDirByte);函数功能描述:设置8位通用数字IO的输入输出方向.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066010输入参数:DirByte中为1的位,表示对应的GPIO为输入;否则为输出.
(12)voidSetGPIO(unsignedcharOutByte);函数功能描述:设置GPIO的输出位.
输入参数:OutByte为输出值.
(13)unsignedcharGetGPIO();函数功能描述:读入GPIO的输入状态.
注意:返回字节中,只有方向设置为输入的,才是有效的.
(14)voidKeypadEnable();函数功能描述:把KIN[0.
.
3]和KOUT[0.
.
4]设置为4*5矩阵键盘.
NetBox上电启动的缺省设置中:KIN[0.
.
3]和KOUT[0.
.
4]被设置为4*5矩阵键盘.
(15)voidKIOasDIO();函数功能描述:把KIN[0.
.
3]设置为数字输入、KOUT[0.
.
4]设置数字输出.
(16)voidExpandKeyEnable();函数功能描述:使能扩展键盘,此时需在应用程序中重新加载键盘中断程序,以获得更大的矩阵键盘.
最大矩阵键盘为4*16.
(17)voidComclkEnable();函数功能描述:让KOUT4输出1.
846MHz时钟,作为串口波特率时钟.
此时KOUT4已不能作为键盘扫描信号或数字输出信号.
(18)voidCLK24MEnable();函数功能描述:让KOUT3输出24MHz时钟,作为扩展设备时钟(如CAN控制器).
此时KOUT3已不能作为键盘扫描信号或数字输出信号.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066011(19)voidSPI_Enable();函数功能描述:把KIN[0.
.
2]和KOUT[0.
.
2]设置为SPI相应的输入输出信号.
此时矩阵键盘失效,在SPI模式下的各输入输出信号定义如下:NetBox-II信号对应的SPI信号功能简要描述KIN0DINSPI串行数据输入KIN1BUSYSPI器件辅助状态输入KIN2INTR#SPI设备中断请求输入,低电平有效KOUT0DOUTSPI串行数据输出,可被三态禁止输出KOUT1SCLK串行时钟输出KOUT2CS#设备片选控制输出SPI设备的中断输入经过反相后将直接接到键盘硬中断(INT09)上.
SPI的访问时序由软件实现.
通过SPI接口,可方便地实现触摸屏等功能.
本质上讲,SPI是一种三线制串口,也可把KIN0和KOUT0连接在一起,仿真实现I2C接口.
对串行接口感兴趣的客户,可向英创公司技术支持部门索取更详细的端口操作说明.
2.
2硬件接口函数应用例程2.
2.
1Watchdog的使用用于测试WatchDog函数,WDT.
PRJ由NETBOX.
CPP和WDT.
CPP构成,NetBox.
CPP提供低层操作的C/C++接口函数,WDT.
CPP包含了主函数main(),先调用EnableWDT(2.
0)函数启动WatchDog,设置的时间间隔为1.
99秒,在循环中不断调用ReloadWDT()重载watchdog,如果将循环中的延时时间调整超过2秒,系统将被重新启动.
2.
2.
2GPIO操作实现对8位通用数字IO输入输出操作.
GPIO.
PRJ由NETBOX.
CPP和GPIO.
CPP构成,NetBox.
CPP提供低层操作的C/C++接口函数,GPIO.
CPP包含了主函数main(),在英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066012main()中通过调用低层的操作函数,首先把GPIO设置为输出,然后设置不同的输出.
例如:EnableGPIO();//使能GPIOCFGGPIODir(0);//设置8为数字IO的方向为输出SetGPIO(0x55);//设置GPIO[7.
.
0]=0x55NB_Delay(1);//延时1秒SetGPIO(0xaa);//设置GPIO[7.
.
0]=0xaa2.
2.
3中断程序NetBox-II提供三类可调用的中断资源:1)一类是可直接调用的DOS和BIOS中断,NetBox-II所支持的软中断与PC完全兼容;2)NetBox-II的精简ISA扩展总线中共有4个中断资源,可用于支持用户扩展的专用硬件单元;3)NetBox-II单元定时器TMR1主要是用于实现1毫秒至50毫秒间隔的定时中断.
下表为NetBox-II硬件中断一览表:中断名称中断号中断优先级备注IRQ60x0E13(次低)扩展总线外部中断IRQ70x0F14(最低)扩展总线外部中断IRQ100x724(最高)NetBox-II内部定时中断IRQ120x746(次高)扩展总线外部中断IRQ140x768(中等)扩展总线外部中断各个中断对应的中断服务程序定义为:voidinterruptIRQ6_ISR(__CPPARGS);voidinterruptIRQ7_ISR(__CPPARGS);voidinterruptIRQ10_ISR(__CPPARGS);//定时中断服务程序voidinterruptIRQ12_ISR(__CPPARGS);voidinterruptIRQ14_ISR(__CPPARGS);intInstallISR(intintno);//该函数的功能是置中断.
输入参数为中断号.
intUninstallISR(intintno);//该函数的功能是恢复中断.
本节内容主要介绍这三类中断资源的程序调用方法.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066013(1)系统定时器与软中断的调用与PC兼容系统定时器一样,NetBox-II的系统定时器(Timer0)也是每秒中断约18.
2次,既中断周期约为55ms,通常称为一个tick.
为了让应用程序系统定时器执行各种定时任务,每次系统定时中断均会调用软中断int0x1C,这样应用程序可简单的加载软中断0x1C,方便地进行各种定时操作了.
加载定时任务的方法就是直接加载中断0x1C的中断服务程序,而中断0x1C服务程序通常是通过管理存储器变量来达到定时的目的.
voidCaptureTime(){oldhandler=getvect(0x1C);setvect(0x1C,Service);}voidReleaseTime(){setvect(0x1C,oldhandler);}voidinterruptService(__CPPARGS){if(Mask==0){Times++;if(Times==2)Flash(0);if(Times==8){Flash(1);Times=0}}}voidFlash(inttype){英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066014if(type==0)LCD_FillBar(cuX,cuY,cuX+7,cuY+1,1);elseLCD_FillBar(cuX,cuY,cuX+7,cuY+1,0);}调用函数CaptureTime(),设置中断0x1C的中断服务程序为Service(),每55ms中断一次,执行该中断服务程序Service(),通过管理变量Times,在屏幕上显示不同的图形,以达到图形光标闪烁的效果.
注意:中断0x1C是以tick(55ms)为节拍工作的,因此定时的最小单位为一个tick,对于更长的定时,可以通过对tick计数来实现,而对于更短时间的定时操作则需要利用系统的Timer1来实现了.
(2)内部定时器中断的使用NetBox-II内部包含的一个82C54定时器Timer1可供应用程序使用,Timer1的输入时钟为1MHz,控制端口为0x43,数据端口为0x41,编程设置的方法如下:outport(0x43,0x76);//方波模式outportb(0x41,N&0xff);//N为分频数,设置分频数的低字节outportb(0x41,(N>>8)&0xff);//N为分频数,设置分频数的高字节Timer1的分频输出已接到中断输入IRQ10(内部)以支持定时中断功能.
TMRDEMO.
PRJ工程文件由NETBOX.
CPP、TMRISR.
CPP及TMRDEMO.
CPP构成.
NetBox.
CPP定义了低层的接口函数,TMRISR.
CPP提供了定时中断服务程序,TMRDEMO.
CPP包含了主函数main().
IRQ10为内部中断,其时钟输出已接到了相应的中断输入,不需要外接线.
TMRDEMO.
CPP首先设置Timer1输出一个周期为10ms的方波信号(N=10000),设置GPIO为输出模式,然后启动定时中断服务程序.
定时中断服务程序TMTISR.
CPP以toggle方式设置GPIO的输出,并让内部计数值加1.
用户可参见源代码以了解详细的过程.
(3)外部硬件中断的使用在实际应用中,一般使用硬件中断的方法是编写中断服务程序,在程序初始化中安装中断程序,在程序退出时卸载中断程序.
中断服务程序一般通过存储器变量与上层应用程序交换数据.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066015ISRDEMO.
PRJ工程文件由NETBOX.
CPP、TMRISR.
CPP、BUSISR.
CPP和ISRDEMO.
CPP构成,其中模块BUSISR.
CPP提供了在扩展总线的4个外部中断函数的编写方法.
我们提供的中断服务程序例子中,定时中断如上所描述那样工作,把周期(20ms)变化的GPIO通过NetBox-II评估板连接到4个外部输入上,从而触发外部中断.
外部中断每中断一次,分别对各自的计数值加1,主程序ISRDEMO将在LCD上显示这些计数值.
用户在实际的运用中,可根据需要修改中断服务程序.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-86180660163、TCP/IP协议库及其应用NetBox-IITCP/IP通讯软件是一组可在NetBox-II环境中调用的软件运行函数,通过在NetBox-II以太网接口实现基于TCP/IP或UDP/IP协议的通讯功能.
我们提供了六个测试程序.
这些测试程序放置在光盘中子目录下.
测试的方法是将我们提供的测试程序下载到NetBox-II运行,而另一端在PC机上运行我们提供的基于WinSocket的VC源码及相应的Windows运行程序.
我们提供的VC用户不仅可利用此程序对NetBox-II的网络功能进行测试,还可在此基础上进行修改,以构成自己的上位机程序.
有关VC程序的介绍已超出了本手册的范围,目前市面上有大量相关参考书可供用户在设计上位机程序时参考.
此外TCP/IP通讯是与操作系统、编程工具无关的,用户也可采用其他编程工具,如VB、Delphi、C++Builder等来设计自己的网络通讯程序.
在对网络程序进行调试时,需注意的是对程序调试的网络环境的选择,网络程序的调试网络环境应该选择没有大量广播包,ping包的小规模网络(LAN),否则调试过程中,由于没有及时地处理这些数据包,而让系统缓冲区(buffer)被占满,从而导致网络失效.
3.
1TCP/IP协议库函数原型定义嵌入式网络模块TCP通讯软件是一组可在英创嵌入式网络模块环境中调用的软件运行函数,通过其以太网接口实现基于TCP/IP或UDP/IP协议的通讯功能.
客户的应用程序通过在BC集成编程环境下直接调用该通讯软件的各个函数,并把其库函数文件连入客户应用程序的工程文件中,即可实现完整的网络通讯.
为了同时适应在单任务DOS操作系统及RTOS下设计网络通讯程序,英创公司的嵌入式网络模块TCP通讯软件采用直接面对连接的方法构成,并针对工业控制的特点进行了封装,构成了若干个可直接使用函数,使用户能以最快的速度操作使用英创嵌入式网络模块的网络资源.
以下对各个函数作详细介绍:(1)intInitEthernetNet(char*IPString=NULL,char*MSKString=NULL);功能描述:初始化以太网接口.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066017输入参数:char*IPString本地IP地址串,形式为:"n1.
n2.
n3.
n4";IP串为空,则系统按缺省IP地址("192.
168.
201.
22")进行初始化,若IP为"0.
0.
0.
0",将发送DHCP请求报文,请求自动分配IP,如果网络环境中没有运行DHCP服务器,将超时退出,初始化失败.
char*MSKString用户根据需要设置子网掩码,形式为:"m1.
m2.
m3.
m4".
当MSKString串为空时,系统将按IP地址的类型设置其子网掩码.
用户也可根据实际应用需要,设置相应的子网掩码,比如为B类IP"162.
168.
201.
22",设置C类子网掩码"255.
255.
255.
0".
用户可通过子网掩码的有效设置,来提高网络IP地址的利用率.
返回值:若正确返回值为0,若初始化失败返回值=0,若失败返回值=0表示正确返回,其值为连接号,应用程序操作TCP/IP通讯接口时,都需使用该连接号;若失败返回值0正常返回,返回值为实际读取的字节数;EBADF无效连接号,读取操作未执行.
EWOULDBLOCK对无阻塞方式打开的连接,表示无数据,可重复调用该函英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066020数.
ETIMEOUT超时错误,由应用程序决定后续处理.
EMSGSIZE数据太长,表明接收缓冲区太小.
(7)intConnWrite(intconno,char*buff,intlen,intPushFlg=0);功能描述:发送缓冲区中的数据到指定连接号网络接口.
输入参数:intconno连接号.
char*buffchar型指针变量,为存放发送数据的缓冲区buff地址.
intlen缓冲区的字节长度,对TCP连接,最大缓冲区长度应不大于1460字节;对UDP来说,最大缓冲区长度应不大于1472字节.
intPushFlg:=0为普通发送=1为急迫发送,仅对TCP连接有效.
返回值:>=0正常返回,返回值为实际发送的字节数;EBADF无效连接号,发送操作未执行.
ETIMEOUT超时错误,由应用程序决定后续处理.
EMSGSIZE数据太长,发送数据长度超过了内部缓冲区大小.
备注:在普通发送时,如果需要连续发送的数据包小于最大缓冲区长度,而且在连续发送之间没有作相应的延时,TCP/IP则有可能将连续的包作合包处理后发送,以提高网络的传输效率,所以在接收方收到的是已经合过的包.
在众多工业应用中,可以通过设置急迫标志,并在数据包与数据包之间作短暂的延时(如1ms)就可以使接收方收到与发送方一致的包.
从而避免在应用层对TCP数据流进行"断句"分析的麻烦.
(8)intConnIsEstablished(intconno);功能描述:检查连接是否建立.
输入参数:连接号.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066021返回值:1:连接已建立;0:连接还未建立.
(9)intConnCanSend(intconno,intlen);功能描述:检查是否能发送指定长度的数据.
输入参数:intconno连接号;intlen需发送数据的长度.
返回值:1:接已能发送指定长度的数据;0:连接不能发送指定长度的数据.
(10)intConnHasData(intconno);功能描述:检查是否有数据可读取.
输入参数:连接号.
返回值:1连接已存在可读取的数据;0连接无可读取的数据.
(11)intConnIsFinished(intconno);功能描述:可使用该函数检查该连接的对端是否进行了关闭连接的操作.
若对端已进行了关闭操作,系统应立即调用ConnClose(intconno)关闭该连接.
输入参数:连接号返回值:1连接已关闭;0连接未关闭.
(12)intConnIsFatal(intconno);功能描述:可使用该函数检查连接的状态.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066022输入参数:连接号返回值:1连接出现异常,如连接复位(RST)或超时.
0连接OK备注:应用程序在调用该函数检查到连接出现了异常,应立即关闭该连接,即连接方停止数据的传输,以释放诸如缓冲区之类的资源.
(13)intJoinMulticastGroup(char*MulticastIP);功能描述:本系统加入组播(且组播IP地址被MulticastIP唯一标示),使本系统能收到向本组播IP地址发送的信息.
(注:不能同时加入两个及以上的组播,要加入新的组播必须先退出上一组播)输入参数:MulticastIP组播的IP地址.
返回值:=0调用成功并返回此连接标示号备注:组播IP地址的设置需在打开网络连接之前进行.
(14)intLeaveMulticastGroup();功能描述:退出已加入的组播返回值:若成功返回0;若失败返回–1备注:退出组播需在相应网络连接关闭以后进行.
(15)intSetGateWayIP(char*GateWayIP);功能描述:在不同局域网之间通信时需要用到此函数设置网关地址.
使本机可以通过网关路由到外网的远端主机.
输入参数:char*GateWayIP网关的IP地址.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066023返回值:0远端FTP服务器读取数据的长度(21)intFTP_server(void*pTsk,unsignedlongtimeout,char*FTPusername,char*FTPpassword)英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066026功能描述:FTP服务器运行程序,FTP的实现是以非阻塞方式和阻塞方式相结合为特征的,当未与客户端建立连接时,处于非阻塞方式,函数可返回;当与客户端建立连接后,FTP服务器转入阻塞模式,这时需等待FTP请求完成后,函数才会退出.
输入参数:void*pTsk系统保留,总设置为空指针NULL.
unsignedlongtimeout超时时间,单位为毫秒,若FTP服务器在mseconds内未接受任何服务请求,则函数自动退出.
char*FTPusername设置FTP服务器的用户名,若FTPusername为空指针,则采用缺省用户名"guest".
char*FTPpassword设置FTP服务器的密码,若FTPpassword为空指针,则采用缺省密码"888".
返回值:=0等待FTP连接请求,可再次调用该函数.
=1已有FTP连接请求,等待连接建立,需再次调用该函数.
=2FTP连接完成,可再次调用该函数.
(22)voidNetPackagePro()功能描述:处理低层的网络数据包,如广播包、ping包等.
应用程序如果在一段时间内没有操作网络,应调用该函数,使得网络数据包能够得到及时处理,释放网络内部资源,从而避免网络阻塞.
(23)intEthernetLinkTest()功能描述:用于检查以太网物理连接link状态.
返回值:0:物理连接正常linkOK.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066027-30:物理连接出错linkfail.
(24)intPing(char*IPStr,unsignedlongMilliseconds)功能描述:采用ICMP协议查询远端的服务器主机是否工作.
输入参数:char*IPStr远端主机的IP地址,如:"192.
168.
201.
121"unsignedlongMilliseconds等待远端服务器主机应答的最长时间,单位为毫秒,时间一般设置在100—3000毫秒之间.
返回值:=0:远端服务器主机有应答,说明远端服务器主机处于运行状态.
!
=0:无相应的服务器主机应答.
(25)intSetReloadWDTInNet(void(*)Reload())功能描述:把WatchDog定时器的加载函数传给网络运行库,使之能在网络函数运行期间及时加载WatchDog.
输入参数:void(*)Reload()WatchDog加载函数指针.
备注:在网络初始化成功后,此函数只需调用一次即可.
(26)intARPHost(char*IPStr,unsignedlongMilliseconds)功能描述:采用ARP包来查询远端的服务器主机是否工作.
输入参数:char*IPStr远端主机的IP地址,如:"192.
168.
201.
121"unsignedlongMilliseconds等待远端服务器主机应答的最长时间,单位为毫秒,时间一般设置在100—1000毫秒之间.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066028返回值:>=0:远端服务器主机有应答,说明远端服务器主机处于运行状态.
cuteFTP.
FTP连接建立后,可以下载或上传文件进行测试.
FTPSVR.
PRJ工程文件由FTPSVR.
CPP、REDAINI.
CPP和ETR_TCP.
LIB构成.
在FTPSVR.
CPP中包含主函数main(),首先读取配置文件netconf.
ini的内容,从中获得所需配置的本地IP、掩码以及网关地址,再调用InitEthernet(…)初始化以太网接口,接着进入主循环,调用FTP服务器运行程序intFTP_server(NULL),FTP的实现是以非阻塞方式和阻塞方式相结合为特征的,当未与客户端建立连接时,处于非阻塞方式,函数可返回;当与客户端建立连接后,FTP服务器转入阻塞模式,这时需等待FTP退出后,函数才会退出.
函数FTP_server(NULL)输入参数在单任务时,选择NULL.
返回值为0:等待FTP连接打开;1:等待FTP连接建立;2:一次FTP连接完成,可再次调用该函数.
Ftp_Server的用户名="guest"密码="888".
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-86180660323.
7支持多连接的服务器演示程序TCPSVR1.
PRJ提供的是一个支持同时打开多连接的TCP服务器运行程序.
工程文件包括有:ETR_TCP.
LIB提供TCP/IP协议的接口函数UTILITY.
CPP提供读取Ethernet的MAC地址函数TCPSERV.
CPP提供打开、建立TCP连接的管理程序TCPSVR1.
CPPPRJ文件的主循环在TCPCLNT.
CPP中,其通讯方式是以服务器模式方式(或称被动方式)打开TCP连接,并等待连接建立.
在该模块中定义了一个TCPServerManager的类,来实现以上功能.
采用C++的类来设计程序有助于得到更加稳定的程序结构.
classTCPServerManager类中定义了连接的三种状态:CLOSED表示关闭、START表示连接打开、OPEN表示连接已经建立.
提供的公共函数有:TCPServerManager(intMaxNumConn);功能描述:此为classTCPServerManager的构造函数,对各类变量进行初始化.
定义了同时打开的连接数,由所带参数MaxNumConn来定,其大小不超过MAXNCONN.
并将各个连接的初始状态置为CLOSED.
由于网络的资源有限,总共提供的连接数为20个,在本应用案例中,MAXNCONN定义为8,即最多同时打开8个以太网连接.
intThisConnHasData()功能描述:用于检查连接是否接收到有数据,其返回值>=0表明接收到网络数据,该返回值为收到数据的连接编号.
intCloseAll();功能描述:关闭所有已打开的连接.
该程序的测试方法和TCPSVR完全一致.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-86180660334、PPP及TCP/IP协议库及其应用NetBox-IIPPP/TCP/IP通讯软件是一组可在NETBOX-II环境中调用的软件运行函数,通过在NetBox-II接口实现基于PPP的TCP/IP或UDP/IP协议的通讯功能.
我们提供了一个利用PPP协议的GPRS应用的测试程序.
测试程序放置在光盘中子目录下.
4.
1PPPTCP/IP协议库函数原型定义嵌入式网络模块PPPTCP通讯软件是一组可在英创的嵌入式网络模块环境中调用的软件运行函数,通过在嵌入式网络模块串口COM2实现PPP通讯协议,并进一步实现在其上的TCP/IP协议的通讯功能.
客户的应用程序通过在BC集成编程环境下直接调用嵌入式网络模块PPPTCP通讯软件的各个函数,并把其库函数文件连入客户应用程序的工程文件中,即可实现完整的网络通讯.
为了同时适应在单任务DOS操作系统及RTOS下设计网络通讯程序,英创公司的嵌入式网络模块TCP通讯软件采用直接面对连接的方法构成,并针对工业控制的特点进行了封装,构成了若干个可直接使用函数,使用户能以最快的速度操作使用英创嵌入式网络模块的网络资源.
以下对各个函数作详细介绍:(1)intInitPPPNet(intPortNum=0,char*BAUD=NULL);功能描述:初始化网络接口.
输入参数:intPortNum用于PPP连接的串行端口号,设置为0表示使用COM1;设置为1表示使用COM2.
char*BAUD用于配置PPP连接的串行端口的波特率.
"9600"-----波特率为9600bps"19200"-----波特率为19200bps英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066034"38400"-----波特率为38400bps"57600"-----波特率为57600bps(缺省配置)"115200"-----波特率为115200bps如BAUD串为空NULL,按缺省的波特率(57600bps)进行配置.
返回值:若正确返回值为0,若初始化失败返回值0,若失败返回值=0表示正确返回,其值为连接号,应用程序操作TCP/IP通讯接口时,都需使用该连接号;若失败返回值0正常返回,返回值为实际读取的字节数;EBADF无效连接号,读取操作未执行.
EWOULDBLOCK对无阻塞方式打开的连接,表示无数据,可重复调用该函数.
ETIMEOUT超时错误,由应用程序决定后续处理.
EMSGSIZE数据太长,表明接收缓冲区太小.
(7)intConnWrite(intconno,char*buff,intlen,intPushFlg=0);功能描述:发送缓冲区中的数据到指定连接号网络接口.
输入参数:intconno连接号.
char*buffchar型指针变量,为存放发送数据的缓冲区buff地址.
intlen缓冲区的字节长度,对TCP连接,最大缓冲区长度应不大于1460字节;对UDP来说,最大缓冲区长度应不大于1472字节.
intPushFlg:英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066037=0为普通发送=1为急迫发送,仅对TCP连接有效.
返回值:>=0正常返回,返回值为实际发送的字节数;EBADF无效连接号,发送操作未执行.
ETIMEOUT超时错误,由应用程序决定后续处理.
EMSGSIZE数据太长,发送数据长度超过了内部缓冲区大小.
备注:在普通发送时,如果需要连续发送的数据包小于最大缓冲区长度,而且在连续发送之间没有作相应的延时,TCP/IP则有可能将连续的包作合包处理后发送,以提高网络的传输效率,所以在接收方收到的是已经合过的包.
在众多工业应用中,可以通过设置急迫标志,并在数据包与数据包之间作短暂的延时(如1ms)就可以使接收方收到与发送方一致的包.
从而避免在应用层对TCP数据流进行"断句"分析的麻烦.
(8)intConnIsEstablished(intconno);功能描述:检查连接是否建立.
输入参数:连接号.
返回值:1:连接已建立;0:连接还未建立.
(9)intConnCanSend(intconno,intlen);功能描述:检查是否能发送指定长度的数据.
输入参数:intconno连接号;intlen需发送数据的长度.
返回值:1:接已能发送指定长度的数据;0:连接不能发送指定长度的数据.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066038(10)intConnHasData(intconno);功能描述:检查是否有数据可读取.
输入参数:连接号.
返回值:1连接已存在可读取的数据;0连接无可读取的数据.
(11)intConnIsFinished(intconno);功能描述:可使用该函数检查该连接的对端是否进行了关闭连接的操作.
若对端已进行了关闭操作,系统应立即调用ConnClose(intconno)关闭该连接.
输入参数:连接号返回值:1连接已关闭;0连接未关闭.
(12)intConnIsFatal(intconno);功能描述:可使用该函数检查连接的状态.
输入参数:连接号返回值:1连接出现异常,如连接复位(RST)或超时.
0连接OK备注:应用程序在调用该函数检查到连接出现了异常,应立即关闭该连接,即连接方停止数据的传输,以释放诸如缓冲区之类的资源.
(13)intGetIP(intconno,unsignedchar*IPCode);功能描述:获取连接对方的IP地址输入参数:intconno由ConnOpen()打开的连接号.
unsignedchar*IPCode获取此连接的对方的IP地址英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066039返回值:0远端FTP服务器读取数据的长度(18)intFTP_server(void*pTsk,unsignedlongtimeout,char*FTPusername,char*FTPpassword)功能描述:FTP服务器运行程序,FTP的实现是以非阻塞方式和阻塞方式相结合为特征的,当未与客户端建立连接时,处于非阻塞方式,函数可返回;当与客户端建立连接后,FTP服务器转入阻塞模式,这时需等待FTP请求完成后,函数才会退出.
输入参数:void*pTsk系统保留,总设置为空指针NULL.
unsignedlongtimeout超时时间,单位为毫秒,若FTP服务器在mseconds内未接受任何服务请求,则函数自动退出.
char*FTPusername设置FTP服务器的用户名,若FTPusername为空指针,则采用缺省用户名"guest".
char*FTPpassword设置FTP服务器的密码,若FTPpassword为空指针,英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066042则采用缺省密码"888".
返回值:=0等待FTP连接请求,可再次调用该函数.
=1已有FTP连接请求,等待连接建立,需再次调用该函数.
=2FTP连接完成,可再次调用该函数.
(19)voidNetPackagePro()功能描述:处理低层的网络数据包,如广播包、ping包等.
应用程序如果在一段时间内没有操作网络,应调用该函数,使得网络数据包能够得到及时处理,释放网络内部资源,从而避免网络阻塞.
(20)intPing(char*IPStr,unsignedlongMilliseconds)功能描述:采用ICMP协议查询远端的服务器主机是否工作.
输入参数:char*IPStr远端主机的IP地址,如:"192.
168.
201.
121"unsignedlongMilliseconds等待远端服务器主机应答的最长时间,单位为毫秒,时间一般设置在100—3000毫秒之间.
返回值:=0:远端服务器主机有应答,说明远端服务器主机处于运行状态.
!
=0:无相应的服务器主机应答.
(21)intSetReloadWDTInNet(void(*)Reload())功能描述:把WatchDog定时器的加载函数传给网络运行库,使之能在网络函数运行期间及时加载WatchDog.
输入参数:英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066043void(*)Reload()WatchDog加载函数指针.
备注:在网络初始化成功后,此函数只需调用一次即可.
(22)intSetupPPPLink(unsignedlongtimeout);功能描述:作为PPP的客户端,启动PPP连接,进行PPP认证,并检查PPP状态.
输入参数:unsignedlongtimeoutPPP客户端启动PPP连接时设定的一个超时时间,时间单位为秒,缺省值为300,即5分钟.
返回值描述0PPP打开、PPP认证成功,进入网络层协议状态.
0发送AT指令的长度.
0AT指令的响应值-1没有响应值(29)intSetSerMuxUp();功能描述:安装多路转换协议,并创建3个虚拟逻辑通道.
该函数应在发送"AT+CMUX=0"并返回"OK",延时2秒后调用.
返回值:0安装多路转换协议成功,并成功创建3个虚拟逻辑通道.
Running(),直到该函数返回连接的状态为OPEN.
此时主循环一方面检查网络对端是否有数据,如果有将接收的数据通过RS232发送出去;另一方面检查RS232串口是否接收到数据,如果有将接收到的串口通过TCP连接发送到对端服务中心.
从而实现了RS232和远端数据中心之间的数据透明传输.
同时需要说明的还有,在该例程中,还有一个心跳包的处理,如果在设置的心跳时间内一直没有数据的通讯传输,程序将主动发送一个心跳测试包到远端的服务中心,在该程序中的心跳测试时间设置为400个Tick值,约为20秒.
具体实现的方法请参见该程序代码.
程序测试在进行测试时,和串口相连的设备可是一台PC1机,在该PC机上运行串口调试助手程序(在提供光盘"测试工具"目录下)或者是Windows的超级终端程序;而另一端远端数据中心可在另一台PC2(已连入互联网的PC2)上运行我们公司提供的VC测试程序英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066049TCPTest(在提供光盘"测试工具"目录下).
1.
让PC2具有Internet互联网可访问的IP地址,有以下两种方法:1)互联网静态的IP地址.
2)通过ADSL或Modem拨号上的互联网,获取的是动态的互联网IP地址,运行>ipconfig,即可获得其动态IP地址.
2.
配置文件config.
ini介绍在运行GPRS232程序时,须带上配置文件config.
ini,该文件主要用于配置一些通讯参数.
[Config]RemoteIP=61.
157.
22.
196用于定义互联网上需连接的服务器的IP地址(即PC2的互联网IP).
RemotePort=1001用于定义在互联网上远端服务器的端口号.
BaudIdx=12用于定义NETBOX-II和设备(PC1)RS232通讯的波特率.
选择1对应的波特率为115.
2kbps,2对应的波特率为57.
6kbps,3对应的波特率为38.
4kbps,6对应的波特率为19.
2kbps,12对应的波特率为9600bps,以此类推.
3.
"远方服务数据中心"测试程序TCPTest简介TCPTest是运行在PC2上的程序,在运行该程序之前,首先须使PC2连上互联网,PC2上网后,运行TCPTest程序,选择为"服务器"模式,并点击侦听,其中的消息框将处于灰化状态.
如下图:英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066050如果NETBOX-II与PC2之间TCP连接建立成功,灰化的消息框将变亮,此时就可通过消息框对NETBOX-II发送字符串,同时接收设备通过NETBOX-II发送的数据.
接收到的数据将显示在接收的消息框内.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-86180660515、串口驱动程序NetBox-II嵌入式串行通讯程序能实现RS232/RS485串行通讯数据的收发,我们提供了两个测试程序.
测试的方法是将测试程序下载到NetBox-II运行,而另一端在PC机上运行串口调试助手程序或者是windows提供的超级终端程序.
5.
1串口驱动API函数NetBox-II提供了3个异步串口COM1、COM2、COM3,在缺省状态下COM1串口的最高波特率为115.
2kbps.
其中COM1与PC机的串口完全兼容,IO映射访问.
COM2和COM3来自于RDC1610内部.
为了方便用户掌握串口操作的具体细节,各个串口的低层驱动函数的定义和说明均以源代码的方式提供给客户,共包括6个函数,下面就各个函数的定义作一说明.
这几个函数的定义在RS232X3.
h,函数的说明在RS232X3.
cpp.
(1)intInitUART(intComIdx,intBaudIdx,intParity)功能描述:初始化串口输入参数:ComIdx:串行端口号设置,可选值如下表COMIdx助记符简要说明0COM116C550,端口地址为0x3F81COM2来自CPU内部,16C550兼容2COM3来自CPU内部,16C550兼容BaudIdx:通讯波特率设置,用户可根据需要进行配置,本演示程序中采用值为12(9600bps).
现将常用可选值列于下表,供用户参考:BaudIdx实际设置的波特率1115.
2kbps257.
6kbps338.
4kbps619.
2kbps129600bps英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066052244800bps482400bps961200bpsParity:用于选择串口通讯的奇偶校验.
0无校验1奇校验2偶校验注:本初始化函数中对数据通讯格式的设置为:8bit,1stop,noParity,用户也可根据自己的需要在源程序中对配置进行必要的调整.
(2)intInstallISR(intComIdx)功能描述:置中断.
输入参数:ComIdx:串行端口号设置,定义同InitUART.
返回参数:0:安装中断成功.
(3)intUninstallISR(intComIdx)功能描述:恢复中断.
输入参数:ComIdx:串行端口号设置,定义同InitUART.
返回参数:0:恢复中断成功.
(4)intPutOutputData(intComIdx,charabyte)功能描述:将待发送数据置入输出数据缓冲区中.
输入参数:ComIdx:串行端口号设置,定义同InitUART.
abyte:待发送数据字节返回参数:英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-86180660530:输出数据缓冲区未满,写数成功.
-1:输出数据缓冲区已满,写数失败.
(5)voidStartSend(intComIdx)功能描述:启动中断,开始数据发送过程输入参数:ComIdx:串行端口号设置,定义同InitUART.
(6)intGetInputData(intComIdx)功能描述:从接收数据缓冲区中取出数据输入参数:ComIdx:串行端口号设置,定义同InitUART.
返回参数:整数:返回接收数据缓冲区中所取整数-1:接收数据缓冲区为空5.
2RS232收发演示程序232DEMO.
PRJ工程文件由232DEMO.
CPP及RS232.
CPP构成.
在232DEMO.
CPP中包含主函数main(),main()首先根据命令参数(端口号)对相应串口进行初始化,开中断,实现数据接收显示及将接收数据向外发送的功能.
程序中,端口号通过命令行参数的形式输入.
如:232DEMOCOM2.
如果是在调试状态下运行,为:td–rp232DEMOCOM2.
由232DEMO.
prj编译连接生成的232DEMO.
exe作为服务器端,它首先响应客户端的接收请求,将客户端发送的数据在显示屏上显示出来,同时又将接收到的数据发送到客户端.
建议客户端执行串口调试助手程序或者windows提供的超级终端程序.
5.
3RS485数据收发RS485的数据收发的低层驱动函数和RS232是完全一致的,所以相关的函数介绍请参见RS232的说明.
RS485和RS232的区别在于RS485是半双工的,所以RS485收发的数据都是以具有一定特征的数据帧为单位的,为了方便测试,在我们提供的程序RS485demo.
prj和Clnt.
prj是以字符"!
"作为一个数据帧的结束标志.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066054英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-86180660556、LCD汉字显示程序NetBox-II的一类主要应用是作为智能终端的核心平台,智能终端总是带有一种显示单元.
NetBox-II作为一种高效、低成本的产品解决方案,专门针对小型的LCD模块(分辨率通常在122*32至320*240)设计了一套通用的汉字及图形显示接口函数.
这些API函数均以源码形式提供,用户不仅可以直接使用,还可根据自身需求进行必要的修改.
关于LCD汉字驱动及相应的测试程序在光盘中目录下.
6.
1汉字显示接口函数定义NetBox-II的LCD汉字显示API共包括7个函数,以及一个从CPP文件中提取汉字字模的工具程序source.
exe(源码在source.
cpp中).
这些函数的详细定义如下:(1)intLCD_Init(char*CHN_FntFile,char*ASCII_FntFile)功能描述:对LCD进行图形方式初始化,并加载汉字和西文字符字库.
输入参数:char*CHN_FntFile:汉字字库文件名,我们提供的汉字字库文件mlib.
chrchar*ASCII_FntFile:ASCII码文件名,我们提供的ASCII码库文件ascii.
chr(2)intLCD_Clearup()功能描述:在图形方式下对LCD进行清屏处理.
输入参数:无(3)intLCD_SetMode(intMode)功能描述:设置LCD的显示模式.
输入参数:intMode:0表示copy方式显示模式1表示xor方式显示模式(4)intLCD_PutPixel(intx0,inty0,intcolor);功能描述:在图形方式下进行描点.
输入参数:intx0:点的列坐标,范围0~127(或0-319),不可大于或等于128(或320)inty0:点的行坐标,范围0~63(或0-239),不可大于或等于64(或240)英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066056intcolor:颜色设置,0(不显示)或者1(显示).
(5)intLCD_DrawLine(intx0,inty0,intx1,inty1,intcolor);功能描述:在图形方式下进行画直线输入参数:x0:直线开始列坐标,范围0~127(或0-319),不可大于或等于128(或320)y0:直线开始行坐标,范围0~63(或0-239),不可大于或等于64(或240)x1:直线结束列坐标,范围0~127(或0-319),不可大于或等于128(或320)y1:直线结束行坐标,范围0~63(或0-239),不可大于或等于64(或240)color:颜色设置,0或者1.
(6)intLCD_FillBar(intx0,inty0,intx1,inty1,intcolor);功能描述:在图形方式下画Bar条.
输入参数:x0:Bar开始列坐标,范围0~127(或0-319),不可大于或等于128(或320)y0:Bar开始行坐标,范围0~63(或0-239),不可大于或等于64(或240)x1:Bar结束列坐标,范围0~127(或0-319),不可大于或等于128(或320)y1:Bar结束行坐标,范围0~63(或0-239),不可大于或等于64(或240)color:颜色设置,0或者1.
(7)intLCD_WriteString(intx0,inty0,char*pStr,intcolor,intlen=0);功能描述:在图形方式下写字符串(中文或西文字符).
输入参数:x0:字符输入列坐标,范围0~127(或0-319),不可大于或等于128(或320)y0:字符输入行坐标,范围0~63(或0-239),不可大于或等于64(或240)*pStr:需显示的字符串color:字符颜色设置,0或1len:字符显示长度,缺省设为0,表示按str实际长度显示;否则按length定义的长度显示.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-86180660576.
2汉字显示程序的有关事项1.
在BC集成环境(IDE)下建立包含由英创公司提供的LCD低层驱动模块(如HD61202.
cpp、SED1335.
cpp等)、Dotlib.
cpp、Lcd_api.
cpp及其他应用模块的工程文件,在需要的场合调用相关的图形操作函数或汉字显示函数.
最后编译连接形成可执行文件(.
EXE).
2.
汉字字模mlib.
chr可以通过我们提供的source.
exe搜索生成,直接编译source.
cpp文件即可生成source.
exe运行文件.
source文件在运行时,需带上参数,参数为需搜索的cpp文件名.
如:>sourcetst1.
cpp搜索tst1.
cpp中的汉字,生成新的汉字库mlib.
chr,同时生成新的头文件source.
h.
此时需再重新编译工程文件,最后连接形成与用户应用相关的可执行文件.
如果从多个CPP文件提取汉字,则执行source*.
cpp.
注意不要把source.
cpp放在应用程序同一个目录,以免把source.
cpp中的汉字也搜索进去.
3.
mlib.
chr最多只能包含512个汉字.
需要全汉字的应用,则需要把整个汉字字模文件加载到NetBox-II的高端存储器中,有关这方面的问题,请与英创公司技术支持部门联系.
4.
显示中西文必须使用工具软件tdrf把mlib.
chr和ascii.
chr先拷贝入NetBox-II的运行盘中(B:\或C:\),然后程序才能正常运行.
5.
建议客户的应用程序,不用汉字来写注释,以保证mlib.
chr包含的都是有效汉字字模.
6.
3图形方式下汉字和西文显示示例#include#include#include#include#include"lcd_api.
h"voidmain()英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066058{intx,y;clrscr();//清屏printf("\nDOTLCDDemo\n");//gotograghicmodeLCD_Init("mlib.
chr","ascii.
chr");//打开LCD图形显示模式,并加载字模文件LCD_SetMode(1);//settoXORmode//showchinesecharatcenterpositioncharBufStr[20];strcpy(BufStr,"**欢迎测试**");x=(128-strlen(BufStr)*8)/2;y=8;LCD_WriteString(x,y,BufStr,1);//图形方式下显示西文或中文字符strcpy(BufStr,"嵌入式网络模块");x=(128-strlen(BufStr)*8)/2;y=24;LCD_WriteString(x,y,BufStr,0);//图形方式下显示西文或中文字符//drawlinesLCD_DrawLine(0,42,127,42,1);LCD_DrawLine(0,63,127,63,1);//图形方式画直线//drawcurvefor(x=0;xBC第2步建立工程(Project)文件,在Prj工程文件中主要是定义系统的各软件模块.
Prj工程文件,可根据设计需求随时进行修改.
第3步编写各软件模块,即常规的程序设计.
在BC的集成环境下,用户即可采用C/C++这样的高级语言设计程序,也可用x86的汇编来设计关键模块,如硬件驱动程序、中断服务程序等.
第4步对编写好的程序进行编译(Compiler)、汇编(Assembler)、连接(Linker),若程序有错,集成环境将提示错误信息,用户可根据错误信息返回第2步进行修改,直至生成可执行文件(如userapp.
exe).
第5步运行调试程序,对第4步生成的用户应用程序进行调试,典型命令如下:C:\Myapp>td–rpuserappTD具有自动下载应用程序至目标系统的功能.
TD是一个功能强大的源级程序调试工具,基本界面如下:若调试发现错误,可方便退出调试,返回第2步进行修改,直至整个程序完整调试.
第6步调试完成即意味着程序开发的结束,用户可把NETBOX-II设置成直接运行模式,即可让系统独立运行.
英创信息技术有限公司NetBox-II嵌入式网络模块编程手册V6.
01www.
emtronix.
com028-8618066063附录3TDRF及TD调试工具使用说明TDRF是一个简易的基于RS232的远程文件访问工具软件.
基本使用方法如下:TDRF[选项]命令[参数]其中的选项有:-rp设置HOST的调试串行端口号,rp1=COM1;rp2=COM2.
-rs设置串行波特率,rs1=9600bps;rs2=19kbps;rs3=38kbps;rs4=115kbps.
缺省选项为:-rp1-rs4,即COM1,115k波特率.
"命令"为类似DOS命令的英文单词或单个缩写字母,与DOS命令类似,跟在dir、copy、del、copyfrom命令后的参数可采用"*"表示任意文件名或扩展名.
TDRF的主要命令有:命令缩写参数数目描述CopyT1或2拷贝HOST文件至NETBOX-IICopyfromF1或2拷贝NETBOX-II中的文件至HOSTDel,EraseE1删除NETBOX-IIA盘或C盘中的文件DirD0或1显示NETBOX-II中的文件目录RenR2重命名NETBOX-II中的文件MdM1在NETBOX-II中建立新目录RdK1删除NETBOX-IIA盘或C盘中已存在的目录CdC0或1改变NETBOX-II的当前目录TD即TurboDebugger是一个功能强大的源程序调试工具,在基于NETBOX-II的应用开发中,可采用TD作为基本的交叉调试工具.
具体方法为:把NETBOX-II的RS232调试端口与用于软件开发的PC的一个RS232端口(COM1或COM2)相连,一般在编写应用程序的当前目录启动TD,如:C:\MyApp>TD–rp#Userapp其中-rp#用于指定PC的调试端口,-rp1=COM1,也可简写成-rp;-rp2=COM2.
运行TD时,用户编写的应用程序(如Userapp.
exe)将首先被下载至NETBOX-II的当前目录,然后应用程序自动启动,进入调试状态,相应的用户PC的屏幕上会显示应用程序的main模块的源代码,如附录5中的图所示.
这时就可进行各种程序调试了.

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

AlphaVPS(€3.99/月)VPS年付15欧,AMD EYPC+NVMe系列起

AlphaVPS是一家保加利亚本土主机商(DA International Group Ltd),提供VPS主机及独立服务器租用等,数据中心包括美国(洛杉矶/纽约)、德国、英国和保加利亚等,公司办公地点跟他们提供的保加利亚数据中心在一栋楼内,自有硬件,提供IPv4+IPv6,支持PayPal或者信用卡等方式付款。商家提供的大硬盘VPS主机,提供128GB-2TB磁盘,最低年付15欧元起,也可以选择...

pigyun25元/月,香港云服务器仅起;韩国云服务器,美国CUVIP

pigyun怎么样?PIGYun成立于2019年,2021是PIGYun为用户提供稳定服务的第三年,期待我们携手共进、互利共赢。PIGYun为您提供:香港CN2线路、韩国CN2线路、美西CUVIP-9929线路优质IaaS服务。月付另有通用循环优惠码:PIGYun,获取8折循环优惠(永久有效)。目前,PIGYun提供的香港cn2云服务器仅29元/月起;韩国cn2云服务器仅22元/月起;美国CUVI...

cuteftp为你推荐
企业建网站什么企业需要建网站?ldapserver怎样打开DWA文件?请说详细点?netshwinsockreset游戏出现battlEye Launcher 怎么办文档下载怎样把手机里的文件直接下载或复制到U盘里滴滴估值500亿滴滴出行股权项目投资怎么投 100w怎么可以投资不三友网广州三友集团在韶关分公司么?正大天地网天地网微信移动办公平台zencart模板zen cart套用模板后,外观控制显示红色打不开,为什么?discuz论坛discuz论坛怎么做无法访问Windows无法访问 怎么解决
vps试用 godaddy域名注册 安云加速器 网站实时监控 商家促销 牛人与腾讯客服对话 韩国网名大全 台湾谷歌地址 天互数据 合租空间 ntfs格式分区 世界测速 河南移动m值兑换 银盘服务是什么 路由跟踪 韩国代理ip 工信部网站备案查询 lamp什么意思 阿里云邮箱登陆 广州服务器托管 更多