Palm J2ME串行通讯程序编写调试

论文笔记:Group Equivariant Convolutional Networks Group Equivariant Convolutional Networks 1、四个问题 要解决什么问题? 对卷积神经网络进行扩展,并提出一个在特定的变换(旋转、平移等,也可表示为一个特殊的群)下具有等变性的网络。 用了什么方法解决? 提出了一种新的卷积神经网络结构——群等变卷积神经网络(Group equivariant Convolutional Neural Network)... 阅读详情
Palm J2ME串行通讯程序编写调试
 
作者:李鲁群   来源:赛迪网  
 
Palm是3Com公司的产品,其操作系统PalmOS是一种32位的嵌入式操作系统。Palm硬件提供了标准串行通讯接口(RS232接口)和红外线传输接口。利用它可以方便地与其它外部设备通讯、传输数据。目前3Com公司与Sun公司积极合作,已经提供了非常完善的嵌入式Java(J2ME),并提供了CLDC1.03和Palm相应的配置。基于PalmOS平台的Java虚拟机为KVM,此虚拟机中已经提供了完善的对Palm串行通讯口读写的SDK程序开发包。利用该开发包可以方便地开发Palm与外围设备的串行通讯的应用程序。

串行通讯历来是计算机软件界经久不衰的应用与研究内容之一。计算机串行通讯系统因为利用的外围硬件少,通常传输距离为15米,如果配合光电转换器,可将传输距离延长至若干公里。如果通讯双方使用Modem,再配合电话线,就可以使在任意位置的通讯双方实现串行通讯。串行通讯被广泛地应用在工业数据采集、IC卡读写等领域。由于Palm程序的编写与调试步骤与台式PC机不同,所以一些与Palm串行通讯的设备必须拿到室外才能正常使用。如GPS的接收机、GPS的全球定位系统、GPS的接收设备等,它们必须在室外,并且必须在较开阔的位置才能接收到足够的卫星数目,GPS接收机才能解算出当前的位置。然后,需要通过GPS接收机的串行通讯口将解算出的结果按照NMEA0183协议将数据发送出去,并实现定位。这就使得Palm串行通讯程序调试起来非常复杂。

笔者从事J2ME嵌入式程序开发1年有余,找到了一套较高效的编写和调试Palm J2ME嵌入式程序的方法,以下将详细介绍。

Palm串行通讯应用程序的开发步骤


通常Palm应用程序的开发是利用台式PC编写,编写后编译成Palm应用程序,然后将其导入到台式PC的Palm模拟器中运行调试。程序调试完成后,通过台式PC与Palm的同步软件(HotSync)导入到真正的Palm硬件,从而实现应用程序在Palm硬件上的运行(见图1)。



图1 Palm应用程序开发步骤UML活动图


Palm串行通讯的硬件环境


由于Palm串行通讯涉及到对硬件的操作,所以单纯地利用Palm模拟器无法调试Palm串行通讯程序,必须采用软件与硬件相结合的方法才可以。方法如下:

首先将Palm模拟器的串行通讯口映射到台式PC的物理串行通讯口。具体操作为鼠标右击Palm模拟器,选择Setting,然后选择Properties,再选择Serial Port,最后选择Com1。注意此串行通讯口设备必须未被其它设备使用。随后使用9针的D型串行通讯接口将PC物理通讯端口与Palm相通讯的设备连接一起。

当在同一台PC上完成Palm模拟器与PC串行通讯时,需要制作一根Null Modem串行通讯电缆,详细制作可参照相关串行通讯资料。

串行通讯辅助调试软件


终端仿真程序是Windows 9x/NT/2000自带的应用软件,是功能强大的串行通讯辅助调试软件,利用它可以方便地完成PC计算机之间的串行通讯。我们在此介绍终端仿真程序,并不是单纯地为了介绍Windows系统自带的软件,而主要是为了调试串行通讯程序。

终端仿真程序位于Windows工具“开始-程序-附件-通讯-超级终端”。如果系统中尚未安装超级终端程序,请选择“控制面板-添加删除程序”,选择Windows,选择通讯,选中超级终端复选项,然后按照提示插入Windows 9x/NT/2000系统安装光盘,完成终端仿真程序的安装。

启动超级终端程序Hpertrm.exe,选定串行通讯端口(Com1或Com2),然后设定好通讯速率与校验位。例如串行通讯速率为9600波特,数据位为8位,无奇偶校验,停止位为1位(见图2、图3)。



图2 超级终端串行通讯端口设定




图3 超级终端串行通讯速率设定


Palm J2ME串行通讯程序设计举例


一般来说,串行通讯的双方都必须遵守相同的通讯数据格式,编写各自的通讯程序。由于通讯程序的编写涉及到通讯的双方,所以任意一方通讯程序的错误都将导致通讯的失败,也将给编写和调试通讯带来许多困难。笔者通过反复试验发现,利用Windows终端仿真通讯程序模拟通讯双方中一方,然后调试通讯双方中另一方与Windows终端仿真通讯,当通讯两方都与Windows终端仿真调试成功后,即可实现它们之间的串行通讯了。这样可以最大限度地减少串行通讯程序的调试工作量,提高程序开发速度(见图4)。假设目前要设计两个串行通讯系统,分别是PC机显示Palm数据系统和Palm显示PC端数据系统,它们的具体实现如下:



图4 串行通讯UML关系图


PC机显示Palm数据系统


将Palm的数据库内容通过串行通讯,按照串行通讯9600波特速率、数据位为8位、无奇偶校验、停止位为1位传送到PC计算机,并显示。此系统涉及到Palm端程序和PC计算机端程序。

1. Palm端程序(见图5)



图5 Palm端程序UML状态图


Palm端程序主要分三步:

(1)打开Palm内部数据库,设Palm内部的数据库的标识为:

dbtype=gpsd,creatorID=6657;
static int dbType = 0x67707364; //  gpsd
static int dbCreator = 0x36363537; // '6657'
Database db = new Database(dbType, dbCreator, Database.READONLY);
......


由于不涉及到对数据库的写操作,所以这里以只读的方式打开Palm内部数据库。

(2)打开Palm串行通讯端口,构造serialPort对象,使用serialPort.open方法打开串口。

Protocol serialPort = new Protocol();
serialPort.open
("0;baudrate=9600;bitsperchar=8;stopbits=1;parity=none;
autorts=off;autocts=off;blocking=off",1, true);
......


(3)发送数据,通过serialPort对象的openOutputStream()方法,获取OutputStream数据流,并赋给os对象,代码为OutputStream os = serialPort.openOutputStream()。然后,读取Palm内部数据库gpsd的每条记录内容,将内容按字节通过串行通讯传送到PC,并通过os.write(),将数据写入串口。主要代码为:

byte [] rnl={13,10};
for (int i=0;i<db.getNumberOfRecords();i++)
 {
  Graphics.getGraphics().drawString("send record No."+i,30,100);
  os.write(db.getRecord(i));
  os.write(rnl);
  } 
os.flush();
......


如果串行通讯数据传输完毕,关闭串行通讯端口和Palm内部数据库。代码如下:

System.out.println("Send finished!");
os.close(); 
System.out.println("connection closed.");
......



将此程序编译、安全校验、封装成Palm格式的Prc应用程序,然后传送到Palm模拟器上。将Palm模拟器的串行通讯端口映射为PC的Com1通讯端口,使用Windows自带的终端仿真程序模拟PC来完成串行通信。启动Windows自带的终端仿真程序,设置其使用端口为Com2,设定串行通讯速率为9600波特、数据位为8位、无奇偶校验、停止位为1位,然后使用Null Modem串行通讯电缆将PC的Com1和Com2端口物理连接。

运行上述Palm程序可以发现,Palm模拟器通过串行通讯将内部数据传送到Windows自带的终端仿真程序的对话窗口中了。由于该对话窗口只能保存500行的对话内容,所以如果大于500行,可以选择Windows超级终端的“传送”菜单,选择捕获文本,将对话内容直接保存到一个标准的文本文件中。

2. PC端串行程序(见图6)



 

图6 PC断程序UML状态图



可以将PC端串行程序看为类似超级终端的应用程序。PC端串行程序完成的工作主要有,按照设定的传输速率(必须与Palm端的串行通讯参数一致)打开串行通讯端口,然后启动线程,并且监听串行通讯端口数据。接收到数据后,将数据显示。具体程序步骤如下:

(1)安装好Sun Java 串行通讯SDK类库,在程序中引入相应的类,代码为import javax.comm.*。然后采用循环枚举的方法,判断读取PC机上的串行通讯口的状态(此处通讯口是Com2),代码如下:

static Enumeration portList;
portList = CommPortIdentifier .getPortIdentifiers();
while (portList.hasMoreElements()) {
 portId = (CommPortIdentifier) portList.nextElement();
 if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
  if (portId.getName().equals("COM2")) {
   Reader reader = new Reader();
  }
.....


(2)打开串口,获取串行通讯数据流,代码如下:

public Reader() {
 try {
  serialPort = (SerialPort) portId.open("Li", 2000);
 } catch (PortInUseException e) {}
 try {
  inputStream = serialPort.getInputStream();
 } catch (IOException e) {}


(3)在serialPortEventListener事件中,判断是否串口有数据到来,如果有就将数据显示出来,代码如下:

public void serialEvent(SerialPortEvent event) {
 switch(event.getEventType()) {
 case SerialPortEvent.BI:
 case SerialPortEvent.OE:
 case SerialPortEvent.FE:
 case SerialPortEvent.PE:
 case SerialPortEvent.CD:
 case SerialPortEvent.CTS:
 case SerialPortEvent.DSR:
 case SerialPortEvent.RI:
 case SerialPortEvent. OUTPUT_BUFFER_EMPTY:
  break;
 case SerialPortEvent.DATA_AVAILABLE:
  byte[] readBuffer = new byte[200];
  try {
   while (inputStream.available() > 0) {
    int numBytes = inputStream.read(readBuffer);
   }
   System.out.print(new String(readBuffer));
  } catch (IOException e) {}
  break;
.....


为了调试微机的串行通讯程序,我们使用Windows自带的终端仿真程序调试。这一次,我们使用Windows终端仿真程序模拟Palm串行通讯端。设置终端仿真程序使用端口为Com1,设定串行通讯速率为9600波特、数据位为8位、无奇偶校验、停止位为1位,然后使用Null Modem串行通讯电缆将PC计算机的Com1和Com2端口物理连接。选择Windows终端仿真程序菜单“传送发送文本文件”,将模拟数据文本文件发送。

运行上述PC程序,启动Windows终端仿真程序,可以发现PC可以接收到串行通讯接收来的数据。

Palm显示PC端数据系统



串行通讯往往是双方面的,在系统1中,我们介绍了Palm向PC计算机通过串行通讯发送数据的系统程序。这一次,我们将介绍PC计算机通过串行通讯向Palm发送数据的案例。

假设系统2内容为将PC文件e:/gps.txt,按照串行通讯9600波特速率、数据位为8位、无奇偶校验、停止位为1位,通过串行通讯将内容传送到Palm,并显示数据。这样,系统2也涉及到Palm端程序和PC计算机端程序。读者可以参照上述Windows终端仿真程序,调试Palm和PC双方程序。以下仅介绍Palm和PC两端的串行通讯程序。

1. Palm端程序

(1)打开串行端口,代码如下:

.....
Protocol serialPort = new Protocol();
serialPort.open("0;baudrate=9600;bitsperchar=8;stopbits=1;parity=none;
autorts=off;autocts=off;
blocking=off",1, true);
System.out.println("...opened");
....


(2)通过serialPort获取数据输入流,按设定的读取数据缓冲区大小读取数据,代码如下:

InputStream is = serialPort.openInputStream();
System.out.println("reading response...");
...
int len = is.read(readBuffer);
System.out.println("read: " + len +" bytes");


(3)将读取来的数据转换成字符串,然后显示,代码如下:

String s=new String(readBuffer, 0, len);
System.out.println("[" + s + "]");
....


(4)通讯结束后,关闭数据流及串口,代码如下:

is.close();
serialPort.close();
System.out.println("connection closed.");
} catch (Exception ioe) {
System.out.println("IO Ex: "+ioe.toString());
} 
.....


2. PC主要通讯程序

(1)打开串行通讯口,代码如下:

...
try {
 serialPort = (SerialPort)
 portId.open("SimpleWriteApp", 2000);
} catch (PortInUseException e) {System.out.println(e);}
....


(2)获取串行通讯口数据流,代码如下:

try {
 outputStream = serialPort.getOutputStream();
} catch (IOException e) {System.out.println(e);}


(3)打开gps.txt文本文件,读取文本文件中的每一行,将数据写入串行通信获取的输出流,代码如下:

try {
 //outputStream.write(messageString.getBytes());
 RandomAccessFile rf=new RandomAccessFile("e://gps.txt","rw");
 String ss;
 while ((ss=rf.readLine())!=null)
 {
  outputStream.write(ss.getBytes());
  System.out.println(ss);
 }
....
}


(4)通讯结束后,关闭数据流,代码为:

rf.close();
.....


从总体来讲,J2ME串行通讯程序的编写与调试需要许多技巧,合理应用Windows仿真终端提高编写与调试Palm串行通讯程序开发速度,是一条比较科学的串行通讯调试方法。
软考中级-软件设计师 知识点整理(一篇就过了 建议收藏) 软考中级-软件设计师上午题知识点总结 阅读详情

相关推荐

“华为杯”研究生数学建模竞赛2020年-【华为杯】D题:无人机集群协同对抗(附获奖论文和MATLAB代码实现)

1.问题重述摘 要:本文针对非线性约束条件下红蓝双方无人机集群协同对抗的最优规划问题,结合贪婪队形、非线性规划、内点法、蒙特卡洛方法和全联立正交配置有限元法,构建了无人机集群协同对抗推演模型。,构建了。我们综合考虑了,和。首先分析红方在集群约束下的贪婪队形和拦截策略,然后我们基于内点法联合MATLAB和AMPL编程求解蓝方突防的非线性规划解,最后基于蒙特卡洛法对整个蓝方突防过程进行推演,得到突防概率图。通过推演,我们提出了两块的区域作为所求区域,并对蓝方的最优突防策略进行分析。

getusushu的博客 1517

编写网络通信程序_远程调试方法

思想: 编写调试 跟踪网络 程序 远程调试的方法 似乎更好 更方便 跟踪 网络通信程序 2台电脑 此一思想 : 很重要 转载于:https://www.cnblogs.com/hshy/p/10864949.html...

weixin_30505485的博客 129

工业级实战:C#实现欧姆龙PLC FINS-TCP通信(协议解析+完整源码+避坑指南)

// FINS主命令码+子命令码枚举(工业级常用指令)ReadData = 0x0101, // 读取数据WriteData = 0x0102, // 写入数据ReadPlcStatus = 0x0601, // 读取PLC状态ResetPlc = 0x0605 // 复位PLC(慎用)/// 欧姆龙PLC数据区枚举(工业常用)CIO = 0x30, // CIO区(核心数据区)WR = 0x31, // 工作区HR = 0x32, // 保持区。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 615

JAVA 通过串口发送命令

    嵌入式系统或传感器网络的很多应用和测试都需要通过PC机与嵌入式设备或传感器节点进行通信。其中,最常用的接口就是RS-232串口和USB接口(并口)。鉴于USB接口的复杂性以及不需要很大的数据传输量,现模块中使用了串口进行通讯。    其中SUN的CommAPI分别提供了对常用的RS232串行端口和IEEE1284并行端口通讯的支持。RS-232-C(又称EIA RS-232-C,以下简称R...

weixin_34117211的博客 1782

PALM开发教程-第一章 关于Palm

PALM开发教程-第一章 关于Palm  作者:palmheart   来源:palmheart.net    本章将对Palm这个新奇的东西进行一些简单的介绍。对于有一定的嵌入式软件开发基础,又想尽快开始编程的读者,我建议你跳过本章,直接从第二章开始阅读,等闲暇时间再回到本章浏览。 书中的一些章节提到了如何为头带式、腕带式设备编写Palm OS应用程序

mobilechannel的专栏 2332

PALM开发教程-第六章 控件

 作者:palmheart   来源:palmheart.net   时间: 在这一章中,我们将继续研究Contact Detail 程序,让它具有显示并设置日期时间的功能。我们要添加一个窗体来设置时间。这个时间和日期是可选的以供下次联系使用。 为实现此功能,我们将使用新的资源:选择触发器(selector triggers),开关按钮(push but

mobilechannel的专栏 2007

PALM开发教程-第九章 分类和查找

<!-- function bodyscroll() { var F=document.forms[0]; F.ScrollTop.value=Body.scrollTop; } //-->  <!-- function __doPostBack(eventTarge

mobilechannel的专栏 1973

【原创】管道开发指南——Miken

§6.1 管道的作用 管道主要用于PalmOS平台上的应用程序与桌面计算机进行资料同步。当进行一个热同步操作时,热同步管理器将调用管道,保持桌面计算机与手持设备的资料同步,将手持设备的资料备份到桌面计算机,或者从桌面计算机下载资料到手持设备。 了解管道: 一个标准的Windows管道是一个动态链接库,它提供热同步管理器的调用入口函数。在一个给定的热同步操作中可能与下面的部分或者所有部件相关: 热同

mobilechannel的专栏 1946

PALM开发教程-第五章 数据库

PALM开发教程-第五章 数据库  作者:palmheart   来源:palmheart.net    Palm OS的所有内容在其存储器中都表现为数据库形式,下面我们就开始学习创建和使用数据库。我们将继续编写Contacts程序,把它写入一个数据库。 删除工作 为准备向Contacts添加一个数据库,首先应删除以前的示范语句。 备份Contacts程

mobilechannel的专栏 1796

Palm 串行通讯GPS数据读取的实现

 作者:taling   来源:cnemb    李鲁群 (liluqun@263.net) 山东科技大学计算中心 2001 年 11 月 关于J2ME程序编写的教程,各大网站均有介绍。但是J2ME教程的学习与实际应用毕竟还有一段距离。笔者从事J2ME一年多,已经成功地开发出基于无线互联网palm与GPS、电子地图结合个人导航系统。该系统利用Palm通过

mobilechannel的专栏 1771

PALM开发教程-第二章 建立一个应用程序

PALM开发教程-第二章 建立一个应用程序  作者:palmheart   来源:palmheart.net    无论你是一位编程专家还是初学者,通过本章的学习,你都将很快的学会Palm OS的编程。在这个过程中你首先要创建一个能稳定工作的开发环境。值得一提的是,开发环境并不仅仅是一些编程工具的简单组合,它更是一个能协助开发者更好完成工作的系统结构。一

mobilechannel的专栏 1710

PALM开发教程-译者序

作者:palmheart   来源:palmheart.net   后PC时代是嵌入式和网络化的时代,包括掌上电脑在内的PDA产品是后PC时代最重要的产品之一。在PDA市场激烈竞争的今天,Palm这个PDA界的龙头老大,将被国内越来越多的人所接受,有关Palm OS 的研究、开发和应用工作也将随之推广。Palm OS programming from the groun

mobilechannel的专栏 1701

PALM开发教程-第十一章 工具和方法简介

  作者:palmheart   来源:palmheart.net    我们已知道了系统臃肿是很危险的,现在就来讨论所有现成的工具和方法,或许可以防止使你成为一个更危险系统的提供者。或许你有一个具体的Palm OS应用程序,而没有所需的硬件资源,或许你的解决方法必须和Linux工具相联系,下面将介绍有关这些方面的信息。 因为在World Wide

mobilechannel的专栏 1541

PALM开发教程-第四章 窗体的编程

PALM开发教程-第四章 窗体的编程  作者:palmheart   来源:palmheart.net     在本章中,我将通过为上一章的Contacts程序添加一个About对话框,继续向读者展示Palm OS简单有效的程序风格。你将学会如何创建含有位图、文本和按钮的窗体。你可在Contacts程序中加入菜单和代码使你可以访问Abou

mobilechannel的专栏 1501

PALM开发教程-第三章 文本框中的乐趣

PALM开发教程-第三章 文本框中的乐趣  作者:palmheart   来源:palmheart.net   在本章节中,我们将通过讨论第二章中Hello应用程序的副本,来研究文本框的属性和事件。涉及的内容包括文本框如何调用Palm OS存储器和处理它们之间的关系等。我们也将花些时间讨论与文本框相关的其它一些内容: ◆手写输入转换指示器(Graffit

mobilechannel的专栏 1497

PALM开发教程-第八章 表和滚动条

作者:palmheart   来源:palmheart.net   时间:2002年12月9日 13:42   阅读295次  在这一章中,我们将讨论Palm OS的两个很重要的用户界面元素:表和滚动条。表能够显示或编辑较大的数据量。在嵌入式应用程序中都它使用的很广泛。滚动条的功能很出色,但由于滚动条不支持1.0版本的Palm OS系统,所以只有在不想支持较早的Pilo

mobilechannel的专栏 1414

PALM开发教程-目录

PALM开发教程-目录  作者:palmheart   来源:palmheart.net    书名: Palm OS 编程实践 目录: 简介 xv I 入门 1 关于Palm 3 Palm Computing的成功 4 Palm Computing的历史 5 Palm Computing的公司结构 6 Palm OS 6 1.0版本 7 2.0版本

mobilechannel的专栏 1401

PALM开发教程-第十章 创建高效的有效界面

作者:palmheart   来源:palmheart.net    在这一章中,我们开始讲述用户界面的设计和测试。首先讨论一下Palm OS自带的一般用户界面,然后介绍由Palm Computing 提出的具体设计原则及相关方法,它们使界面更加有效和实用,最后我们将讲述用户界面和程序设计的整个流程和测试,因为用户界面不是凭空想象出来,它是一个高效过程的结果。 设计考虑

mobilechannel的专栏 1227

知识库的构建 [ 3 ]

先按主题或段落初步划分,再对超长块递归细分,直至满足大小限制。递归分块融合了结构化与非结构化处理逻辑,与固定大小的分块不同,这种方法保持了语言的自然流畅性并保留了完整的内容语义。

Small_entreprene的博客 264

使用easyexcel导出数据

使用EasyExcel 2.1.4实现自定义监听器,校验表头(去除换行空格)及数据行:转换实体,检查组合代码/类型、计划类型非空且合法,收集错误信息,返回有效数据列表。

feng_huilu_zhuan的博客 173

(完整数据)地级市能源消耗能源效率测算2006-2021年

## 资源名称:2006-2021年地级市能源消耗量面板数据能源消耗量根据全社会用电量、煤气天然气供应量和液化石油气供应量折合成吨标准煤进行计算,并根据实际GDP计算出了能源效率数据。

泛微E-cology9.0(EC9)官方前台全套操作手册

泛微E-cology9.0(EC9)官方前台全套操作手册,包含9个文档,word格式。注意这是操作手册,不是二开文档!适合操作人员使用

上一篇: 【转】Windows C++ 程序员如何过度到Symbian OS C++ 程序员? bedlang(翻译)
下一篇: Palm 串行通讯GPS数据读取的实现
mobilechannel
博客等级 码龄22年 36粉丝 431原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值