简介面向嵌入式开发初学者以及参加 NXP ARM MCU 设计竞赛的读者这份 IAR Embedded Workbench for ARM 快速入门 PPT 以 LPC2148 例程为线索系统梳理新建工程、选择 ARM 工具链与空工程模板、准备并添加源文件、配置通用选项与编译器优化级别、设定头文件包含路径、选择 Flash 烧写文件格式、指定链接命令文件、选择调试器驱动和程序下载模式、设置 RDI 调试代理直至编译链接、下载到目标板与在线调试的完整操作链路。内容按创建工程、添加代码、配置工程选项、代码编译和链接、代码下载和调试五部分组织对每一步的菜单入口、配置参数与调试准备给出提示。压缩包内共 1 个 PPT 文件大小约 806KB页面集中便于按步骤查阅关键配置。已有 510 人学习适合需要快速熟悉 IAR 工程建立、ARM 调试环境与下载流程的读者作为实操参考也可结合 H-JTAG、并口 JTAG 等调试设备理解常见问题的排查思路。1. 先看一个案例编译零错误下载却卡住上个月帮某实验室把一台还在跑 LPC2148 的老机器重新盘活打开 IAR Embedded Workbench for ARM v4.41A工程编译零错误一点下载就卡在连接阶段折腾到半夜才发现是工程里那份 Linker Command File 还指向 RAM 版本。照着 IAR 使用手册 走流程的人特别容易栽在这类地方——手册把十一个选项页列得很清楚却没告诉你哪几项必须成对改。这套环境在实验课、板卡验证和旧项目维护里出现频率极高装不顺的后果也很直接编译能过、下载失败、单步乱跳最后开始怀疑板子坏了。下面按我实际装机的顺序重排一遍从版本选择、安装目录、工程建立到选项配置和下载调试一步步落到能复现的程度。2. 装 IAR Embedded Workbench for ARM v4.41A安装包、调试服务和并口驱动一起备齐这套环境不是一个安装包双击到底就完事。最少四样东西要凑齐IAR 本体、能连上板子的调试服务程序 H-JTAG、一根并口转 JTAG 的转接头、以及目标板本身。少一样后面配置页填得再漂亮也下不进程序。我一般先把四样东西全部放到同一个目录下再动手避免装到一半去找驱动。2.1 先对一遍环境清单与版本选择版本这关必须先过。这份手册对应的是 v4.41A拿 v5 以后的界面去套会发现 Debugger 里根本没有 RDI 这个选项——新版本早就换成别的调试驱动体系了选项名、位置、工程文件格式全变。用老版本工程文件在新版本里打开软件会提示转换转完 Linker 配置项散落到别处反而更乱。组件版本/型号作用备注IAR Embedded Workbench for ARMv4.41A 完整版编译、链接、调试一体需正常安装含 examplesIAR Embedded Workbench for ARM KickStartv4.41A同上代码体积受限小例程够用工程一大就撞限制H-JTAG与转接头配套的版本提供 RDI 服务桥接 IAR 和硬件装完要能识别到目标芯片 IDSuperJTAG 并口-JTAG 转接头并口接口把 PC 并口转成 JTAG 时序其他 Wiggler 兼容设备也可LPC2148 目标板—运行和调试对象备一根串口线看输出KickStart 是免费的那一版做 Uart 这类小例程完全够但代码量上去以后链接阶段会直接报体积超限。如果是给别人搭环境、后面还要往里加功能建议一开始就装完整版省得中途换工具重配一遍选项。2.2 安装 IAR 并核对 arm\examples 目录安装路径有个坑值得单独说v4.41A 装完目录名是Embedded Workbench 4.0不是 4.41。这是内部版本号的习惯很多脚本和批处理里写死 4.41 就会找不到路径。我一般把它装到非系统盘、路径不带中文和空格的位置老工具对空格和中文路径的容忍度比想象中低尤其是 Linker Command File 的路径。装完先别急着建工程按下面三条核对一遍目录。第三条最关键后面要复制的两份.xcl就在那里。# 安装完成后核对三处盘符和路径按自己的实际情况替换 ls /c/Program Files/IAR Systems/Embedded Workbench 4.0/arm/bin/iccarm.exe # ARM C/C 编译器 ls /c/Program Files/IAR Systems/Embedded Workbench 4.0/arm/bin/ilinkarm.exe # 链接器 ls /c/Program Files/IAR Systems/Embedded Workbench 4.0/arm/examples # 官方例程根目录第一条确认编译器在位第二条确认链接器在位第三条确认安装时勾选了例程组件。如果examples下面空空如也说明安装时选了自定义组件、把示例去掉了重新跑一遍安装程序补上就行不用卸载重装。进到examples之后再往下一层找到 LPC214x 对应的例程目录路径中间那一层是芯片厂商的缩写不同安装包可能略有差异进去看一眼目录名就知道了。找到Uart/Configuration这一级里面躺着的就是LPC2148_flash.xcl和LPC2148_RAM.xcl。2.3 装 H-JTAG 与并口驱动H-JTAG 装完第一件事是单独打开它让它自己去识别目标芯片。能读出芯片 ID说明并口、转接头、目标板这条链路是通的读不出来后面在 IAR 里怎么点都是白费。并口地址一般是 0x378主板 BIOS 里并口模式建议设成 ECP 或 EPP设成单向模式有时能识别但下载会中途断。注意USB 转并口线在这类老调试器上基本不可用时序对不上。要么用主板原生并口要么换 USB 接口的 JTAG 调试器并改用对应的驱动。H-JTAG 装完会留下一个H-JTAG.dll记住它的完整路径第 4 章配置 RDI 服务时要一字不差地填进去。另外这类老程序在较新的系统上建议用管理员身份运行一次否则读写并口端口可能被拦。3. 创建工程与添加代码Empty project、.xcl 与 .s79 一个都不能少工程这一层最容易出的问题不是操作不会而是“少东西”。少一份.xcl链接器不知道代码该放哪漏了.s79汇编启动文件程序跑起来第一件事就是飞。这一章按顺序把该进目录的东西列清楚再谈怎么加进工程。3.1 新建工程Tool chain 选 ARM模板选 Empty project从开始菜单进 IAR Embedded Workbench菜单路径是 IAR 那一栏下面两级。进去之后Project Create New Project…弹出的小窗口里两个下拉框必须选对Tool chain 选 ARMProject templates 选 Empty project。选 Empty project 是有讲究的。模板列表里还有带 main 的、带 C 的、以及各种芯片厂商预置的模板那些模板会自带一批文件和默认选项和你的启动文件、链接文件撞在一起时报错信息会非常难读。空工程什么都不带所有文件由你亲手加出了问题也只可能是你加的那几个文件的问题排查范围小得多。选完模板会直接弹保存对话框这时候把工程存成LPC2148_Demo.ewp放在你准备好的工程目录里。.ewp是工程文件记录文件列表和所有选项配置后面的十一个选项页全都存在这个文件里。3.2 三个文件必须先进目录源文件与两份 .xcl工程文件落盘之后先把目录整理干净。我习惯建一个独立目录比如D:\work\LPC2148_Demo把三类文件一次性放进去再回 IAR 里添加。顺序很重要先放文件后添加反过来容易加进一堆临时路径的引用。第一类是业务代码C/C 源文件和头文件。第二类是 ARM 汇编源文件扩展名是.s79这是老版本 IAR 对 ARM7 指令集汇编文件的后缀约定写成.s反而不认。第三类就是前面提到的那两份链接命令文件控制代码和数据在 LPC2148 内部存储器里怎么分配片上 Flash 从 0x00000000 起片上 RAM 从 0x40000000 起两份.xcl分别对应这两套地址布局。# 工程目录准备源文件、汇编文件、两份链接命令文件一次到位 mkdir -p /d/work/LPC2148_Demo cp /path/to/src/*.c /d/work/LPC2148_Demo/ # C 源码 cp /path/to/src/*.h /d/work/LPC2148_Demo/ # 头文件 cp /path/to/src/*.s79 /d/work/LPC2148_Demo/ # ARM 汇编注意后缀不是 .s # 两份链接命令文件从安装目录的 LPC214x 例程里复制过来 SRC/c/Program Files/IAR Systems/Embedded Workbench 4.0/arm/examples cp $SRC/厂商目录/LPC214x/IAR-LPC-214X/Uart/Configuration/LPC2148_flash.xcl /d/work/LPC2148_Demo/ cp $SRC/厂商目录/LPC214x/IAR-LPC-214X/Uart/Configuration/LPC2148_RAM.xcl /d/work/LPC2148_Demo/ ls -l /d/work/LPC2148_Demo/*.xcl # 确认两个文件都在且非空前三条是搬源码中间两条是搬链接命令文件最后一条是自检。厂商目录换成你在examples下实际看到的目录名。这个文件名千万别改第 4 章选 Linker Command File 时下拉框里显示的就是这两个名字改了之后配置对不上链接器会报找不到文件。两份都要复制只复制 Flash 那份的话想切到 RAM 调试时又得回来找。3.3 Add Files 与 Workspace 保存.ewp 和 .eww 不是一回事文件进目录之后回到 IARProject Add Files…打开文件选择框。这里有个小坑默认的文件类型过滤器只显示.c汇编文件根本看不见。要么把过滤器切到 All files要么直接在文件名输入框里敲*.s79回车。想一次加完就在文件名框里输入*.c;*.h;*.s79再回车多选确认。加完在左侧 Workspace 窗口里检查一遍文件树重点看两件事汇编启动文件在不在头文件有没有被当成源文件重复加进去。头文件加进去不会编译报错但会让文件树很乱后面找文件费劲。最后是保存 WorkspaceFile Save Workspace存成LPC2148_Demo.eww。.ewp和.eww是两层东西.ewp管单个工程的选项和文件列表.eww管工作区记录当前打开了哪些工程、哪个是活动工程。只存.ewp不存.eww下次双击.ewp打开IAR 会当成新工作区处理偶尔会出现选项没生效的错觉。两个都存文件名前缀保持一致。4. 工程选项配置LPC2148 十一个标签页的填法与取舍这一章是整套环境的核心。所有配置都在Project Options…里入口有两个菜单栏的 Project 菜单或直接在 Workspace 窗口里右键工程名选 Options。两种方式打开的是同一个对话框后者更顺手。十一个步骤看着多其实可以归成三组编译相关通用选项、优化级别、头文件路径、链接相关输出文件参数、烧写格式、Linker Command File、调试相关驱动、下载模式、RDI 服务路径。三组之间是联动的改一组往往要跟着改另一组。4.1 通用选项与编译器优化级别General Options 里最先确认的是目标器件。选到 LPC214x 系列对应的条目字节序保持小端。这一步改错后面所有地址计算都是错的报错还特别隐晦。优化级别在C/C Compiler Optimizations里。档位从 None 到 High还有单独的 Size。取舍很直接调试阶段用 None 或 Low发布阶段再上 High 或 Size。High 会把变量塞进寄存器、把相邻语句合并表现出来就是单步时行号乱跳、想看的局部变量显示成不可用很多人以为是调试器坏了其实是优化把代码改得面目全非了。我一般把工程分成两套配置调试用 Low、发布用 High切换靠 Options 里那一个下拉框五分钟的事比在 High 下硬着头皮猜变量值强得多。4.2 头文件包含路径与 C-SPY 额外输出如果源码里 include 了别的目录下的头文件必须在C/C Compiler Preprocessor的 Additional include directories 里把路径加上一行一个。路径建议用工程相对路径的写法别写死成D:\work\...换台机器就废。Linker 的 Output 页有个Allow C-SPY-specific extra output file开关勾上之后会额外产出一份给调试器用的输出文件。只要打算在 IAR 里下载和调试这个开关就勾上只用外部工具烧写、完全不在 IAR 里调试的场景可以不勾输出目录会干净一些。4.3 输出格式与 Linker Command FileRAM 与 Flash 两套组合这两页必须成对配置是全篇最容易翻车的地方。单独改一页另一页还是旧值结果就是能编译、能链接、下不进板子。三种常见组合我整理成一张表调试方式Linker Output 格式Linker Command FileUse flash loader(s)产物后缀下载到 RAM 调试可跳过不生成额外格式LPC2148_RAM.xcl不勾.d79等调试文件下载到 Flash 调试simple-codeLPC2148_flash.xcl勾选.d79等调试文件生成 Hex 交外部工具烧写intel-extendedLPC2148_flash.xcl不勾手动把后缀改成.hex表格第二行是日常最常用的组合。第三行是给外部烧写工具准备文件用的intel-extended出来的是 Intel HEX 格式但 IAR 默认给的后缀不是.hex得自己改不改的话很多烧写工具认不出来。第一行是 RAM 调试好处是不动片上 Flash、反复下载快坏处是掉电就没了、程序大小受 RAM 限制。Linker Command File 在Linker Config页里指定点后面的浏览按钮选工程目录下的.xcl。这里不要图省事直接引用安装目录里的原件一定复制到工程目录再用否则换台机器或者重装 IAR路径一断链接器直接罢工。4.4 调试器驱动、下载模式与 RDI 服务路径Debugger Setup 页的 Driver 下拉框里选 RDI。选完之后驱动名后面会出现一个可点的按钮点开填 H-JTAG 那个 dll 的完整路径要填到文件名只填目录是不认的。Download 页的Use flash loader(s)就是表格里那一列Flash 调试勾上RAM 调试去掉。这一项和 4.3 的输出格式、.xcl三者的取值必须一致我把它们当成一个三元组来记RAM 三件套是「RAM 的 xcl 不勾 loader 不需要格式」Flash 三件套是「flash 的 xcl 勾 loader simple-code」。填完点 OK回到主界面File Save Workspace再存一次。选项是存在.ewp里的不保存就等于没配。4.5 Rebuild all 与下载调试的动作顺序配置齐了Project Rebuild all全量重编。不要用增量编译的 Build第一次配环境用全量重编能把所有文件的告警都刷出来。Build 窗口最后一行是错误和告警统计0 error 才往下走。下载调试的标准动作顺序是先单独打开 H-JTAG确认它已经识别到目标芯片再回 IAR点Download and Debug。反过来先点 IAR 再开 H-JTAG十次有八次连不上因为 RDI 服务端还没起来。调试结束用Debug Stop Debugging退出别直接叉掉窗口有时候会把调试连接占住下一次连不上。5. 排查这套 IAR 加 H-JTAG 组合最容易翻车的五处下面这五条是我在这套环境上真实踩过的按出现频率从高到低排。每条都按现象、原因、解决三段写遇到问题时可以直接对着症状找。5.1 报 RDI 连接失败但 H-JTAG 显示已连上现象单独打开 H-JTAG 能读出芯片 ID一切正常回 IAR 点下载弹窗提示 RDI 连接失败或者根本没有任何反应。原因RDI 服务路径没填对或者 H-JTAG 不是以管理员身份运行的。前者最常见很多人只填了 dll 所在目录没填到文件名后者在较新的系统上会被端口访问权限拦住H-JTAG 界面看着正常实际拿不到并口。解决先打开 Options 的 Debugger 页把 RDI 那一栏的路径补全到...\H-JTAG.dll。再确认 H-JTAG 是管理员权限启动的。还不行就把 IAR 也以管理员权限启动一次两边权限对齐之后再试。最后再检查并口地址是不是 0x378、BIOS 里并口模式有没有被改回单向模式。5.2 RAM 版本跑得好好的切到 Flash 就飞现象RAM 调试一切正常程序能跑、断点能停。想烧到 Flash 长期运行改完配置重新下载程序一上电就是无反应或者跑几条指令就死。原因三元组只改了一半。典型情况是.xcl换成了 flash 版但Use flash loader(s)忘了勾或者 loader 勾了Linker Command File 还指着 RAM 那份。这样链接器按 RAM 地址布局生成代码烧写器却往 Flash 里写启动时取指地址对不上。解决打开 Options一次性核对三处——Linker 的 Config 页是不是LPC2148_flash.xcl、Output 格式是不是simple-code、Debugger 的 Download 页是不是勾了Use flash loader(s)。三处对齐之后 Rebuild all不要用增量编译然后再下载。5.3 生成的 hex 用外部烧写工具写不进去现象按手册把输出格式改成 intel-extended输出目录里生成了文件拖进外部烧写工具提示格式不识别或文件为空。原因后缀没改。intel-extended 生成的还是 IAR 自己的默认后缀不是.hex不少烧写工具是看后缀判断格式的。解决把输出文件后缀手动改成.hex再喂给烧写工具或者干脆走 IAR 自己的下载通道用 simple-code 加 flash loader 直接烧省掉一次格式转换。要长期用外部工具烧就在 Linker 的 Output 页把额外输出开关打开让每次编译自动多产一份避免每次手动改名。5.4 单步调试时行号乱跳、变量显示不可用现象断点能停但单步执行时光标在几行之间来回跳想看某个局部变量结果显示成不可用或者一直是旧值。原因优化级别开得太高。High 档下变量进寄存器、相邻语句被合并重排调试信息和源码行号对不上这是编译器的正常行为不是调试器出问题。解决调试阶段把优化级别降到 None 或 Low重新 Rebuild all 再下载。如果代码量敏感必须开 High就把要观察的变量加 volatile 修饰或者改用观察内存地址和寄存器的办法别死盯着变量窗口。5.5 换台机器打开工程Include 路径和 xcl 全变红现象工程在原来那台机器上好好的拷到另一台打开头文件标红、链接器报找不到.xcl编译直接失败。原因路径写成绝对路径了或者.xcl直接引用的是安装目录下的原件而不是工程目录里的副本。解决头文件路径改成相对工程目录的写法.xcl一律复制到工程目录再引用。养成习惯工程目录里应包含.ewp、.eww、源码、两份.xcl这个目录整个拷走就能在别的机器上直接打开。配置好之后我会顺手把这几样打个包留档重装系统时直接解压比重新点十一个选项页快得多。6. 验证三步自检确认工程真的在 LPC2148 上跑起来配完不等于通。我的做法是不看界面判断只看三样东西输出文件、串口输出、调试器的运行状态。三样都对上这套环境才算真正装好。第一步查输出文件。Rebuild all 之后去工程目录下的 Debug 或 Release 子目录看产物是不是预期的后缀和体积。RAM 版本应该只有调试文件Flash 版本除了调试文件还应该有能烧进片上的那份。用一条命令就能看清# 编译产物自检后缀、体积、时间戳三项一起看 ls -lh /d/work/LPC2148_Demo/Debug/*.d79 /d/work/LPC2148_Demo/Debug/*.hex 2/dev/null # .d79 是 IAR 调试用的输出.hex 只在 Linker 里选 intel-extended 并改过后缀后出现后缀对不上说明 4.3 那一页没配对文件大小为 0 说明链接阶段其实失败了只是 Build 窗口滚上去了没看见。第二步查运行证据。LPC2148 的例程序列里串口打印是最直观的把串口线接上按例程的波特率打开串口工具复位板子应该能看到固定格式的输出。看不到输出先别改代码回头确认.xcl选的哪一份、loader 勾没勾——地址布局不对时程序可能根本没有正常启动。第三步查调试器状态。点Download and Debug进入调试界面后先看程序指针停在什么位置。正常情况下应该停在启动文件或 main 附近停在一片空白区域基本可以断定是链接布局错了。再全速跑一次、手动暂停看指针是不是落在主循环里能停下来、能看寄存器、能单步这条链路就是通的。验证项通过标准不通过先查哪编译产物后缀正确、体积非零、时间戳是刚生成的Linker Output 格式与.xcl是否成对串口输出复位后能打出预期内容loader 勾选状态、地址布局调试连接能进调试、能暂停、能单步RDI 的 dll 路径、H-JTAG 是否已识别芯片三步都过再动代码。越过验证直接改业务逻辑出问题时根本分不清是环境没装好还是代码写错了这是最耗时间的排查方式。从那以后我每次新建 IAR 工程都会先把.xcl和输出格式这两项成对确认一遍再点下载配完先跑一遍上面这三步自检才允许自己开始改业务代码。这套流程多花十分钟能省掉一整个晚上的怀疑人生。希望帮到你。本文还有配套的精品资源点击获取