用IAR调试芯唐Cortex-M0系列芯片指南
支持调试芯唐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 FilesNuvoton ToolsNu-Link_IARSamples 我们拿其中的PWM工程做演示。 由于Vista下面该目录不能随意写,先将该工程复制到另外可写的目录, 于是我们复制到 W:NuvotonPWM 下使用。 ? 第一步,双击打开工程 W:NuvotonPWMPWM.eww 这时候IAR程序将启动,显示找不到调试器驱动
?
先不用管它,点击一系列“确定”后,工程最终被装载进IAR. 紧接着,我们开始检查工程的配置,点击菜单的Project => Options,或者用快捷键(Alt F7),
?
将进入工程的配置对话框:
?
这个配置对话框里,有一项需要修改: 点左侧的Third-Party Driver,右侧的IAR debugger driver,需要重新设定, 改成Nu-Link实际的安装路径? ???C:Program FilesNuvoton ToolsNu-Link_IARNu-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$configNUC140_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,%dn",i++); } 然后重新编译(在Project菜单上点击Make 或 Rebuild All), 编译完在Project菜单上点击Download and debug运行. 开始运行进入main后,先点击菜单View 下的 Terminal I/O项, 这时候会出现一个Terminal I/O的窗口。 然后按下F5继续运行程序,您会发现printf打印的字符串,统统显示在这个Terminal I/O窗口了。 是不是很简单:)
--------------------------------------------------------------------------------------------------------------------------------------
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |