基于80X86系列嵌入式的GPRS应用

    嵌入式是时下热门的一项技术,其核心部件是嵌入式处理器,按照嵌入式处理器的寄存器位数来分,从8位、16位、32位到64位,各种类型层出不穷,据不完全统计,全世界嵌入式处理器品种已经超过了1000种,流行的体系结构也有三十多个系列。目前比较典型的嵌入式处理器包括ARM和MIPS,其他还有PowerPC
、68K/ColdFire等。另外,80X86系列也在嵌入式系统中占有一席之地,例如基于80X86的PC104,在工控领域应用比较广泛。目前国内基于80X86的嵌入式做得比较好的公司包括成都的英创以及珠海的蓝宇,尤其是英创,在基于80X86的低端应用上走出了一条非常有特色的道路。
   说到80X86系列,就不得不说DOS操作系统,目前几乎大部分80X86嵌入式都是采用DOS作为底层操作系统。DOS是一个单任务操作系统,早期受限与MCU体系,基本上都是在实模式下开发,80386以后随着MMU的引入,又逐步引入了保护模式,实模式与保护模式最大区别就是寻址空间以及进程保护的区别,因为目前基于80X86系列的应用多是在实模式下完成,所以就不多详诉。显然,单任务的DOS已经越来越难以满足日益复杂化嵌入式软件设计的需要,因此我们需要引入RTOS(嵌入式实时操作系统),目前在低端80X86处理器上,能跑的RTOS不多,根据我自己的经验,主要还是uC/OS以及ERTOS,前者是Micrium的产品(北航有本参考书详细介绍了这个RTOS),后者是JK Micros公司的一个早期产品,该RTOS的主要特性包括:
1、基于优先级或者时间轮转的调度
2、整合了TCP/IP协议栈(基于WATTCP)
3、提供了较丰富的系统函数(大部分DOS系统调用和函数不是可重入的,缺乏基本的线程保护机制。)
4、支持浮点运算
5、完善的服务器功能,FTP, HTTP, SMTP, TELNET, TFTP, SNMP 

     GPRS是目前比较流行的一种无线通信方式,其部署方便、按流量计费、可永远在线等特点,使其较多地出现在一些无线领域。要实现嵌入式通过GPRS上网,有2种选择:
1、采用内嵌TCP/IP的GPRS模块(例如BENQ MC35I、SONY ERICSSON GR47)。但这种方式下,因为内置TCP/IP调用功能通常通过AT指令与模块通过透明传输交换数据,所以不太适合有复杂数据传送的场合,并且价格较贵。
2、采用没有内置TCP/IP的GPRS模块(例如WAVECOM 2403A, SIEMENS MC39I)。这种情况下,需要软件实现PPP以及TCP/IP协议。但有些公司,当你购买他的嵌入式套件后,他会提供现成的PPP/TCPIP库,这样就方便得多了。

  下面说一下如何通过GPRS上网,这里笔者采用WAVECOM 2403A GPRS模块。因为uC/OS目前还不支持PPP协议,也没有一个可行方案,所以这里只好采用ERTOS,其内置TCP/IP协议栈,而支持ERTOS的PPP协议栈目前有几个选择,一个是DOSPPP,另外一个是JK MICROS的一个PPP协议栈(需要做一些协议栈上的代码修改)。这里补充一下,实际上DOS下的TCP/IP调用都是通过WATTCP,WATTCP可以说是一个协议栈也可以说是一个规范,因为其只负责传输层以上的协议,而对于以下的数据链路层次,它制定了一个ISR调用标准,需要第三方来自行实现数据链路层与WATTCP的传输层的对接,通过一个规范ISR,WATTCP就可以与链路层无关,实际上上面提到的2个PPP协议栈,其实就是PPP+TSR。在开发中,我发现,TSR不能在程序中随意装载,卸载,否则就会死机,而大多数PPP协议栈都是拨号同时驻留TSR,这样一旦万一情况下连接断开了,GPRS就无法继续进行了,因为无法重新拨号(需要重新卸载ISR、拨号并装载TSR)。但目前有2个可以找到的方案是可以先驻留TSR,再拨号,这样就可以反复拨号,而不用担心需要重新卸载驻留TSR,另外JK MICROS那个是以函数库形式提供,而不是外部DOS命令方式调用,这样就更加方便。
   以上只是一个简单的方案供大家参考,需要完整跑起来,还需要做一些工作:
1、参考对应模块AT指令以及本地运营商信息,了解GPRS相关配置指令。
2、编制拨号脚本
3、编写相应TCP/IP测试程序
   虽然我让我的WAVECOM 2403A顺利的在PC104上通过ERTOS跑了起来,但通过这个过程,深感自身力量单薄,加上资料甚少,好多问题都没有吃透彻,本文也只能算抛砖引玉。同时希望对各位在基于80X86下应用GPRS遇到困难时候能有一丝帮助,那也就是本人最大的荣幸了。

你可能感兴趣的:(嵌入式)