国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Palm J2ME串行通訊程序編寫與調試

2019-11-18 12:46:40
字體:
來源:轉載
供稿:網友

  Palm是3Com公司的產品,其操作系統PalmOS是一種32位的嵌入式操作系統。Palm硬件提供了標準串行通訊接口(RS232接口)和紅外線傳輸接口。利用它可以方便地與其它外部設備通訊、傳輸數據。目前3Com公司與Sun公司積極合作,已經提供了非常完善的嵌入式java(J2ME),并提供了CLDC1.03和Palm相應的配置?;赑almOS平臺的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)。
   Palm J2ME串行通訊程序編寫與調試(圖一)
  圖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)。
   Palm J2ME串行通訊程序編寫與調試(圖二)
  圖2 超級終端串行通訊端口設定
   Palm J2ME串行通訊程序編寫與調試(圖三)
  圖3 超級終端串行通訊速率設定
  Palm J2ME串行通訊程序設計舉例
  
  一般來說,串行通訊的雙方都必須遵守相同的通訊數據格式,編寫各自的通訊程序。由于通訊程序的編寫涉及到通訊的雙方,所以任意一方通訊程序的錯誤都將導致通訊的失敗,也將給編寫和調試通訊帶來許多困難。筆者通過反復試驗發現,利用Windows終端仿真通訊程序模擬通訊雙方中一方,然后調試通訊雙方中另一方與Windows終端仿真通訊,當通訊兩方都與Windows終端仿真調試成功后,即可實現它們之間的串行通訊了。這樣可以最大限度地減少串行通訊程序的調試工作量,提高程序開發速度(見圖4)。假設目前要設計兩個串行通訊系統,分別是PC機顯示Palm數據系統和Palm顯示PC端數據系統,它們的具體實現如下:
   Palm J2ME串行通訊程序編寫與調試(圖四)
  圖4 串行通訊UML關系圖
  
  PC機顯示Palm數據系統
  
  將Palm的數據庫內容通過串行通訊,按照串行通訊9600波特速率、數據位為8位、無奇偶校驗、停止位為1位傳送到PC計算機,并顯示。此系統涉及到Palm端程序和PC計算機端程序。
  
  1. Palm端程序(見圖5)
   Palm J2ME串行通訊程序編寫與調試(圖五)
  圖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內部數據庫。
  
 ?。?)打開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);......
  
 ?。?)發送數據,通過serialPort對象的openOutputStream()方法,獲取OutputStream數據流,并賦給os對象,代碼為OutputStream os = serialPort.openOutputStream()。然后,讀取Palm內部數據庫gpsd的每條記錄內容,將內容按字節通過串行通訊傳送到PC,并通過os.write(),將數據寫入串口。主要代碼為:
  
  byte [] rnl={13,10};
  for (int i=0;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)
  Palm J2ME串行通訊程序編寫與調試(圖六)
  圖6 PC斷程序UML狀態圖
  
  可以將PC端串行程序看為類似超級終端的應用程序。PC端串行程序完成的工作主要有,按照設定的傳輸速率(必須與Palm端的串行通訊參數一致)打開串行通訊端口,然后啟動線程,并且監聽串行通訊端口數據。接收到數據后,將數據顯示。具體程序步驟如下:
  
 ?。?)安裝好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 SerialPo

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长治县| 连山| 广宗县| 长顺县| 疏勒县| 西乌珠穆沁旗| 东宁县| 烟台市| 扎鲁特旗| 张掖市| 山丹县| 贵南县| 桐乡市| 上思县| 元谋县| 满城县| 竹北市| 潜江市| 平陆县| 安龙县| 措美县| 绥江县| 萨迦县| 呼和浩特市| 阳原县| 淅川县| 涟水县| 冕宁县| 钟山县| 石首市| 香河县| 延长县| 宜阳县| 辽阳县| 民乐县| 清苑县| 万荣县| 同德县| 德江县| 松桃| 贡山|