PG电子官方网站PG电子官方网站

Telink white logo with Telink word in small size

您现在使用 IE

我们建议您改用下列浏览器,以获得更好的体验。

点击下载:

Chrome

Firefox

Safari

Edge

Telink white logo with Telink word
Rotate your device top arrow

旋转设备

Rotate your device bottom arrow
Preloader image
正在加载
Telink white logo with Telink word in small size

从Keil MDK到IAR EWARM:通过工程迁移实现项目资产的更好管理

PG电子官方网站 | 博客见解

2025-09-10

【导语】随着嵌入式系统开发复杂度攀升,开发人员对集成开发环境需求愈发多样。Keil MDK与IAR EWARM是常见的Arm Cortex-M MCU开发IDE,因IAR EWARM对多核架构的广泛支持,不少用户选择从Keil MDK迁移至此,但迁移面临诸多问题。本文将详细介绍迁移步骤,并列举注意事项,助力开发者高效完成迁移,快速适应新环境。

作者:夏青

 

随着嵌入式系统开发的复杂度不断提升,开发人员对集成开发环境(IDE)的需求也日益多样化。Keil MDK和IAR EWARM是市面上最常见的两款用于Arm Cortex-M MCU开发的集成开发环境。目前Keil MDK主要支持Arm Cortex-M,对于Arm Cortex-A和Cortex-R的开发,则需要借助Arm Development Studio的支持。而IAR EWARM作为一款功能强大的IDE,不仅支持Arm Cortex-M系列MCU,还扩展了对Cortex-A和Cortex-R处理器的支持。

随着行业发展和竞争加剧,一方面越来越多的芯片公司已经不满足仅提供竞争异常激烈的MCU产品,所以他们开始打造高性能的应用处理器或者MPU,或者高实时性的满足功能安全要求的芯片,他们的客户同样也可能在进行着技术升级。所以,越来越多的工程师希望把不同的工程建在同一套IDE上,以实现资产的最优管理和实现复用开发。对于需要统一开发环境或涉及多核架构(如Cortex-A/R)的项目,越来越多的用户选择从Keil MDK迁移到IAR EWARM。这就会面临着需要将之前的Keil MDK工程迁移到IAR EWARM的问题。本文将介绍如何高效完成这一迁移,帮助开发者快速适应新环境。

准备工作

  • IAR EWARM集成开发环境
  • 对应Arm Cortex-M MCU的IAR EWARM支持包:如果对应MCU已经在IAR EWARM的官方支持列表内,则对应MCU的支持包也会在IAR EWARM的安装包内;若未在,则需要联系对应MCU厂家提供(gōng)IAR EWARM支(zhī)持(chí)包(bāo)(绝(jué)大(dà)多(duō)数(shù)厂(chǎng)家(jiā)都(dōu)会(huì)同(tóng)时(shí)提(tí)供(gōng)Keil MDK和(hé)IAR EWARM的(de)支(zhī)持(chí)包(bāo))

将(jiāng)Keil MDK工(gōng)程(chéng)迁(qiān)移(yí)到(dào)IAR EWARM

下(xià)面(miàn)介(jiè)绍(shào)将(jiāng)Keil MDK工(gōng)程(chéng)迁(qiān)移(yí)到(dào)IAR EWARM的(de)具(jù)体(tǐ)步(bù)骤(zhòu):

安(ān)装(zhuāng)IAR EWARM:安(ān)装(zhuāng)时(shí)参(cān)考(kǎo)对(duì)应(yīng)的(de)安(ān)装(zhuāng)说(shuō)明(míng)进(jìn)行(xíng)操(cāo)作(zuò)即(jí)可(kě)。

转换工程:利用IAR Project Converter工具将Keil MDK工程转换成IAR EWARM工程

打开IAR EWARM,Help > Migration > Keil μVision Migration Guide打开对应的说明文档:

 

Tools > Project Converter打开IAR Project Converter,对应的Project type选择Keil μVision5 for Arm,本文以STM32F405的GPIO示例工程为例,点击Execute:

 

在弹出的对话框中选择目标工程路径,以GPIO示例工程下面的EWARM为例,点击OK:

 

对应Report会提示转换的IAR工程信息,点击OK:

 

在对话框中点击Close完成工程转换:

 

编译调试:在IAR EWARM中编译调试转换的工程

File > Open Workspace…打开转换的工程:

 

选择前面转换好的工程,点击Open:

 

出现下面的提示对话框,点击Yes:

 

右击工程选择Options(或者Project > Options)打开工程选项配置:

 

在General Options > Target > Device选择对应的MCU型号(以STM32F405RG为例):

 

在General Options > Target > 32-bit选择对应的FPU配置(以STM32F405RG包含的VFPv4 single precision为例):

在General Options > Linker > Output > Out filename中将对应的输出文件名字改为$PROJ_FNAME$($PROJ_FNAME$代表工程名):

 

此时如果编译(右击工程选择Make或者Project > Make):

 

正常情况下汇编启动文件会报错:

 

因为Keil MDK和IAR EWARM的汇编启动代码格式不一样,需要将Keil MDK中的汇编启动代码换成IAR EWARM的汇编启动代码(绝大多数MCU厂家会同时提供Keil MDK和IAR EWARM的汇编启动代码)。如果没有现成的IAR EWARM汇编启动代码,可以参考IAR EWARM中相同Cortex-M MCU的汇编启动代码,然后将Keil MDK汇编启动代码中对应的中断处理函数适配到IAR EWARM当中。

修改汇编启动代码之后,重新编译(右击工程选择Rebuild All或者Project > Rebuild All):

 

正常情况下工程编译成功(Build窗口显示Total number of errors: 0, Build succeeded说明编译成功):

 

编译成功之后就可以进行下载调试了,右击工程选择Options(或者Project > Options)打开工程选项配置,Debugger > Setup > Driver选择对应的硬件仿真器(以I-jet为例):

 

点(diǎn)击(jī)Download and Debug按钮或者Project > Download and Debug开始下载调试:

 

正常情况下应用程序会下载到目标系统,然后停在main函数(shù)入(rù)口(kǒu):

 

至(zhì)此(cǐ)将(jiāng)Keil MDK工(gōng)程(chéng)成(chéng)功(gōng)迁(qiān)移(yí)到(dào)IAR EWARM并(bìng)进(jìn)行编译、下载调试。

注意事项

上文以一个简单的GPIO示例工程介绍了如何将Keil MDK工程成功迁移到IAR EWARM并进行编译、下载调试。实际项目比GPIO示例工程要复杂得多,迁移过程可能会遇到其他一些问题,下面列举了一些注意事项:

printf函数重定向

Keil MDK里面printf函数通过fputc函数进行重定向,而新版本的IAR EWARM里(lǐ)面(miàn)printf函(hán)数(shù)通(tōng)过(guò)__write函(hán)数(shù)进(jìn)行(xíng)重(zhòng)定(dìng)向(xiàng)。

汇(huì)编(biān)代(dài)码(mǎ)

Keil MDK和(hé)IAR EWARM的(de)汇(huì)编(biān)代(dài)码(mǎ)格(gé)式(shì)不(bù)一(yī)样(yàng),虽(suī)然(rán)目(mù)前(qián)Cortex-M MCU的(de)大(dà)部(bù)分(fēn)代(dài)码(mǎ)是(shì)C/C++,但(dàn)是(shì)如(rú)果(guǒ)代(dài)码(mǎ)中(zhōng)使(shǐ)用(yòng)了(le)相(xiāng)关的(de)汇(huì)编(biān)代(dài)码(mǎ),在(zài)迁(qiān)移(yí)过(guò)程(chéng)中(zhōng)需(xū)要(yào)进(jìn)行(xíng)转(zhuǎn)换(huàn)(前面提到的启动代码就是一个示例)。更多关于Keil MDK和IAR EWARM的汇编代码格式,需要参考对应工具的汇编代码使用文档。

intrinsic函数

intrinsic函数是编译器提供的内部函数,通常来说不同编译器提供的intrinsic函数名字不一样。Arm Cortex-M MCU开发大部分会采用满足CMSIS标准的函数,如果使用了编译器的intrinsic函数,在迁移过程中需要适配(比如Keil MDK对应NOP指令的intrinsic函数是__nop,而IAR EWARM对应NOP指令的intrinsic函数是__no_operation)。更多关于intrinsic函数的信息,需要参考对应编译器的使用文档。

#pragma命令

#pragma命令用于控制编译器的特定行为,通常来说不同的编译器支持的#pragma命令不同,如果代码里面使用了#pragma命令,在迁移过程中需要适配。更多关于#pragma命令的信息,需要参考对应编译器的使用文档。

链接脚本文件

Keil MDK里面的(de)链接脚本文件采用的是分散加载文件(scatter-loading file, .sct)。IAR EWARM的链接脚本文件采用的是链接器配置文件(ilinker configuration file, .icf)。绝大多数MCU厂家会同时提供Keil MDK和IAR EWARM的链接脚本文件。但是如果有一些定制化的需求,那么需要用户修改对应的链接脚本文件。更多关于链接脚本文件的信息,需要参考对应编译器的使用文档。

工程目录

目前Keil MDK只支持一级目录,之前转换过来的IAR过程显示如下:

 

IAR EWARM支持多级目录,可以将上面的一级目录工程转换成下面多级目录工程:

 

总结

本文详细介绍了如何将Keil MDK工程迁移到IAR EWARM,帮助用户快速实现迁移,借助IAR Project Converter工具可以很方便地将Keil MDK工程转换成IAR EWARM工程,同时列举了在迁移过程中的一些注意事项。尽管过程中可能需手动调整部分配置,但IAR的多核支持与灵活性能为后续开发带来显著便利。若遇到问题,建议参考官方文档或社区论坛获取进一步支持。

联系我们

销售

技术支持

您还可以联系我们的销售代理

投资者关系