——工业智能全场景解决方案专家——工业智能全场景解决方案专家

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

发布时间2025-09-10 14:30:24
分享:

【导语】随着嵌入式开发复杂度攀升,开发者对IDE需求日益多样。Keil MDK与IAR EWARM是Arm Cortex-M MCU开发的常见IDE,其中IAR EWARM对多核架构支持更优,吸引不少用户从Keil MDK迁移。本文将详述如何借助IAR Project Converter工具高效完成迁移,并列出迁移中需注意的关键事项,助力开发者快速适应新环境。

作者:夏青

 

随着嵌入式系统开发的复杂度不断提升,开发人员对集成开发环境(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)的(de)项(xiàng)目(mù),越(yuè)来(lái)越(yuè)多(duō)的(de)用(yòng)户(hù)选(xuǎn)择(zé)从(cóng)Keil MDK迁(qiān)移(yí)到(dào)IAR EWARM。这(zhè)就(jiù)会(huì)面(miàn)临(lín)着(zhe)需(xū)要(yào)将(jiāng)之(zhī)前(qián)的(de)Keil MDK工(gōng)程(chéng)迁(qiān)移(yí)到(dào)IAR EWARM的(de)问(wèn)题(tí)。本(běn)文将(jiāng)介(jiè)绍(shào)如(rú)何(hé)高(gāo)效(xiào)完(wán)成(chéng)这(zhè)一(yī)迁(qiān)移,帮助开发者快速适应新环境。

准备工作

  • IAR EWARM集成开发环境
  • 对应Arm Cortex-M MCU的IAR EWARM支持包:如果对应MCU已经在IAR EWARM的官方支持列表内,则对应MCU的支持包也会在IAR EWARM的安装包内;若未在,则需要联系对应MCU厂家提供IAR EWARM支持包(绝大多数厂家都会同时提供Keil MDK和IAR EWARM的支持包)

将(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)操作即可。

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

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

 

Tools > Project Converter打(dǎ)开(kāi)IAR Project Converter,对(duì)应(yīng)的(de)Project type选(xuǎn)择(zé)Keil μVision5 for Arm,本(běn)文以(yǐ)STM32F405的(de)GPIO示(shì)例(lì)工(gōng)程(chéng)为(wèi)例(lì),点(diǎn)击(jī)Execute:

 

在(zài)弹(dàn)出(chū)的(de)对(duì)话(huà)框(kuāng)中(zhōng)选(xuǎn)择(zé)目(mù)标(biāo)工(gōng)程(chéng)路径,以(yǐ)GPIO示(shì)例(lì)工(gōng)程(chéng)下(xià)面(miàn)的(de)EWARM为(wèi)例,点击OK:

 

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

 

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

 

编译调试:在IAR EWARM中编译调试转换的(de)工(gōng)程(chéng)

File > Open Workspace…打(dǎ)开(kāi)转(zhuǎn)换(huàn)的(de)工(gōng)程(chéng):

 

选(xuǎn)择(zé)前(qián)面(miàn)转(zhuǎn)换(huàn)好(hǎo)的(de)工(gōng)程(chéng),点(diǎn)击(jī)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为例):

 

点击Download and Debug按钮或者Project > Download and Debug开始下载调试:

 

正常情况下应用程序会下载到目标系统,然后停在main函数入口:

 

至此将Keil MDK工程成功迁移到IAR EWARM并进行编译、下载调试。

注意事项

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

printf函数重定向

Keil MDK里面printf函数通过fputc函数进行重定向,而新版本的IAR EWARM里面printf函数通过__write函数进行重定向。

汇编代码

Keil MDK和IAR EWARM的汇编代码格式不一样,虽然目前Cortex-M MCU的大部分代码是C/C++,但是如果代码中使用了相关的汇编代码,在迁移过程中需要进行转换(前面提到的启动代码就是一个示例)。更多关于Keil MDK和IAR EWARM的汇编代码格式,需要参考对应工具的汇编代码使用文档。

intrinsic函数

intrinsic函数是编译器提供的内部函数,通常来说不同编译器提供的intrinsic函数名字不一样。Arm Cortex-M MCU开发大部分会采用满足CMSIS标(biāo)准(zhǔn)的(de)函(hán)数(shù),如(rú)果(guǒ)使(shǐ)用(yòng)了(le)编(biān)译(yì)器(qì)的(de)intrinsic函(hán)数(shù),在(zài)迁(qiān)移(yí)过(guò)程(chéng)中(zhōng)需(xū)要(yào)适(shì)配(pèi)(比(bǐ)如(rú)Keil MDK对(duì)应(yīng)NOP指(zhǐ)令(lìng)的(de)intrinsic函(hán)数(shù)是(shì)__nop,而(ér)IAR EWARM对(duì)应(yīng)NOP指(zhǐ)令(lìng)的(de)intrinsic函数是__no_operation)。更多关于intrinsic函数的信息,需要参考对应编译器的使用文档。

#pragma命令

#pragma命(mìng)令(lìng)用(yòng)于(yú)控(kòng)制(zhì)编(biān)译(yì)器的特定行为,通常来说不同的编译器支持的#pragma命令不同,如果代码里面使用了#pragma命令,在迁移过程中需要适配。更多关于#pragma命令的信息,需要参考对应编译器的使用文档。

链接脚本文件

Keil MDK里面的链接脚本文件采用的是分散加载文件(scatter-loading file, .sct)。IAR EWARM的链接脚本文件采用的是链接器配置文件(ilinker configuration file, .icf)。绝大多数MCU厂家会同时提供Keil MDK和IAR EWARM的链接脚本文件。但是(shì)如(rú)果(guǒ)有(yǒu)一(yī)些(xiē)定(dìng)制(zhì)化(huà)的(de)需(xū)求(qiú),那(nà)么(me)需(xū)要(yào)用(yòng)户(hù)修(xiū)改(gǎi)对(duì)应(yīng)的(de)链(liàn)接(jiē)脚(jiǎo)本(běn)文件(jiàn)。更(gèng)多(duō)关于(yú)链(liàn)接(jiē)脚(jiǎo)本(běn)文件(jiàn)的(de)信(xìn)息(xi),需(xū)要(yào)参(cān)考(kǎo)对应编译器的使用文档(dàng)。

工(gōng)程(chéng)目(mù)录(lù)

目(mù)前(qián)Keil MDK只(zhǐ)支(zhī)持(chí)一(yī)级(jí)目(mù)录(lù),之(zhī)前(qián)转(zhuǎn)换(huàn)过(guò)来(lái)的(de)IAR过(guò)程(chéng)显(xiǎn)示(shì)如(rú)下(xià):

 

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

 

总结

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


让资产更安全、更经济、更智能
请选择您的行业 水电 新能源 火电 电网 其他
请选择您的行业 水电 新能源 火电 电网 其他
请选择您的行业 水电 新能源 火电 电网 其他
请选择您的行业 水电 新能源 火电 电网 其他
请选择您的行业 水电 新能源 火电 电网 其他
×
咨询电话:400-83756699 咨询邮箱:pocketGames@gsfzw.com
咨询电话:
400-83756699
咨询邮箱:
pocketGames@gsfzw.com
咨询电话:400-83756699 咨询邮箱:pocketGames@gsfzw.com
code1
Hi,有什么问题可以帮您? 立即咨询
Hi,有什么问题可以帮您?
咨询电话:400-83756699 咨询邮箱:pocketGames@gsfzw.com