网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2025-05-08 09:03

人气:

作者:admin

标签:

导读:对于需要统一开发环境或涉及多核架构(如Cortex-A/R)的项目,越来越多的用户选择从Keil MDK迁移到IAR EWARM。这就会面临着需要将之前的Keil MDK工程迁移到IAR EWARM的问题。本文将介绍如何高...

作者:夏青

随着嵌入式系统开发的复杂度不断提升,开发人员对集成开发环境( 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 厂家提供 IAR EWARM 支持包(绝大多数厂家都会同时提供 Keil MDK 和 IAR EWARM 的支持包)

将Keil MDK 工程迁移到 IAR EWARM

下面介绍将Keil MDK 工程迁移到 IAR EWARM 的 具体步骤:

安装IAR EWARM :安装时参考对应的安装说明进行操作即可。

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

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

wKgZO2gcAFCAYCZjAAlnZVvXhJk738.png

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

wKgZO2gcAGCAAyFWABu5l4ZzEJo028.png

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

wKgZPGgcAHaASu-kAAdR738qIn0807.png

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

wKgZPGgcAImAZMiIAA0buhjVxCY413.png

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

wKgZPGgcAKmADNo7ABu5l9sfkIU083.png

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

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

wKgZPGgcALqAXIfjAAKFbUQDNUk508.png

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

wKgZPGgcAMeAZjxhAAu--gFebHI980.png

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

wKgZPGgcANyAPNphAATvUDDm3mA944.png

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

wKgZO2gcAOyAICk2AAgrznwPfy8791.png

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

wKgZO2gcAPeATWG_AAl2oMSkI_s374.png

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

wKgZPGgcAQyAKNSjAAy3fOQwsSw542.png

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

wKgZPGgcASqAEpHsAAzHt6mJywk873.png

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

wKgZPGgcAUiAK_EyAAOnPBa6v4o272.png

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

wKgZPGgcAWaABQYLAAsVVxQL-BE370.png

因为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 ):

wKgZPGgcAYiAAzHvAAjFxQWPoKo642.png

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

wKgZO2gcAZKAMCkQAAsewK32pQM880.png

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

wKgZO2i_896AStkwABKhhwPXJN0006.png

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

wKgZO2gcAcCAeiuPAAJoNYenmf8873.pngwKgZO2gcAdCAXS8dAAKRTV7qQSQ457.png

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

wKgZO2gcAe6AUVgGAAsCebtjRzo641.png

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

注意事项

上 文 以一个简单的GPIO 示例工程介绍了如何将 Keil MDK 工程成功迁移到 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 标准的函数,如果使用了编译器的 intrinsic 函数,在迁移过程中需要适配(比如 Keil MDK 对应 NOP 指令的 intrinsic 函数是 __nop ,而 IAR EWARM 对应 NOP 指令的 intrinsic 函数是 __no_operation )。更多关于 intrinsic 函数的信息,需要参考对应编译器的使用文档。

#pragma 命令

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

链接脚本文件

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

工程目录

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

wKgZPGgcAjCATMQUAA4GAZXBJRg682.png

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

wKgZO2i_9BGAKNBAABMQc-OcqIk041.png

总结

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

审核编辑 黄宇

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信