支持调试芯唐Cortex-M0芯片的工具很多,例如在Keil环境下,可搭配Ulink2或芯唐的Nu-Link调试器进行调试;
而在IAR EWARM集成环境下,则可以搭配万利的Mlink,或搭配芯唐的Nu-Link调试器进行调试。
本文将基于IAR EWARM + Nu-Link的组合,介绍用IAR调试Cortex-M0芯片的办法。
一、功能介绍:
在调试之前,首先让我们先了解一下Nu-Link的功能。
Nu-Link是即插即用的调试器,USB接口,无需外接电源,即可进行调试,
并全面兼容WinXP, Vista, Win7。
IAR EWARM + Nu-Link调试器组合,除支持基本的程序烧入、调试、断点、寄存器和内存访问等功能之外,
还有其他一些有趣的功能:
1. 支持无限数量Flash断点
Cortex-M0的硬件断点数量较少,导致运行在flash中的程序,最多只支持4个断点。
很多情况下,仅4个断点是不够的。Nu-Link支持的Flash断点功能,采用快速修改Flash内容的方式,
完全突破了4个断点的限制,让用户可以使用任意多的断点数。同时,对Flash断点采用Cache机制
和LRU算法控制断点换出,最大程度的减少了更改Flash断点的次数。让用户在使用Flash断点时,
几乎感觉不到调试速度变慢。
2. Semihosting输出功能
在调试时,用户希望打出一些调试信息。然而,很多情况下嵌入式系统甚至连串口都没连接,
更别说打印信息了。利用Semihosting可以解决这个问题,经semihosting方式的输出函数,
在调试器调试时,可以将printf打出的信息显示在IAR的Terminal窗口;在离开调试器运行时,
则可以打印到实际的物理设备。
(如果您用Keil,在芯唐Cortex-M0上使用semihosting,可以参考此文:http://my.chinaunix.net/space-23480430-do-blog-id-1016.html)
二、调试指南
步入正题,笔者进行调试时,软硬件环境如下:
软件:
1. Windows Vista操作系统
2. IAR EWARM KS 5.5评估版(可以在IAR网站上下载)
3. Nu-Link for IAR驱动:Nu-Link_IAR_Driver 1.02.exe
硬件:
1. Nu-Link 调试器
2. NUC140开发板
上述2,3的软件安装时,都按照默认路径安装。
安装完成后,在Nu-Link的安装目录下有一个例子工程目录:
C:\Program Files\Nuvoton Tools\Nu-Link_IAR\Samples
我们拿其中的PWM工程做演示。
由于Vista下面该目录不能随意写,先将该工程复制到另外可写的目录,
于是我们复制到 W:\Nuvoton\PWM 下使用。
第一步,双击打开工程 W:\Nuvoton\PWM\PWM.eww
这时候IAR程序将启动,显示找不到调试器驱动
先不用管它,点击一系列“确定”后,工程最终被装载进IAR.
紧接着,我们开始检查工程的配置,点击菜单的Project => Options,或者用快捷键(Alt F7),将进入工程的配置对话框:
这个配置对话框里,有一项需要修改:
点左侧的Third-Party Driver, 右侧的IAR debugger driver, 需要重新设定,
改成Nu-Link实际的安装路径
C:\Program Files\Nuvoton Tools\Nu-Link_IAR\Nu-Link_IAR.dll
另有有几项需要特别留意,检查是否设定正确。
1. 点左侧的Debugger, 在右侧出现的Setup标签页里,下面的Driver要选"Third-Party Driver"
3. 点左侧的General Options, 在右侧出现的Target标签页里,下面的Device选 Nuvoton NUC140xE
4. 点左侧的Linker,右侧的出现的Config标签页里,勾上Override default, 选择flash烧写程序的路径,
这个例子里我们使用 $PROJ_DIR$\config\NUC140_Flash.icf
最后点击"OK", 保存项目配置。
X-Hawk觉得IAR配置更新做的不太好呢,保险起见,保存完配置,
最好将IAR完全关掉,重新打开一下当前这个工程。
第二步,重新编译项目,在Project菜单上点Rebuild All即可,很简单。
第三步,确保硬件已经连接好:
Nu-Link调试器一头连在开发板上,USB一头连在电脑上。开发板上电。
第四部,开始调试。在Project菜单上点Download and Debug.
不出意料,程序将运行到main停下来,等待用户调试。
至此,您就可以尝试单步运行、访问memory、寄存器等这些调试动作了。下图是进入调试模式的窗口:
三、semihosting输出
接下来,我们将程序稍微修改一下,演示下如何将调试信息打印到IAR集成环境的窗口里。
我们将main程序改成简单的输出:
int main(void)
{
int i = 0;
while(1)
printf("Hello world, %d\n", i++);
}
然后重新编译(在Project菜单上点击Make 或 Rebuild All),
编译完在Project菜单上点击Download and debug运行.
开始运行进入main后,先点击菜单View 下的 Terminal I/O项,
这时候会出现一个Terminal I/O的窗口。
然后按下F5继续运行程序,您会发现printf打印的字符串,统统显示在这个Terminal I/O窗口了。
是不是很简单:)