作者:火星
Keil MDK作为嵌入式行业常用的开发工具,嵌入式工程师们都很熟悉。但是最近听说Arm公司要把Keil MDK合并到Arm Development Studio里,所以Keil MDK的版本更新已经基本停止了,大家都还在使用很老版本的Keil MDK,功能上并不是很方便,希望找到更好的替代工具。此外,从近期举办的包括RISC-V中国峰会在内的多个行业活动来看,RISC-V在中国的发展如火如荼并且势头很猛,因此还要考虑开发工具是否会长期支持RISC-V并可以通过移植重用相关设计。
但是替代Keil MDK需要考虑项目工程如何迁移到其他工具,由于工程文件格式不同、以及底层编译技术的差异, Keil MDK的工程文件与其他工具平台并不完全兼容,需要一定量的迁移工作。本文就根据笔者的经验,分享一下如何快速把Keil MDK的代码迁移到其他平台,并且解决不同平台之间项目文件不兼容的问题。
目前迁移Keil MDK代码常见的目标平台有两个,分别是GCC和IAR。下面就给大家分别介绍并比较一下两者的区别:
概览:
项目迁移流程对比:
首先要声明,迁移项目分为两大部分工作,第一是项目文件格式的适配,第二是项目代码的适配。
关于非标指令的迁移,这里不做介绍,因为涉及的指令太多,不可能在一篇里介绍完,大家碰到了可以单独处理。
下面为大家介绍下通用的项目工程迁移指导:
从Keil迁移到GCC
一般需要修改以下内容:
迁移之后还要进行验证,包含编译结果的验证,编译后可执行文件代码尺寸、运行速度的验证和调整。如果代码尺寸或者运行速度不达标,还需要调整编译器优化选项。调整优化选项后,记得也要重新测试代码执行结果是否符合预期,因为不同的优化选项可能造成代码运行结果的变化。
从Keil迁移到IAR
如果是迁移到IAR,推荐使用IAR官方的项目转换工具IAR Project Converter,迁移过程就会非常方便。在IAR的Embedded Workbench for Arm工具的菜单栏里,点击Tools à IAR Project Converter, 就可以自动把Keil的工程文件和代码转换成IAR格式,最后再把.s启动文件换成IAR格式的就可以,一般在芯片公司提供的代码示例里都有不同格式的.s文件,直接找到IAR版本的替换原有的就可以。当然迁移之后还是要校验一下编译是否正常,测试下代码是否运行正常。如果用IAR,基本不用担心代码体积变大,或者运行速度拖慢,IAR拥有非常好的编译优化,一般情况下编译结果会更优,只需要找到合适的编译选项就OK了。
总结:
Keil项目迁移到其他平台技术上可行,尤其是代码中不涉及非标的C/C++代码时,具备项目迁移经验的情况下是完全可实施的,需要担心的只是工作量的问题。
至于选择迁移到IAR还是GCC,主要考虑以下几点:
以上内容基于自己的经验和知识总结,希望对各位考虑项目迁移的朋友们有帮助,如果有错误,欢迎指正!