ENGLISH 简体中文 日本語 한국어  



   
 
请输入关键词或器件型号    




应用笔记2777

用Keil MON390编程TINIm400

摘要:DS80C400微控制器的C语言编程需要一定的调试手段。调试手段之一是使用Keil的MON390,它是一种在目标平台上运行代码的调试程序。为使用监视器,需要考虑一些配置选项。本篇应用笔记概述了这些因数,并调试了一个简单的网络程序。

引言

在设计DS80C400硅软件时,就决定公开一套组合功能,可以由C语言编程者来访问。在一些程序库的帮助下,C语言编程者可以访问网络堆栈、过程管理器、存储器管理器,以及其它烧录在DS80C400 ROM中的有用函数。自然地,对C语言编程的介绍也意味着对需要调试C语言程序的介绍。调试手段之一是使用Keil的MON390,它是一种在目标平台上运行代码的调试程序。为使用监视器,需要考虑一些配置选项。本篇应用笔记概述了这些因数,并调试了一个简单的网络程序。

演示所需要的条件

本篇应用笔记描述如何使用TINIm400模板和TINIs400接口板,可从www.maxim-ic.com.cn/sales网站上购买。另外还需要两条串行电缆。一条串行电缆连接到TINIm400模板上的串口0,并用于从用户程序中读取标准输出。另一条串行电缆连接到TINIm400串口2连接器(位于TINIs400插座板上的J13),并需要通过一个插针/插孔转换器或一个空调制解调适配器连接。该端口用来与监视的PC端程序通信。下图所示为接口板和主板连接着两条串行电缆(一条与空调制解调适配器相连)、一条以太网电缆和电源。

图1. 使用监视器工作时所需的连接器
图1. 使用监视器工作时所需的连接器

请确认已下载Keil µVision2™ IDE的最新版本(www.keil.com提供下载)。完成本篇应用笔记时,µVision2 IDE的最新版本为2.37,C Compiler的最新版本为7.07。

为了解使用与DS80C400相关的Keil工具,可以参考应用笔记613:DS80C400的Keil C语言编程. 它提供了更全面的介绍如何开始编程和执行程序,应该在本篇应用笔记之前阅读。

生成和下载监视器程序至TINIm400模板

文件mon400.hex必须从Keil源程序中生成。采用编译器更新版本7.07 (或更新版本),工程文件应该包括了监视器源程序。该工程文件位于[Keil Install]\C51\MON390\TINIm400。打开工程文件mon400.Uv2,并按F7键就可生成文件mon400.hex,并存放在同一目录下。该监视器被配置装载到存储区47h (闪存中),就可以115200波特率使用TINIm400的串口2与监视器主机通信。

可以使用JavaKit程序装载可执行的监视器程序。JavaKit是TINI® SDK的一部分,最新版本的TINI SDK可从:TINI Firmware下载。作者在撰写本文时,SDK的最新版本是1.13。请按照docs\Running_JavaKit.txt (也是TINI SDK下载的一部分)文件中的指示安装和运行JavaKit。如果在使用JavaKit的过程中遇到任何问题,可以在中查到TINI问题列表目录。很可能其他人遇到过类似的问题,并在线提供了解决方案。

从JavaKit应用程序中,打开与DS80C400的串行装载器通信的PC串口。即该PC串口连接到TINIs400插座板上J12串口。一旦该端口被打开,点击RESET按钮,将出现DS80C400装载器提示窗口。装载器提示文本如下:
      DS80C400 Silicon Software - Copyright (C) 2002 Maxim Integrated Products
      Detailed product information available at http://www.maxim-ic.com

      Welcome to the TINI DS80C400 Auto Boot Loader 1.0.1
      >
从这里开始,从“File”菜单中选择“Load HEX as TBIN”,并找到mon400.hex文件。装载将需要5秒钟,然后可以看到如下显示信息:
      Loading file: C:\work\monitor\mon400.hex.
      Please wait... (ESC to abort.)
      Load complete.
接下来回到装载器提示窗口,输入‘E’并回车。此时不会显示任何信息,但监视程序已经开始运行。现在就可以开始使用Keil µVision2 IDE了。

用Keil监视器实现HelloWorld

Keil为监视器提供了一个简单的HelloWorld型应用的源程序。该源程序在Examples/Hello目录下,可以被编译连接,并在监视器下使用,快速显示其功能。不过,在这一节将讲述如何配置一个简单的、使用Keil监视器的新工程文件,以便开发者可以在自己的工程文件中使用监视器程序。

1) 在Keil µVision2 IDE中创建一个新工程文件。我们给工程文件起名hellomon。当被提示选择器件时,从Dallas Semiconductor下的列表中找到DS80C400。点击“Use Extended Linker”和“Use Extended Assembler”的选择框。然后点击OK继续。
2) 当µVision2 IDE提问Copy Dallas DS80C390 Startup Code to Project Folder and Add File to Project? 时,选择“No”。我们将提供自己的启动代码。
3) 将文件startup400.a51main.c (提供给本应用笔记的这些源程序文件位于子目录hellomon)复制到你打开该Keil工程文件的文件夹下。在µVision2 IDE应用程序中打开Target 1,并右键点击Source Group 1。选择Add Files to Group 'Source Group 1'。选择文件main.c,并点击Add。再回到Add Files to Group 'Source Group 1'对话框,将文件过滤器改为Asm Source File。点击文件startup400.a51,并点击Add。现在你可以打开'Source Group 1'项目,就可看到源程序文件清单。
4) 双击startup400.a51打开该文件。找到USE_MONITOR的定义,并将其设置为1,使该行代码如下:
       $set (USE_MONITOR = 1)
同时将XTALMULT也设置为1。
5) 右键点击Target 1,并选择Options for Target 'Target 1'。“Memory model”处选择Large:Variables in XDATA。“Code Rom Size”处选择Contiguous Mode:16MB Program。选择检查框中的Use On-Chip Arithmetic AcceleratorUse Multiple DPTR registers,以及'far' memory type support。“Off-chip Code memory”栏目中,使用0x200000作为“Start”的起始值,0x70000作为Size的大小。“在Off-chip XDATA Memory”栏目的第一行中,“Start”中填入0x10000,“Size”中填入0x3FFF


图2. 步骤5配置选项
图2. 步骤5配置选项

6) 继续在Options for Target 'Target 1'对话框中选择Debug选项。在该面板上有两个单选按钮,一个是Use Simulator;另一个是Use,紧接着一个下拉列表框。选择右边带下拉列表框的单选按钮。在下拉列表框中选择MON390: Dallas Contiguous Mode。按下Settings按钮。选择连接到TINIs400接口板串口2的PC机串口,设定“baud rate”为115200,并确认标记为Enable Serial Break的检查框被选中。现在你可以关闭该选择对话框了。


图3. 调试器的配置选项
图3. 调试器的配置选项

7) 按F7键,编译连接该工程文件。编译连接的结果应该没有出错信息。
8) 在TINIm400运行监视器程序的条件下(参见编译连接与将监视器装载到TINIm400模板),进入Debug菜单,选择Start/Stop Debug Session。在IDE的左侧,将会显示寄存器与SFR的数值。现在监视器已经在运行,我们可以进行调试了。
9) 在View菜单下选择Watch & Call Stack Window,打开变量观察窗口。用同样的方法打开Memory WindowSymbol Window。在Symbol Window下,Mode处选择LocalsCurrent处选择MAIN。这样将显示在main()方法中使用到的局部变量的地址。在“memory window”中,标签为Address的编辑框中键入i: 0x00。现在该窗口显示的是内部RAM中的变量。你可以发现左侧寄存器r0至r7对应的数值。


图4. main()方法中观察窗口所显示的内容
图4. main()方法中观察窗口所显示的内容

图5. 设置为观察内部RAM的存储器窗口
图5. 设置为观察内部RAM的存储器窗

10) 回到源程序文件main.c,并找到如下一行
printf("DS80C400 Monitor Demonstration\r ")

右键点击该行,并选择Insert/Remove Breakpoint。这时这行代码的左侧会出现一个红框。接下来按F5键运行。程序将暂停在断点处,一个黄色箭头指向当前执行到的代码行。同时,局部变量array, ij将出现在观察窗口。
11) 按F10键单步执行下一行代码。如果JavaKit仍是打开的状态,并保持与TINIs400串口0的连接,那么“DS80C400 Monitor Demonstration”的信息将显示在JavaKit终端。继续按F10键单步执行接下来的几行代码。注意到随着新代码的运行,观察列表里的变量也在更新,同时寄存器和SFR内容也在变化。同样,你也可以使用符号表中提供的地址,交叉对照存储器窗口中的局部变量。

如果要停止调试,则在Debug菜单中再次选择Start/Stop Debug Session。如果需要再次启动监视器程序,则可以通过JavaKit (点击RESET按钮,并键入‘E’)或重新上电来复位电路板。为了能够中断运行代码(点击STOP按钮),你需要开放第二个串行中断。要实现这个功能,只要将hellomon程序的第一行设置如下:
          ES2 = 1;
不过,你可能希望使用监视器调试程序时都具有这样的功能。那么,再次打开监视器工程文件(mon400.Uv2),找到InitSerial:那一行,紧跟在$IF (SERIAL = 2)行之后。在靠近该函数结束的地方插入一行“setb es2”,如下:
             orl     T3CM, #040H         ; Enable timer 3 to run
             orl     SCON2,#002H         ; Serial 2 transmit indicator set
             setb    es2                 ; THIS LINE ADDED!!!
             JMP     MONSTART
重新编译连接并重新装载监视器程序。接下来在hellomon应用程序中,在程序末尾的循环部分插入一行:
          while(1)
          {
                 i++;
          }
现在在调试器中再次运行该程序。按F5键通过每个断点,程序将进入这个无限循环。然后按下停止按钮,查看窗口中I的值。也可以单步执行,观察I值递增的情况。

用Keil监视器调用DS80C400程序库

当在程序中调用DS80C400 C程序库时,使用Keil监视器的过程中还有一些其他问题。任何一个使用到C程序库的应用程序都需要调用init_rom函数,该函数会覆盖中断向量表。可是,在中断向量表中有些数据是监视器程序必须使用的。为了修改init_rom函数所作的某些改动,应用程序在调用init_rom函数之后,应紧接着调用init_usekeilmonitor函数,当然只有使用到监视器程序时才需要这样做。为了使该调用更直观,初始化程序库中包含了一个宏,如果在应用程序中作如下行定义后,则仅调用函数init_usekeilmonitor
#define MONITOR
以下将通过一个简单的联网应用程序来演示这个过程。

1) 开始一个新的应用程序,用作数学运算服务器(该应用程序将接收两个16位数,并输出两数之和)。执行上一节的步骤1到6,为该工程文件完成存储器使用及监视器使用的适当配置。当然,用mathserver源代码取代hellomon源代码。源代码可以在本篇应用笔记的源程序文档中找到1。向该工程文件添加库文件,包括DHCP库、【插件】库,任务调度程序、以及初始化库,使用的方法与添加startup400.a51main.c文件相同。作为选择,可以使用该工程现成的工程文件――只要打开该文件,就可以运行该工程文件。
2) 首先,让我们在不使用监视器程序的情况下运行该应用程序,来观察执行的过程。在“Project Target Options”中(右键点击“Target 1),Output”选项下,选中Create HEX File检查框,并从下拉列表框中选择HEX-386。将靠近该应用程序开始部分的#define MONITOR代码行注释掉。启动代码中USE_MONITOR的值可以保持1。按F7键编译连接该应用程序。编译连接后会产生一些函数未被调用的警告。这些警告针对的是程序库中未被使用的函数,可以忽略它们。
3) JavaKit中,装载生成的hex文件(在本例中,即mathserver.hex文件)。在装载完成后,键入“B 20”,回车,再键入“X”,回车。该应用程序应该开始运行,几秒钟以后,将报告DHCP服务器为它分配的地址。
4) 在命令提示窗口中,编译connect.java文件。这个Java程序是客户端应用程序。键入以下命令进行编译:
javac connect.java
5) 接下来在PC上运行connect程序。使用JavaKit报告的IP地址作为你的IP地址参数。第二个参数是端口号,应当是15555。该命令行如下所示:
          java connect 180.0.6.131 15555
DS80C400代码将分别以十六进制和十进制形式显示收到的数字:
                T1 is 3241 and T2 is a747 (hex)
                T1 is 12865d and T2 is 42823d
                Total is 55688
                T1 is 78ed and T2 is ce1c (hex)
                T1 is 30957d and T2 is 52764d
                Total is 83721
                T1 is f2e6 and T2 is e49 (hex)
                T1 is 62182d and T2 is 3657d
                Total is 65839 
PC将验证总和的正确性,并显示信息:It's all good
6) 停止客户端,让我们回到Keil IDE进行一些调试。
7) main.c文件中找到函数init_rom。注意在该函数被调用后,应紧接着调用USE_KEIL_MONITOR宏。当MONITOR未被定义时,该宏功能什么都没有做。一旦定义了MONITOR (在文件rom400_init.h被引用之前),该宏功能会调用一个函数,恢复因调用init_rom而被清除的一些设置。回到文件main.c的开始部分,取消代码行#define MONITOR的注释。按F7键编译连接该工程文件。
8) 使用JavaKit装载监视器程序并运行。回到“Project Options”窗口的“Debug”选项,选择正确的COM端口和波特率。接下来使用监视器开始调试。在main函数中的第一条printf语句处设置断点,并按F5键运行。然后按F10键单步执行main()中的函数。当单步执行完do_dhcp()以后,观察在DS80C400试图获取DHCP地址时的JavaKit输出。
9) tcp_test()函数中调用recv之后的下一行代码if (temp != 0xFFFF)处设置断点。按F5键运行,并观察JavaKit的输出。根据提示运行connect程序,调试器将到达新的断点。接下来单步执行该循环。从调用send开始到调用recv以后,这之间的过程中应当使用Go指令(按F5键)。监视器程序暂停DS80C400执行,可能导致网络通信失败。

¹http://files.dalsemi.com/tini/ds80c400/c_libraries/appnotes/monitor_appnote_source.zip

使用Keil监视器的局限性

目前,使用Keil监视器还有一些局限性。不过随着Keil今后监视器程序新版本的发布,这些局限性会被削弱或消除。

使用Keil监视器时,必须使用一个1倍频晶振倍频器(XTALMULT)。

Keil监视器程序对调试网络应用程序来说并不理想。在等待用户继续执行应用程序的过程中,监视器使所有中断都不能被触发,这样会丢失网络传输数据。Ethereal (www.ethereal.com/)是调试网络传输程序的好工具。

监视器程序与Keil调试器偶尔会失去联系。通常,让调试器程序Try Again可以恢复通信。如果不起作用,可能就需要用JavaKit重新启动监视器程序并重新开始调试。

结论

Keil监视器程序为Dallas Semiconductor连续存储器模式处理器提供了一种有效的工具,用于跟踪和调试源代码程序。该监视器程序可以与其他方法结合使用,比如设置输出位以及向串口发送调试信息等,该监视器程序是一套完整技术中的一部分,用于调试为DS80C400处理器所编写的应用程序。

相关链接

本篇应用笔记的源代码(ZIP)

TINI软件开发套件

Keil软件开发工具

高速微控制器用户指南:网络微控制器补充材料(English only)

C程序库工程文件主页

Java开发套件下载网页

Java通信API

应用笔记613:DS80C400的Keil C语言编程



我们期待您的反馈!
喜欢?不喜欢?有待改善?或为我们提供建议?请与我们联系 — 我们将根据您的意见或建议改善我们的工作。 网页评价或提供建议


自动更新
需要自动接收最新发布的应用笔记吗?请订阅EE-Mail™ (English only)。



更多信息  APP 2777: Jan 20, 2004
DS80C400 网络微控制器 完整的数据资料
(PDF, 1.8MB)
免费样品
DSTINIM400 网络微控制器评估板 完整的数据资料
(PDF, 876kB)
DSTINIS400 DSTINIs400/DSTINIx-00x插座板 完整的数据资料
(PDF, 496kB)
 

下载,PDF格式下载,PDF格式 (352kB)
 AN2777, AN 2777, APP2777, Appnote2777, Appnote 2777

        •         •         •     隐私权政策     •     法律声明

    © 2009 Maxim Integrated Products版权所有