
新电脑、新虚拟机、刚重装完系统然后拿着同事发来的工程包双击 .eww 文件屏幕上弹出一串编译错误——这个画面做嵌入式的基本都经历过。我这些年陆陆续续帮好几个团队处理过“新安装IAR打开现有工程”的问题说实话大部分坑其实不在代码逻辑而在工具链与工程配置的衔接上。今天我就把这些年踩过、填过的坑整理一遍从许可证激活、芯片支持包、工程文件的打开方式到 Keil 工程迁移、FreeRTOS 移植、还有那些看着就头疼的 fatal error一次性说透。1. 新装IAR之后先别急着双击工程文件很多人装完 IAR 第一件事就是去找工程双击然后看着报错日志发呆。其实顺序反了。IAR 装修完真正该做的是先把环境底座垫好再开工程。这个底座包含三件事许可证状态、芯片支持包、插件状态。1.1 许可证激活与版本授权检查IAR 的许可证机制和 Keil 不太一样Keil 是注册机绑定 IDEIAR 一般通过 License Manager 统一管理。新装完打开工程最容易遇到的就是热词里反复出现的这个错误Fatal Error[LMS001]: License check failed. Use the IAR License Manager to re-install or re-activate the license.这个错误几乎都是许可证没激活或者激活信息不匹配导致的。常见的原因有三类第一类安装完成后没有运行 IAR License Manager 激活或者激活码输入错误。解决办法是打开开始菜单里的 IAR License Manager重新输入 License 文件或激活码。企业用户从公司采购账户里下载的 License 一般是一个 .lic 文件导入即可。第二类许可证和主机硬件绑定了但你换了网卡、换了电脑或升级了 BIOS都会导致授权失效。这种情况只能重新申请并绑定。第三类是版本问题。IAR 的许可证是分级别的比如你装的是 IAR Embedded Workbench for ARM 9.50但拿了 8.x 的 License也会报 LMS001 或者提示版本不匹配。还有一个容易被忽略的细节IAR 的 License 分为节点锁定和浮动许可证。如果你在公司局域网用的是 Floating License需要额外配置 License Server 的地址路径在 License Manager 的 Network License 选项卡里。我曾见过同事在出差笔记本上打开同一个工程报 LMS001折腾半天发现是 License Server 没配上改成 Standalone 授权就好了。1.2 芯片支持包与器件库工程打不开的隐形门槛许可证解决了还会遇到另一种“打不开”——工程文件能加载但设备选型那一栏是空的或者编译器不认芯片型号。这通常是器件支持包缺失。IAR 从 8.x 之后芯片支持从“内置”变成了“通过更新下载”的模式。新装完的 IAR默认只带少量常用器件像 STM32F103C8T6、STM8S003 这类经典型号不一定全在。如果一个工程用了你本地没有的器件包打开后器件下拉框就会是空的编译直接失败。处理方式很简单在 IAR 菜单栏找到 Tools - Device 或者 Project - Options - General Options - Device点开器件选择器Device Selection如果列表里没有目标型号需要先到 IAR 官网的 Download Center 下载对应的 Device Support Pack。我的经验是新装完 IAR 之后先不要急着打开工程去菜单 Help - About 里看一下当前版本号再去 Tools - Device 里确认目标芯片是否存在。如果公司用的是统一购买的 IAR有些管理员会在安装包里预置器件包个人使用的话还是老老实实去官网下载对应版本的支持包。这里特别提醒一点器件支持包的版本要和 IAR 版本匹配比如 IAR for ARM 9.40 配的支持包在 8.50 上可能加载不了。1.3 IAR Plugins 是干什么的和打开工程有什么关系热搜词里有“iar plugins 是干什么的”这个问得挺到点子上。IAR 安装目录下有个 plugins 文件夹里面放的是各类插件包括调试器驱动CMSIS-DAP、J-Link 的 DLL 插件、静态分析工具 C-STAT、代码覆盖率工具还有一些版本控制集成的插件。这些插件和打开工程本身没有直接关系但会影响“打开后的体验”。比如你从 SVN 或 Git 拉下来的工程如果装了对应版本控制插件IAR 能在文件变更上给提示如果插件缺失工程照样能打开只是某些功能按钮是灰的。真正要注意的是 plugins 目录下的调试器驱动。你插上 J-Link 却识别不到第一反应是驱动没装实际上 IAR 自带了一个驱动在 plugins\flashloader 和 plugins\debugger 里。如果这些文件被安全软件误删了Open 工程没问题但进入 Debug 时会提示找不到调试器。解决办法是重新修复安装 IAR让安装程序把插件补全。2. 工程文件后缀与打开方式先看懂再双击“新安装 IAR 打开现有工程”这个动作听起来就是在文件管理里双击但不同后缀的文件打开后的行为完全不一样。IAR 的工程体系比 Keil 复杂一点既有工作区文件也有项目文件还有调试配置文件。2.1 .eww、.ewp、.ewd 分别是什么角色如果你用文件资源管理器看现有工程会看到一堆 .eww、.ewp、.ewd、.icf、.dep 这类文件。我来逐个说清各自的职责.eww 是工作区文件Embedded Workbench Workspace一个工程组的所有项目都由它组织起来。一个完整的应用经常包含 bootloader、app、甚至 PC 端模拟器几个工程.eww 就是它们的“总指挥”。双击 .ewwIAR 会还原整个已完成布局的工作区。.ewp 是项目文件Embedded Workbench Project它保存的是编译选项、链接选项、调试设置。可以理解为这个项目的“灵魂”没有 .ewp只有源代码是组不成 IAR 工程的。.ewd 是调试配置相关文件包含调试器类型、Flash 下载算法、断点设置等和 Eclipse 的 .launch 文件类似。打开现有工程我推荐先打开 .eww再在 Workspace 窗口里切换当前激活的工程。除非你只需要临时看一个独立项目那可以直接打开 .ewp。这里有个实操细节IAR 会缓存 .eww 里每个项目的位置信息。如果同事发给你的压缩包里包含了 .eww、.ewp但文件路径全变了IAR 打开 .eww 时可能找不到它内部引用的 .ewp 路径。这时候你会看到 Workspace 窗口里项目名字后面带个感叹号双击提示找不到文件。处理方法是右键移除失效项目再右键 Add Existing Project 重新定位 .ewp注意不要直接改动 .eww 里的相对路径容易把项目引用关系搞乱。2.2 为什么直接双击工程会“没反应”新装 IAR 后有两类“没反应”很常见一类是双击 .ewp 后IAR 没有加载工程而是启动了 IDE 的欢迎页另一类是打开了工程但工具栏、文件树都是空的。前者的原因一般是文件关联没有正确注册。IAR 在首次安装时会注册 .eww 和 .ewp 的默认打开方式但如果电脑里同时装了多个版本的 IAR双击文件时系统可能用旧版本打开或者干脆找不到关联。我处理过一个案例用户装了 8.50 和 9.30 两个版本双击 .eww 时老版本 IAR 被唤起结果老版本不支持新版工程格式提示工程文件“too new”。解决方案很简单右键 - 打开方式 - 选择目标版本 IAR 的可执行文件通常路径是 C:\Program Files\IAR Systems\Embedded Workbench x.x\common\bin\IarIdePm.exe并勾选“始终使用此应用”。后者的原因是工作区布局的问题特别是从版本控制工具更新后Workspace 窗口可能被隐藏了。可以通过菜单 View - Workspace 打开或者按快捷键 AltF11。这一招看着基础但解决过不少“误以为工程没打开”的求助。2.3 路径问题绝对路径与相对路径的坑打开现有工程后编译报告找不到头文件十次里有七次是路径问题。原因在于 IAR 工程里的 include 路径和源文件路径有两种存储方式绝对路径和相对路径。绝对路径会记录成C:\Users\zhang\Desktop\stm32_project\Inc这种。一旦工程挪到别的机器或别的目录这些路径就失效了。相对路径则基于 .ewp 文件所在目录去解析比如$PROJ_DIR$\Inc这种就不会因为工程整体搬迁而出问题。检查和修改方法Project - Options - C/C Compiler - Preprocessor在 Additional include directories 里看路径格式。凡是带$PROJ_DIR$、$TOOLKIT_DIR$这种变量的就是安全的直接写死盘符的就要小心。我自己的习惯是拿到一个新工程先把 Additional include directories 里所有绝对路径统一改成$PROJ_DIR$开头的相对路径。顺手还要检查 Preprocessor 选项卡里的 defines比如 STM32F103xB 这个宏定义如果不一致会导致启动文件或者标准外设库头文件选择错误。路径问题的另一个高发区是 linker 的配置文件 .icf如果 .icf 也在工程目录外同样要改成相对路径或者复制一份放进工程目录。改完路径立刻执行一次 CleanProject - Clean再做一次全量编译避免 IAR 的增量编译缓存误导你。3. 从 Keil 工程迁移到 IAR 的完整实操现实中很多“现有工程”并不是 IAR 工程而是 Keil 工程。团队里有人用 Keil有人用 IAR交接时候经常直接把 .uvprojx 发给对方然后问“怎么 IAR 打不开”——答案是IAR 确实不直接打开 .uvprojx你需要做一次人工移植。我把这个流程拆解一下。3.1 正确的新建 IAR 工程姿势先把结论放前面IAR 没有“一键从 Keil 转 IAR”的工具老版本有过一个 Convert to IAR 插件但早已停止维护新版本里已经找不到。所以拿到 Keil 工程后标准做法是“新建 IAR 工程手动重挂源码和配置”。新建步骤按这个顺序来做创建工程目录结构建议包含 Core、Drivers、App、MDK、EWARM或 User等子文件夹保持源代码一个目录IAR 的 .eww、.ewp 独立放一个目录。打开 IAR菜单 Project - Create New Project选择 Empty project。保存到目标目录下文件名建议用项目名.ewp。右键工程名 - Add - Add Group建立与源码目录对应的虚拟分组比如 Startup、Drivers、App。在每个 Group 下 Add Files把 Keil 工程里对应的 .c/.s 文件加进来。注意启动文件必须使用 IAR 版本的Keil 的 startup_stm32f103xb.s 不能在 IAR 里直接用。IAR for ARM 的启动文件通常是工程模板自动生成的或在 CMSIS 目录下可以找到 startup_stm32f103xb.s 的 IAR 版本。配置 Project - Options重点设置 General Options、C/C Compiler、Linker。这个流程里有一步特别容易错Keil 的启动文件startup_stm32f103xb.s不能直接加入 IAR 工程。两者的汇编语法、段名规范不同Keil 启动文件在 IAR 里会报一大堆 syntax error。解决办法是在 IAR 的 CMSIS/Device/ST/STM32F1xx/Source/Templates/arm 目录下找到 IAR 版启动文件或者找 IAR 安装包内置的模板。3.2 头文件路径、宏定义与启动文件的三件套移植Keil工程时有一个很容易漏掉的三件套预定义宏、头文件路径、启动文件。三者必须配套否则编译错误五花八门。先看预定义宏。Keil 工程里 Options for Target - C/C 中Define 一栏通常写着USE_STDPERIPH_DRIVER, STM32F103xB。IAR 里对应的位置是 Project - Options - C/C Compiler - Preprocessor - Defined symbols。这个宏的作用很大USE_STDPERIPH_DRIVER让标准外设库把 stm32f10x_conf.h 包含进来STM32F103xB则决定了芯片存储器容量级别的宏开关。漏掉哪一个都会引起“fatal error: stm32f10x.h: No such file or directory”或外设寄存器定义缺失。再看头文件路径。Keil 的 Include Paths 里通常有LK_StdPeriph_Driver/incCMSIS/coreCMSIS/deviceUser转成 IAR 时在 Additional include directories 里逐条添加路径最好用相对路径格式参考 2.3 节的做法。启动文件这块除了选对 IAR 版之外还要确认工程里是否重复引用了 system_stm32f1xx.c 和 core_cm3.c。有些 Keil 工程会在多种构建配置里重复包含 CMSIS 文件IAR 对符号重定义检查比较严格会直接报Error[Li005]: no definition for SystemInit或者 multiple definition。我的做法是只保留一份 CMSIS 文件SystemInit 函数体放在 system_stm32f103.c 里不要同时加入多个平台目录下的同名文件。3.3 FreeRTOS 在 STM32F103C8T6 的 IAR 迁移要点接下来聊一个大热场景FreeRTOS 移植。热词里专门有“freertos学习篇一:stm32f103c8t6下的移植,基于keil、iar开发环境”可见这是很多入门开发者的刚需。STM32F103C8T6 这块芯片资源非常紧张只有 64KB Flash 和 20KB RAM所以移植 FreeRTOS 时对内存和优化的把握要非常小心。IAR 工程和 Keil 工程的 FreeRTOS 移植差异主要体现在四个地方portable 层文件选择FreeRTOS 在 IAR/ARM_CM3 目录下对应的是 port.c、portmacro.h、portASM.s注意是 .s 汇编文件不是 Keil 用的 .S 大写。这个目录专门给 IAR 用不能直接用 RVDS 目录下的文件。很多朋友移植失败就是因为把 Keil 的 portable/RVDS/ARM_CM3 下面的 port 文件拉进来编译汇编指令和段定义不兼容编译直接挂掉。中断处理函数重定义FreeRTOS 在 Cortex-M3 上通过vPortSVCHandler、xPortPendSVHandler、xPortSysTickHandler三个函数接管 SVC、PendSV、SysTick 中断。在 IAR 下这三个函数用__asm或普通 C 函数实现启动文件和中断向量表里不能同时保留原来的SVC_Handler、PendSV_Handler、SysTick_Handler。否则链接时符号冲突或者系统跑起来的中断入口根本不是 FreeRTOS 期望的那个。我的习惯是直接把启动文件里的三个中断向量名称改成 FreeRTOS 的 handler 名或者在 FreeRTOSConfig.h 里根据条件宏跳过这三个中断的默认定义。内存堆的选择RAM 只有 20KB而 FreeRTOS 默认的 heap_4.c 会从静态数组里切内存。STM32F103C8T6 的场景下我一般直接使用 heap_4.c但在 FreeRTOSConfig.h 里把configTOTAL_HEAP_SIZE调整为 8KB 或 6KB给任务栈和其他应用代码留足余量。优化选项设置IAR 在优化上比较激进默认的 High 优化有时会破坏 FreeRTOS 里某些依赖内存屏障和 volatile 的临界区代码。我的做法是先把 Optimization 设为 None 或 Low确保移植后的系统能稳定运行再逐步尝试开高优化并且开优化后要跑一轮完整的任务调度和中断响应测试。这一步踩坑的人很多连续出现 HardFault 往往就是优化开太高了。4. 打开后最常见的报错与排查实录前面铺垫了环境和工程文件的逻辑这一节才是很多人真正想看的报错怎么解。我把高频出现的几类错误逐个拆开讲。4.1 LMS001 许可证错误的全套排查思路开头已经提过 LMS001 的部分原因这里把完整的排查顺序列出来作为一条可执行的套路。第一步查看许可证管理器状态。打开 IAR License Manager看左下角的 Current license 区域如果显示 Activated 或 Licensed说明本机授权正常如果显示 Evaluation expired 或者没有条目说明许可证没装上。第二步确定许可证类型。公司电脑进入了域环境或者换了登录用户后许可证不一定会跟着迁移。IAR 的节点锁定许可证是和当前 Windows 用户关联的所以“同一台电脑别人能用我双击就报 LMS001”是完全可能发生的。解决方案是让公司管理员把 License 文件重新导入到你的用户下。第三步检查时间问题。IAR 的许可证授权有时间范围如果系统时间被改快或改慢会触发校验失败。我处理过一个案例某台测试机为了跑业务把系统时间往前调了几个月打开 IAR 就报 LMS001。把时间同步回来后问题消失。所以遇到 LMS001先看一眼右下角系统时间这个检查成本最低。第四步修复安装。如果以上都确认没问题最后尝试控制面板里卸载 IAR然后重新安装。重装时选择 Repair 模式也可以。很多 LMS001 在重装之后会消失原因是安装过程会重新生成 license manager 的配置文件。这里有一个实战心得不要把 U 盘或网盘里的 License 文件放桌面让杀毒软件扫。有几次 LMS001 是因为杀毒软件把 .lic 文件隔离导致的。激活完许可证后可以让杀毒软件白名单 IAR 安装目录和 License 默认目录。4.2 “The generation feature is not of version”错误热词里有一条是“iar the generation feature is not of version 18”。这个错误我没记错的话主要出现在有人用新版 IAR 打开老版本创建的项目或者反过来用老版本 IAR 打开新版本项目时。IAR 的工程文件格式和中间文件格式有版本要求。比如你用 IAR 8.40 建的项目用了较新的工程特性再用老版本打开时就会提示 generation feature 版本不一致。解决办法有两个方向如果你是老版本 IAR 用户收到一个新版本创建的工程让发送方在你的版本下重新生成一份 .ewp或者直接按第 3 节的方式新建 IAR 工程并手动添加源码/配置。如果你是新版本 IAR打开老工程IAR 一般会在打开时提示是否转换。确认转换后工程文件会被升级但要注意升级后最好立刻另存一份备份。因为 IAR 的工程文件一旦升到新版本再拿回旧版本打开就会提示“cannot open project file”相当于永久升级了。团队协作时这个现象很容易引发“谁把工程版本抬高了”的纠纷所以转换前一定要备份。顺带说一句IAR 的中间文件目录一般在工程目录下的 Debug/ 或 Release/也可能引发类似问题。如果工程文件本身版本没问题但 Debug 目录里的 .dep 和 .o 文件还是旧的请执行 Project - Clean再 Project - Make。这个操作能清除大量“幽灵错误”。4.3 内存布局相关报错__section(.heap) 和 .icf 文件热词里有一段很典型的代码uint8_t ucheap[ ] __section(.heap) {0};这行代码出现在不少例程里作用是定义一个名为 .heap 的自定义段。在 Keil 里可能没这么多人用但在 IAR 里.icf链接脚本中的段定义决定了这个变量能放在哪里、能有多大。如果你打开工程后编译器不认__section(.heap)或链接报unable to find the section heap基本可以断定三件事之一出了问题你没有定义 .heap 段或 .icf 链接脚本里没有对应的 if 规则。你用的 IAR 版本太老不支持__section()这种语法。IAR 较新版本里建议用#pragma section.heap或__attribute__((section(.heap)))方式老的__section是兼容语法但在高版本里偶尔会被警告。你把它定义到了错误的源文件里导致和 IAR 库的堆初始化冲突比如同时定义了__heap_start、__heap_end符号。关于 .icf 文件我多说两句因为这是新安装 IAR 打开现有工程后编译失败的高频原因之一。IAR 不像 Keil 那样在界面上告诉你“ROM 起始地址、RAM 起始地址”去配置而是统一交给 .icf 文件控制。如果你拿到的工程里 .icf 路径是绝对路径而本机根本没有这个文件链接阶段会报错Fatal Error[Lc002]: could not open file C:\some\path\stm32f103c8t6.icf这时你要去 .icf 所在位置找它。通常 ST 官方库或者 IAR 自带的模板里都有一个 .icf。如果实在找不到可以用 IAR 内置的模板生成一个。Project - Options - Linker - Config在 Override default 里勾选后手动选择 .icf 文件路径。对于 STM32F103C8T6直接选择$INSTALL_DIR$\arm\config\linker\ST\stm32f103c8_flash.icf也行但建议还是把 .icf 复制到工程目录下然后用$PROJ_DIR$相对路径引用方便跨机器复用。4.4 常见问题速查表把前面提到的和没展开的常见问题整理成一张表遇到问题先查表。现象可能原因建议处理New project 后 Device 下拉空器件支持包未安装Tools - Device 里检查下载安装对应 Device PackLMS001 许可证错误许可证未激活/绑定失效/时间错误用 IAR License Manager 重新导入检查时间The generation feature is not of version 18工程版本与 IAR 版本不匹配备份后转换工程或手动重建工程双击 .eww 没反应文件关联被旧版本抢占右键打开方式选择目标版本 IarIdePm.exe编译找不到头文件Include path 绝对路径失效改为$PROJ_DIR$相对路径startup 文件语法错误Keil 启动文件被误加入换成 IAR 版启动文件链接报找不到 .icf.icf 绝对路径缺失复制 .icf 到工程目录并重新指定链接报 heap 相关错误.heap 段与库堆冲突检查__section(.heap)写法调整 .icfFreeRTOS 运行后 HardFault优化等级过高或 port 文件错误把优化降到 Low检查 portable 目录烧录时找不到调试器插件/驱动缺失修复安装 IAR确认调试器驱动这张表本质是排查思路的浓缩版本真正用的时候还是要结合具体错误行。5. 工程配置的三个高频细节时钟、启动文件与烧录工程能编译过了很多人以为就完事了但实际运行起来可能还有问题。时钟配不对、烧录配置不对、启动文件里的堆栈大小不对都会让“打开现有工程”变成“打开了但跑不起来”。最后这三个细节我想单独拎出来说。5.1 系统时钟配置与外部晶振检查IAR 本身不负责配置时钟时钟靠 system_stm32f1xx.c 里的 SystemInit 和启动文件里的SystemInit调用实现。但新装 IAR 后打开现有工程如果你发现串口波特率是乱的、SysTick 定时不准八成是以下原因工程里的系统时钟宏STM32F103xB与实际芯片不一致导致 SystemInit 里选择的 PLL 倍频和外部晶振频率不匹配。板子是 8MHz 外部晶振但代码里默认按 25MHz 配置或者相反。休眠或低功耗例程里关闭了外部晶振重新打开时没等 HSE Ready 就切换时钟。排查方法很简单找到 system_stm32f1xx.c 里PLL_M宏通常 8MHz 晶振配#define PLL_M 8在 HSE_VALUE 里确认外部晶振频率然后再编译并运行。对于开发板这个值一般写得很清楚但有些非标准板子就需要用示波器实测晶振频率。IAR 这个环境本身没有时钟配置向导所以时钟问题几乎都出在系统文件和宏定义上排查难度不大。5.2 启动文件与堆栈大小设置IAR 的启动文件里一般会有栈大小的定义。比如 stm32 工程的 .icf 里会写define symbol __ICFEDIT_size_cstack__ 0x800;这代表系统堆栈是 2KB。如果你打开现有工程后容易跑飞、HardFault多半是任务栈申请较大、系统堆栈又不够。调整时不要只动启动文件里的栈大小还要在 .icf 里同步改__ICFEDIT_size_heap__和__ICFEDIT_size_cstack__否则启动文件的栈定义和链接脚本不一致IAR 会以链接脚本为准造成启动文件里的栈区间白设置。我推荐的做法是写一个小的内存自测任务在 main 函数早期打印 heap 和 stack 的地址差确认 RAM 布局没有重叠。如果工程里有多个分区比如 bootloader 和 app还要留意 .icf 里的 RAM 起始地址是否被刻意偏移了避免加载 app 时把 bootloader 区域覆盖掉。5.3 烧录器配置与下载算法打开工程顺利编译后按下 Download and Debug 按钮没有反应或者提示连接失败这也是新装环境的高频问题。原因一般出在 Debugger 设备选择上。Project - Options - Debugger 里默认是 simulator你要改成实际硬件调试器比如 J-Link 或 ST-Link。接着在 Debugger - Setup 的 Device 下拉框里确认选择了目标芯片型号这与 1.2 节里的器件支持包是联动的。烧录器这块还有一个隐藏坑Flash 下载算法。IAR 在调试时会把代码下载到 Flash真正执行下载依赖 Flash loader。如果器件支持包缺失或者 Flash loader 路径不对下载阶段会提示无法访问 Flash。这类问题在 STM32F103C8T6 上尤其容易遇到因为它是 64KB 小容量 Flash部分老版本 IAR 的默认 loader 是按 128KB 型号做的。解决方案同样是更新器件支持包或者在 Debugger - Flash Download 里手动指定 size 为 64KB。另外提醒一下从 8.x 升到 9.x 的用户新版本 IAR 对 J-Link 的版本有要求如果 J-Link 固件太旧IAR 会提示“The connected probe is obsolete”这时需要先升级 J-Link 驱动固件再进 IAR。6. 收尾之前再分享几个实战心得说点工具选择的个人体会。IAR 的工程管理和 Keil 有本质差别它是“工作区 项目”嵌套结构路径变量体系也更完善。新安装 IAR 打开现有工程时我的习惯是先确认许可证再确认器件包再打开 .eww最后才是编译。这个顺序让我少踩了很多“看起来是代码问题、实际是环境问题”的坑。还有一个心得是关于工程备份的。IAR 的工程文件是文本格式但它会把很多配置写成二进制或半二进制格式。如果你们团队有多个人同时维护一个工程建议在版本库里同时保留 .eww、.ewp、.icf 以及 Debug 之外的源码不要把 Debug 目录和 intermediate 文件提交进去。否则换机器打开工程后IAR 会用旧的中间文件干扰增量编译出现一些“Clean 之后就好了”的玄学问题。最后补一点如果公司已经购买了 IAR 并在官网有账户下载安装包也别随便从第三方网盘拿。官网下载的安装包版本清晰器件包和 License 管理也更规范。新装完 IAR 后第一件事先打开 Help - About 确认主版本号再去官网下载对应版本的 Device Support Pack这个习惯能省掉后面大半的报错时间。