资讯详情

资讯详情

IAR Embedded Workbench安装实战:版本选择、许可证激活与FreeRTOS移植避坑指南

1. 我踩过的 IAR 版本坑先选对口再说安装当你准备开始安装 IAR 时很容易被满屏幕的下载链接搞晕。IAR Embedded Workbench 并不是一个通用的“IAR 软件”而是按芯片内核分成多个独立版本。很多人第一次安装 IAR下载了最新的 EWARM 却要给 CC2530 用装完打开工程一脸懵根本找不到芯片型号。这个坑我当年也踩过所以开头先把版本选择讲清楚比谈安装步骤更重要。1.1 IAR 不是“一个软件”而是一套按芯片定制的工具链IAR Embedded Workbench 这个名字看着像一个产品实际上它的每个安装包都是针对特定架构单独发布的。常见的有这么几种安装包名称目标芯片典型应用场景IAR Embedded Workbench for ARMEWARMSTM32、GD32、NXP 等 Cortex-M/R/A 系列通用 MCU 开发、RTOS 移植IAR Embedded Workbench for 8051EW8051CC2530、CC2430、STC 等 8051 内核ZigBee、蓝牙老方案、8 位机项目IAR Embedded Workbench for STM8STM8 全系列低成本工控、家电IAR Embedded Workbench for MSP430MSP430 系列低功耗仪表、传感器IAR Embedded Workbench for RISC-VRISC-V 内核 MCU新兴国产芯片、定制 SoC所以第一步是确定你的目标芯片属于哪种内核。如果做 STM32 项目装 EWARM如果手头是 TI 的 CC2530 做 ZigBee 协议栈就必须装 EW8051因为 TI 的 Z-Stack 官方只提供 IAR for 8051 的工程。反之用 EWARM 打开 Z-Stack 工程是打不开的这不是 IAR 的 bug而是你拿错了安装包。1.2 同系列还有版本兼容性问题选定大版本后小版本也不能乱来。同样是 EWARM8.x、9.x 的工程结构有差异老版本打开新工程会提示版本不兼容同样是 EW8051老项目可能停留在 7.x 或 8.20网上还经常看到 IAR 6.3 的 8051 开发环境这些版本之间不能随手互换。我见过一个比较典型的错误项目组同时维护两个产品一个用 CC2530一个用 STM32结果有人图省事在 EW8051 里硬建了一个 ARM 工程。最后报出一堆和编译器有关但完全看不懂的错误。正确做法是老项目原来用什么版本就继续用那个版本新项目再根据当前需求选较新的稳定版。装两个不同架构的 IAR 在同一台电脑上没问题但安装目录要分开路径中不要有中文或特殊字符。1.3 下载安装包时的检查清单IAR 官网下载需要注册账号且会根据你选择的架构和系统位数生成链接。如果你是从网盘或论坛拿到的安装包一定要看两个东西文件大小是否和官方一致以及是否有 README 说明对应的架构。有些网盘把 EWARM 和 EW8051 的压缩包打包在一起命名名字很像解压时容易搞混。另外IAR 新版安装包对操作系统有要求Windows 7 以下不建议硬装新版老版本倒是相对宽容。装之前把杀毒软件暂时退出某些安全软件会拦截安装程序写入注册表导致安装界面卡在 99% 或者装完无法启动。2 手把手安装下载、许可证、激活过程版本选对之后安装过程本身并不复杂但许可证激活是大多数人卡得最久的一关。下面按我自己的安装顺序拆开讲。2.1 安装向导的关键节点运行安装包后正常流程如下1. 选择安装语言推荐英文中文翻译不全反而容易误解 2. 勾选接受许可协议 3. 输入 License Key或选择 Evaluation 评估版 4. 选择安装目录例如 C:\Program Files\IAR Systems\ 5. 选择安装组件IDE、编译器、调试器、设备支持包 6. 点击 Install 安装 7. 安装完成后自动打开 IAR License Manager安装组件里有一个容易忽略的选项Device Support。同一个 EWARM 安装包会携带大量厂商芯片支持数据通常默认是全选。如果你只做 ST 芯片可以只保留 ST 相关部分节省磁盘空间也加快启动速度。但要注意如果后续要换其他厂牌芯片需要在控制面板里用 Modify 功能补装对应支持包否则新建工程时找不到型号。2.2 许可证激活的三种常见方式IAR 不是装完就能无限使用必须有一个合法的许可证。常见的授权方式有三种授权类型适用对象激活要点Evaluation 评估版个人学习、短期评估安装时选评估版期限 30 天代码优化等级受限Node-locked 单机版个人或公司单台电脑输入许可证 ID在线或离线激活绑定电脑硬件Floating 浮动版多人共享许可证服务器配置服务器地址客户端按需获取授权很多初学者在博客里看到的“iar密钥”其实指的就是许可证 ID 或激活码。正版用户在购买后会收到一个许可证 ID打开 IAR License Manager选择 Activate license输入 ID按提示完成激活。评估版则不需要 ID安装时直接选 Evaluation 即可。这里必须提醒一句网上那些“注册机”“补丁”能不碰就不碰。IAR 的许可证检查机制会验证 IDE 组件完整性和电脑硬件信息破解版经常出现编译几个小时后突然报 lms001 错误数据没保存就白干了。与其提心吊胆不如用官方 30 天评估版解决眼前学习需求正式项目再联系原厂或代理商购买授权。2.3 激活完成后的冒烟测试许可证激活后不要急着打开别人给你的工程。先建一个空工程验证工具链本身没有问题。打开 IAR执行 Project - Create New Project选择 C/C for ARM新建一个 main.c#include stdint.h int main(void) { while(1); return 0; }按 F7 编译。如果空工程能编译通过说明安装和激活都成功了后续项目报错就和工具链环境无关可以集中精力查代码。如果这步就报fatal error[lms001]那问题一定出在许可证或安装组件上此时再排查工程配置毫无意义。3 安装只是开始新建工程、启动文件和烧录配置IAR 安装成功不等于你会用 IAR。很多人在这个阶段卡住是因为习惯 Keil 的自动工程模板不适应 IAR 需要手动配置的环境。下面把新建工程到烧录的关键步骤串一遍。3.1 从工作区到工程的完整创建流程IAR 的逻辑是先建工作区Workspace再在同一个工作区里创建多个工程Project。不同芯片的工程可以放在同一个工作区里切换起来很方便。具体流程1. File - New - Workspace 2. Project - Create New Project 3. 选择 Empty project工具链选 C/C for ARM 4. 保存为 .ewp 文件 5. 右键工程 - Add - Add New Files添加 main.c、启动文件、驱动源文件 6. 右键工程 - Options配置芯片型号和头文件路径工程建立后第一件事是设置目标芯片。在 General Options - Target 里选择器件型号比如 STM32F103C8。这一步会影响编译器默认的架构选项、链接脚本和启动文件选择。如果你选错型号即使代码编译通过烧录后运行也可能异常因为寄存器映射和中断向量表不对。3.2 启动文件在 IAR 工程中的角色IAR 和 Keil 一样需要启动文件来初始化堆栈指针、中断向量表以及完成 C 语言运行环境的初始化。不同点是IAR 的部分启动文件由编译器库隐式提供而很多标准外设库工程仍需要你手动添加具体的启动汇编文件。以 STM32F103 标准库为例启动文件通常是startup_stm32f10x_md.s中等容量需要把它加入工程。在 IAR 里添加.s文件时在工程选项里确认它的文件类型是 Assembly不要误报错。启动文件缺失最典型的错误是编译时报找不到__iar_program_start或Reset_Handler那时你要回来看这里。3.3 烧录前必须确认的调试器配置代码编译通过后点下载没反应也是很常见的问题。主要原因是 IAR 默认调试器是 Simulator不连接真实硬件。你需要进入 Project - Options - Debugger在 Setup 里把 Driver 改为实际的仿真器比如 ST-Link 或 J-Link。如果使用 J-Link还要到 Debugger - J-Link/J-Trace 里确认接口是 SWD 还是 JTAG以及目标速度。另一个容易被忽略的地方是 Flash 下载算法。IAR 一般会根据芯片型号自动选择但如果用的是扩展外部 Flash或者芯片型号选错会提示Fatal error: Failed to connect或Cannot access target。解决方式是检查 Device 型号是否完全匹配必要时手动在 Flash 设置里添加对应外部 Flash 加载算法。4 三个高频报错排查记录安装了 IAR、跑起了工程后你大概率会遇到几个高频报错。我把它们单独拎出来给出完整排查链路遇到问题可以直接照着查。4.1 fatal error[lms001] 的完整排查链路报错信息一般是Fatal error[Lms001]: License check failed. Use the IAR License Manager to reactivate or repair the license.这个错误的核心就是许可证检查失败。但它背后的原因远不止“没激活”一种我建议按以下顺序排查打开“IAR License Manager”看许可证状态。如果显示 Evaluation 且已过期那就要换新的评估 ID 或购买正式授权检查系统时间。IAR 许可证校验会参考本地时间如果时间被调回几个月前任何许可证都可能校验失败用管理员身份运行 IAR License Manager。尤其是公司电脑开启了 UAC 或域管理普通权限可能读不到许可证文件检查电脑硬件变化。Node-locked 许可证和主板、网卡信息绑定换过主板或者开启了虚拟网卡可能导致原有授权失效检查杀毒软件隔离区。有些安全软件会把 IAR 的许可证注册文件当病毒清掉恢复后重新激活一次。如果以上都排查完还报错可以卸载 IAR删除残留目录后重装。卸载时记得备份你自己的工程不要放在安装目录下。4.2 “The generation feature is not of version 18”是什么原因这个报错不像 lms001 那么常见但一旦遇到就很容易懵。它的字面意思是当前 IAR 版本里的某个“生成特性”版本号低于工程要求的 18。常见原因是高版本 IAR 创建的工程文件被放到低版本 IAR 中打开。比如你用 9.50.2 版本创建了工程发给同事同事电脑装的却是 8.32 版本打开时就会出现版本不匹配问题。解决办法有三个升级 IAR 版本到工程要求的版本最省事让工程提供者导出较低版本兼容的工程文件用文本编辑器打开.ewp把其中的版本号改低但这种方法副作用很大不推荐新手尝试。还有一种类似场景同一个 IAR 版本但安装时没有装全支持组件。这时报错会指向某个器件支持包缺失。回到安装向导选择 Modify勾选缺失的 Device Support问题即可解决。4.3 编译好消息下载后跑不起来的链接段问题还有一种情况编译通过、烧录成功但程序运行不正常。这种情况很多时候和链接脚本.icf有关尤其是涉及堆和栈的配置。许多人在移植 FreeRTOS 时会在代码里这样定义堆数组uint8_t ucHeap[ configTOTAL_HEAP_SIZE ] __section(.heap) { 0 };这行代码的意思是让ucHeap数组放到名为.heap的链接段中而不是默认的.bss段。这样做的目的是把 FreeRTOS 堆单独划分到 RAM 中一个固定区域便于观察内存使用也让编译器在链接时能自动检查是否超出了 RAM 空间。问题在于如果你在.icf文件里没有定义对应的HEAPblock编译器会忽略或乱放。在 IAR 中heap 区域的典型定义是define block HEAP with size 4K, alignment 8 { }; place in RAM with { block HEAP };一定要保证.icf里的 block 名称和代码里的__section(.heap)对应起来。检查方法编译后打开.map文件搜索.heap看它被放置的位置和大小是否正确。如果发现数组放到了.bss或地址超出 RAM 范围优先检查.icf文件。5 从安装到实战STM32F103C8T6 上移植 FreeRTOS 的准备思路IAR 装好之后很多人会走向下一步在小型 MCU 上跑实时操作系统。最经典的就是在 STM32F103C8T6 上移植 FreeRTOS。这一节我讲与 IAR 工具链强相关的那部分毕竟“移植”本身的核心是配置和链接脚本。5.1 用官方 Demo 还是手动移植FreeRTOS 官方源码目录里通常会有一个Demo/CORTEX_STM32F103_IAR的示例工程。如果你的 IAR 版本和示例要求版本相差不大直接打开这个工程是最快的路线。打开后要做三件事修改 Device 型号为 STM32F103C8确认头文件路径都指向本机 FreeRTOS 源码目录重新编译如果报路径错误逐个修正。如果你更想手动移植流程也不复杂。在 IAR 工程中加入以下目录FreeRTOS/Source/include FreeRTOS/Source/portable/IAR/ARM_CM3 FreeRTOS/Source然后把heap_4.c加入工程再到FreeRTOSConfig.h中配置configTOTAL_HEAP_SIZE和configCPU_CLOCK_HZ。注意 M3 内核要选portable/IAR/ARM_CM3下的 port 文件不要选 GCC 版的 port否则编译器不兼容。5.2 内存布局和 FreeRTOS 堆大小的权衡STM32F103C8T6 只有 20KB RAM所以 IAR 的链接脚本里对 RAM 的划分要精打细算。.icf里默认会留一部分给CSTACK也就是主程序调用栈。你还得在 RAM 中留出空间给 FreeRTOS 堆。我通常这样配置区域大小说明CSTACK2KB主栈包括中断和 main 调用HEAP8KBFreeRTOS 的 ucHeap任务栈从这里分配全局变量和其他剩余空间大约 10KB足够小型应用如果configTOTAL_HEAP_SIZE设得太大任务创建、信号量分配都会失败设得太小又创建不了几个任务。建议先按 8KB 起步用.map文件看实际 RAM 使用率再微调。5.3 IAR 下移植 RT-Thread 时容易忽略的差异在 IAR 中移植 RT-Thread和 FreeRTOS 的整体思路类似但有一点尤其重要链接脚本。RT-Thread 的 BSP 工程通常自带.icf或基于 Keil 的分散加载文件如果你从 Keil 工程转 IAR必须在.icf里正确划分线程栈空间。RT-Thread 主要使用main thread stack这个栈在启动代码中定义大小一般由 BSP 里的宏决定。如果 IAR 的CSTACK设置太小系统初始化时可能直接进 hard fault。另一个差异是 GCC 风格属性比如__attribute__((used))在 IAR 里不总是被识别你需要改成 IAR 的__root或#pragma required。遇到类似“undefined symbol”的报错先检查是不是属性写法不兼容。6 冷门但好用的扩展和与 Keil 的取舍关于 IAR 的使用有几个扩展能力容易被忽视比如插件、GD Addon 等。另外很多人在 IAR 和 Keil 之间反复横跳我根据自己的经验也给出一些参考。6.1 IAR Plugins 是干什么的IAR 的插件体系在 Tools 菜单下常用功能包括集成版本管理客户端Git/SVN、运行外部工具、生成 bin/hex、调用批处理脚本、格式化代码等。它不是一个单一功能而是一个可扩展框架。我实际用得比较多的是“外部工具插件”把编译、固件合成、上传一次性串起来。比如在 Tools - Configure Tools 里新建一个工具命令行执行打包脚本这样每次点一下按钮就完成整个构建流程比手动打开命令行舒服得多。如果你刚开始接触不需要深入研究插件先把编译链路弄通之后想自动化再来看这里。6.2 IAR GD Addon 是干嘛的什么时候用GD Addon 一般指的是 IAR 的 GDB 调试桥接插件。少数第三方调试器只提供 GDB Server并不直接提供 IAR 原生的 C-SPY 驱动。此时通过 GD Addon 可以让 IAR 连接 GDB Server继续使用 IAR 的调试界面来读写寄存器、单步执行、查看变量。普通开发者在 STM32 上用的 ST-Link/J-Link 都不需要 GD Addon因为官方已经写好了原生驱动。但当你使用一些国产或小众调试器时厂商给你的资料里如果提到 GDB 接口就可能需要配置 GD Addon。配置位置在 Project - Options - Debugger - GDB Server填入调试器的 IP 地址和端口即可。这部分不常用但知道有这回事遇到相关硬件时不会无从下手。6.3 和 Keil 对比我为什么依然推荐学习 IARKeil 上手快工程模板齐全中文资料多非常适合新手。但 IAR 的编译优化能力整体比 Keil 更强尤其在做低功耗项目、内存带宽有限的项目时IAR 生成的代码密度通常更优。IAR 对编译告警的控制也更细很多潜在的类型不匹配问题在 Keil 里只是警告在 IAR 里直接报错逼你写出更规范的代码。另一个现实因素是很多生态链产品只支持 IAR比如 TI 的 Z-Stack 老版本只提供 IAR 工程一些芯片原厂的协议栈和正式 SDK 也只给 IAR 版本。只学 Keil遇到这类项目就只能干瞪眼。所以我的建议是用 Keil 入门没问题但 IAR 至少要会看工程、会编译、会配调试器关键时刻用得上。最后一点私货回到 IAR 安装这个最初的话题我想说很多人把“安装 IAR”想得太重又把“没有 license”想得太无解。实际上你用官方评估版就能把学习流程完整跑一遍足够让你判断这个工具适不适合自己等真做项目时再考虑购买授权。我自己的习惯是装好 IAR 后第一件事不是测试 license而是先建一个空工程、点亮一颗 LED、跑一次调试。这套流程能跑通之后不管是移植 FreeRTOS 还是接手别人的老工程心里都有底。版本、许可证、启动文件、链接脚本这些坑踩过一次以后就会格外注意。希望这篇偏经验的内容能让你把 IAR 安装这条路走得比我当年顺畅一些。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →