标签:嵌入式系统开发,嵌入式开发,http://www.5idzw.com
采用MAXQ610评估套件(EV kit)和IAR嵌入式工作,http://www.5idzw.com
0101
1010)。而这种改变并不需要重新编译程序。首先,我们必须加入一个断点。程序运行时,打开isr.c文件,找到定时器中断矢量。双击代码第一行左侧的灰色区,将出现一个红色X。这一X表示加入了一个断点。当程序执行到这一行代码时,程序将停止,其屏幕显示如图10所示。绿色箭头和高亮显示的代码表示已经到达断点,程序暂停在这里。

图10. 断点设置和到达断点
在寄存器窗口中,从下拉列表中选择Port I/O。注意,代码使用了XOR (^)运算符来触发端口3 (P3)最下面的4个引脚,而这些引脚从未明确设置。为改变这一操作,单击PO3中的数值,输入新值0x05。输入后,您将看到,按照0101的模式,2个LED接通,2个LED关断。现在,单击Run。程序开始运行,直至到达断点而再次停止,LED将转换状态,因此,处理器现在输出1010模式。双击红色X,清除断点,然后,单击Go。程序将以交替LED模式不断运行。
在IAR嵌入式工作台中,您可以按照与寄存器一样的方法来观察并改变变量值。对此进行演示时,单击Stop或者选择Debug
Stop Debugging,停止应用程序。现在,修改代码,在主函数中加入变量x,在while循环中嵌入延时循环。如下所示,输入对程序的一些修改。注意,在代码中故意设置了错误,稍后对它进行讨论。
Locals)。如果程序停在主应用程序的while循环(很有可能)中,窗口中将显示变量x (图11)。
前面曾提到上面的代码中有错误。现在,按下Step Over按钮几次,您将看到执行从循环对比(x<100000)跳到条件测试“if”声明(x ==100000),直到递增(x++),然后是本地窗口中x值的变化。在PO3 = PO3 ^ 0x01一行设置一个断点,单击Go。出于某些原因,执行并没有暂停。很明显,程序没有进入“if”声明。再次按下Break,将变量x值改为99999,单击Step Over几次。您将注意到,由于x=0部分被执行,“for”循环终止,然后再次开始。问题很明显—x值永远不会到达“for”循环中的100000,这是因为进行了“less than”测试。停止程序,将“if”声明中的对比值改为99999。重新编译程序,启动调试器,单击Go。LED开始闪烁,LED DS1自己独立闪烁。

图11. 本地变量窗口
,采用MAXQ610评估套件(EV kit)和IAR嵌入式工作
0101


图10. 断点设置和到达断点
在寄存器窗口中,从下拉列表中选择Port I/O。注意,代码使用了XOR (^)运算符来触发端口3 (P3)最下面的4个引脚,而这些引脚从未明确设置。为改变这一操作,单击PO3中的数值,输入新值0x05。输入后,您将看到,按照0101的模式,2个LED接通,2个LED关断。现在,单击Run。程序开始运行,直至到达断点而再次停止,LED将转换状态,因此,处理器现在输出1010模式。双击红色X,清除断点,然后,单击Go。程序将以交替LED模式不断运行。
在IAR嵌入式工作台中,您可以按照与寄存器一样的方法来观察并改变变量值。对此进行演示时,单击Stop或者选择Debug

void main() { /* * Try to get a 1Hz blink on the LEDs. System clock = 12MHz. * Timer reload = 0x5B8D = 23437. Running at div 256, so we get a timer * interrupt once every 23437*256 cycles = 5,999,872, or roughly 500ms. * We toggle every 500ms, so we get a 1Hz cycle. */ long int x; TB0R = 0x5B8D; // reload for timer 0 TB0CN = 0x0416; // timer set to run, enable interrupt, down count, div 256 PD3 = 0x0f; // set port 2 lower nibble to output IC_bit.IGE = 1; // set global interrupt enable while (1) { for (x=0;x<100000;x++) { if (x==100000) PO3 = PO3 ^ 0x01; } } }这些改变用于偶尔触发端口3最下面一个引脚,因此,3个LED同步闪烁,而1个将独立闪烁。延时循环间隔并不重要,但是必须提供足够的延时才能观察到结果。运行该应用程序(开始调试,然后,运行),您将很快看到和最初的应用程序并没有什么不同;所有LED以1秒的间隔同时接通和关断。暂停应用程序,打开本地变量观察窗口(View

前面曾提到上面的代码中有错误。现在,按下Step Over按钮几次,您将看到执行从循环对比(x<100000)跳到条件测试“if”声明(x ==100000),直到递增(x++),然后是本地窗口中x值的变化。在PO3 = PO3 ^ 0x01一行设置一个断点,单击Go。出于某些原因,执行并没有暂停。很明显,程序没有进入“if”声明。再次按下Break,将变量x值改为99999,单击Step Over几次。您将注意到,由于x=0部分被执行,“for”循环终止,然后再次开始。问题很明显—x值永远不会到达“for”循环中的100000,这是因为进行了“less than”测试。停止程序,将“if”声明中的对比值改为99999。重新编译程序,启动调试器,单击Go。LED开始闪烁,LED DS1自己独立闪烁。

图11. 本地变量窗口
了解详细信息
评估套件CD-ROM中提供本应用笔记所有文件的源代码。还可以从Maxim网站下载这些源代码。文件还含有工程文件;所有头文件和include文件;以及机器可装入.HEX输出文件,采用Maxim的MTK (微控制器工具套件)等终端模拟器直接可以装入并运行它(例如,不需要使用编译器工具包),可以下载这一模拟器。,采用MAXQ610评估套件(EV kit)和IAR嵌入式工作