您的位置: 嵌入式在线 > 技术中心 > Palm OS > PalmOS开发教程-2.3

PalmOS开发教程-2.3

2008-01-02      嵌入式在线      收藏 | 打印

       调试:使它工作起来

       在这一部分你就可以开始编译和链接这个项目工程了。首先选择运行Project | Make。如果你像我那样干的话,就可能会搞出一些BUG的(当然了并不是所有的方面都是完美的嘛)。祝你们好运吧。

       Okay, Okay,我们已经取得不少的进步了。你现在可以通过Compare files操作比较快速的除掉一些编译时间错误了。如果你在创建工程的时候意外的删除了库文件,那么就会产生连接错误。你最好的处理办法就是尽早做好这些文件的备份工作。

       发现运行时间错误的最好方法就是逐行的调试程序。你可以在Code Warrior IDE集成环境中执行下面的一些调试步骤: 
       1.在PC上选择Project | Debug 或者 点击F5来编译和连接工程,然后调出调试器(debugger)。 
       2.在Palm上,把设备先置位到Console模式。最简单的方法就是利用find框,删除find输入框中原有的文字并输入快捷符号。快捷符号很像连写的小写字母“l ”,你在输入区上画一个连写的“l”以产生快捷符号。然后写一个句号(在输入区轻击两下)和数字“2”。在你这样做后,你会发现Pa lm设备会发出声音并且所画的内容将消失。图2-2显示了把Palm设备设置为Console模式所要画的图形;

       3.在PC上,点击OK用来下载应用程序到Palm设备。再点击OK,来去掉Palm上出现的Code Warrior lite警告框,现在你就应该停在Code Warrior 调试器中,PilotMain()函数的第一行了。

       4.在PC上,点击调试器窗口顶端看起来象一个向右箭头的按钮。这将使你以单步调试的方式运行程序,进入函数后,箭头每次都将停留在下一步将要执行的语句上。点击另一个像向上箭头的按钮,将使你跳出任何一个执行中的函数。

       5.在PC上,按下调试器窗口顶端的“X”按钮可以重置Palm设备。如果你的Palm设备已经关掉,那就再打开,然后按下“X”按钮,则设备将被置于一种良好的C onsole模式关闭的状态。当然,也可以通过使用图钉或其它尖的东西按下Palm背面的Reset按钮,来达到同样的目的。

       值得庆幸的是,我早期的一些源代码评论将对你有用,特别是像你这样正努力推测程序中每条代码含义的时候。当然,如果你的窗体根本不显示的话,那么你就得首先确保你已经正确连接了当前资源文件(* .rsrc),以及通过在FrmDrawForm()函数入口设置断点和单步跟踪来确保它是否被调用了。

       你也可以通过点击每行左边的页空白处来设置断点。如果设置了断点,一个小红点将出现在该行左边的页空白处。去掉断点只要点击该行左边页空白处显示的小红点就可以了。 
    当你的Hello示例程序被完全调试好之后,你将会发现:

       1 在Palm的应用程序区将出现“Hello”的图标 
       2 一旦程序被加载,将显示它的窗体和“Hello”按钮 
       3 当“Hello”按钮被按下,程序将退出 
       4 当按下Palm上的4个真正的按钮或任何一个输入板(graffiti pad)边上的“Silkscreen bottom”,程序都将退出

       祝贺你。你已经写完了你的第一个Palm OS 应用程序了。这是一个很好的程序,可以用来测试你当前使用的代码中是否存在一些不易发现的不安全的设置。

       当你运行你的程序时发生了什么?

       现在你已经拥有一个能工作的Palm OS程序了,让我们设置一个断点,再一次单步调试,以便于更加深入的了解它是如何工作的。

       1.在PC上,开始运行调试器。选择Project | Debug 或 按下 F5 开始编译和连接工程以及弹出调试器。

       2.在Palm上,设置你的设备到Console状态。使用find框,删除find输入框中原有的文字并输入快捷符号。快捷符号很像连写的小写字母“l ”,你在输入区上画一个连写的“l”以产生快捷符号。然后写一个句号(在输入区轻击两下)和数字“2”。在你这样做后,你会发现Pa lm设备会发出声音并且所画的内容将消失。图2-2显示了把Palm设备设置为Console模式所要画的图形;

       3.在PC上,单击OK后,下载应用程序到Palm。现在你需要在PilotMain()函数的第一行设置断点。

       4.在PC上,从调试器窗口中找到,如下代码:
/* Parse the event */
if( event->eType == ctlSelectEvent )
SndPlaySystemSound( sndAlarm );

       5.在PC上,在if语句前设置断点。

       6.通过反复的按下执行一行代码的按钮,来单步逐行调试整个程序。注意到,FrmDispatchEvent()函数的调用经常停留在窗体事件处理器上(m yHandleEvent()),但由于发生的并不是ctlSelectEvent,所以SndPlaySystemSound()就没有运行。跳过SndPlaySystemSound()函数后,程序又进入了G etEvent()状态,等待其它事件的发生了。

       7.点击Palm上的“Hello”按钮,注意到,GetEvent()函数响应了,窗体事件处理器被反复调用了许多次,这次终于发生了ctlSelectEve nt,于是SndPlaySystemSound()就被调用了。你现在已经亲眼目睹了你的代码分配和处理一些事件的全过程了。

       8.在PC上,按下调试器窗口顶端的“X”按钮可以重置Palm设备。如果你的Palm设备已经关掉,那就再打开,然后按下“X”按钮,则设备将被置于一种良好的C onsole模式关闭的状态。当然,也可以通过使用图钉或其它尖的东西按下Palm背面的Reset按钮,来达到同样的目的。

       把你的工程存放到固定的目录中

       在第四章中,我们将使用本章做好的应用程序作为整个程序外观的基础。在Code Warrior中,提供了一种叫做“Stationary”的建立详细工程项目的模板,现在就请把当前项目做成一个模板。在你的 Code Warrior下的Stationary子目录中保存一个应用程序模板的拷贝,这样当你下一次选择New Project选项的时候它就会出现。你也可以按照以下步骤在Windows资源管理器中复制应用程序模板:

       1.打开Windows资源管理器,找到你的Hello工程的目录。 
       2.选中整个Hello工程目录。 
       3.按下CTRL-C复制目录 
       4.在Code Warrior目录下找到Stationary子目录,进入。 
       5.按下CTRL-V复制Hello目录。

       接下来讲什么? 
       在下一章中,我们将开始研究文本框,用以输入文本。

本文来源:嵌入式在线    作者:
热点资讯(一周点击率)
热评博文
评一评已有 0 位网友对此文发表了看法。  我也来评一下

验证码:  看不清?换一张

 

快乐大本营

    无线时代来临,移动产业生态系统将发生一些根本变化。今日头条推荐“芯片是嵌入式4G技术的关键 产业生态系统将发生变化”。

    想了解嵌入式开发工具的市场情况吗?先来体验下我们的在线调查吧!填写调查问卷

工程师之星
朱礼昆
电子信息工程专业,擅长硬件编程
  • 胡菲菲  技术专长:嵌入式系统linux
  • 柳如峰  技术专长:模电,电源
热门招聘
论坛热贴