如何将项目从IAR迁移到Embedded Studio

描述

本文描述如何将IAR EWARM项目迁移到SEGGER Embedded Studio(简称SES)中。通过Embedded Studio内置的项目导入器,用户可以在SES中继续使用IAR工具链或使用Embedded Studio内部集成的SEGGER工具链。将项目迁移到Embedded Studio,可以直接受益于SES的强大功能,如多线程编译,快速简单的项目搜索,精准的索引等功能。如果仍然决定在Embedded Studio中使用IAR工具链,也有许多可以使用的实用功能。

项目导入说明基于SEGGER emPower评估板,使用的示例项目可以访问:https://kb.segger.com/images/6/6a/IAR_to_ES_Tutorial.zip(复制链接到浏览器)下载。

1导入步骤

1 打开Embedded Studio,选择菜单File→Import IAR EWARM Project…,选择要导入的项目文件Workspace.eww。

IAR

2 接下来,设置使用的工具链:

• External Toolchain:导入项目并将其配置为使用原始的IAR工具链构建。

• Internal Toolchain:导入项目并设置使用SES工具链。

• Internal and External Toolchain:创建两组构建配置,一组使用原始的IAR工具链构建项目,另一组使用Embedded Studio工具链进行构建。

• “IAR Installation Directory”,用于设置使用的外部IAR编译器。

3 为了顺利的将项目迁移到Embedded Studio,建议基于Internal and External Toolchain创建构建配置,后续开发中,可以根据应用需求,轻松地在工具链之间切换。

IAR

4 如果导入过程顺利,将弹出以下状态窗口:

IAR

5 Embedded Studio将根据使用的内部和外部编译器为debug和release版本自动创建构建配,配置将与IAR项目中已有的配置相匹配。要在不同的构建配置之间进行切换,可以使用“Project Explorer”中的下拉菜单实现。

IAR

6 要使用IAR编译器调试示例项目,请在下拉菜单中选择“Debug_External”,然后按F7构建该项目。

7 对于大多数项目,都可以通过上述操作导入并成功运行,如果出现构建错误,请参考“故障排除”一节。

注意:虽然可以仅运行调用外部工具链的外部配置,但我们建议切换到SEGGER工具链,因为在调试外部工具链创建的代码时,某些调试功能不可用。

2如何切换到Embedded Studio内部编译器

为了充分利用Embedded Studio的功能,需要使用SEGGER内部编译器,该编译器基于Clang。

在提供的示例项目中,通过下拉菜单选择“Debug_Internal”,按F7后,项目将使用SEGGER内部编译器构建。如需使用其他内部编译器,如gcc,可以在项目options中启用。

使用内部编译器成功构建项目之后,Embedded Studio将自动计算应用的Flash和RAM占用情况,并在输出窗口中直观地展示。

IAR

注意:此功能仅在使用内部编译器时可用。

如果你计划使用SEGGER工具链,我们建议跳过导入工具,直接使用项目向导创建一个新项目。如果有可用CPU的支持包,可以基于支持包和向导方式创建新项目。通过这种方式,所有与Embedded Studio及目标相关的项目设置将自动配置。用户仅需将IAR项目中的源代码文件添加到Embedded Studio文件夹中,并修正特定于IAR的编译错误,并参考故障排除一节说明,修订链接器脚本和内存映射设置,这种方法能够节省大量时间,提高项目迁移效率。

3故障排除

导入的项目可以直接使用外部工具链重新构建运行,但如果基于SEGGER内部工具链构建,可能需要对项目构建配置进行一些手动更改。

通常情况下,如果源代码按Clang兼容的标准创建,这些文件可以直接在SEGGER工具链中使用。如果项目是基于软件包或SDK创建,它可能已经包含了SEGGER工具链兼容的源文件,使用这些文件取代以前工具链兼容的文件即可。

以下列出了将项目迁移到Embedded Studio时,需要更改的要点

3.1 内部配置

内存链接器脚本

Embedded Studio项目导入器不会自动导入链接器脚本(如IAR的icf文件)。它仅为选定的目标处理器设置基本内存映射,将代码放入内部Flash,并将数据放入内部RAM中。

对于更复杂或特殊的配置,必须相应地设置内存映射文件和段放置文件。

在Embedded Studio中有两种方式可以设置内存段的放置:

1 通过项目options中的“Linker→Memory Segments”选项直接放置段。

2 创建一个内存映射.xml文件或编辑Embedded Studio提供的默认文件,并设置“Linker→Memory Map File”指向该文件。

示例如下,一个具有两个名为FLASH和RAM的内存段的设备内存映射文件:

IAR

相应的链接器文件将引用内存映射文件的内存段,并列出要放置在这些段中的节。

要添加新的段或节,只需编辑Embedded Studio提供的默认文件。使用链接的文件可以在“Linker→Linker Script File”选项中找到。

第三方软件和库

第三方软件,特别是库,可能是基于某个工具链配置,无法用其他工具链直接编译。

检查是否有Embedded Studio/SEGGER工具链的软件库移植版本,或者基于SEGGER工具链配置并重构软件库。

尽管基于其它工具链构建的库可以链接到Embedded Studio,但实际运行时,还需检查与库的接口是否按预期工作,避免系统错误。

汇编代码

汇编程序代码和控制命令的语法在不同的工具链中存在差异。尽管最终的汇编指令是相同的,但是在不同的工具链上编写的汇编代码可能不同,例如,IAR和GCC/Clang编译器中,数值常量声明方式并不相同。

编写汇编代码的控制命令也存在区别。符号、标签、函数定义等的语法需要根据编译器要求进行调整,确保代码在新的工具链中正常工作。

下表显示了一些常用的汇编指令及其在不同工具链中的指令代替:

IAR

完整的指令列表可以参考相应的汇编手册。

预处理器定义

不同的工具链使用不同的预定义来识别所使用的编译器,并允许基于core、device、endianness和其他设置进行条件编译。

在项目迁移时,必须选择正确的定义,并建议在未定义所需条件时产生警告或错误提示。

IAR定义了__ICCARM__和__IAR_SYSTEMS_ICC__用于标识自身工具链,Embedded Studio定义了__SES_ARM和__SEGGER_CC__。

对于目标设备,IAR在编译Cortex-M4时定义了__ARM7M__和__CORE__=__ARM7M__,而Embedded Studio则使用__ARM_ARCH_7M__替代。

工具链内联函数

一些特定于编译器的函数,如__disable_interrupt()或__no_operation()在Embedded Studio中并不存在。需编写相应的替换函数或避免使用类似函数。

对于SEGGER编译器,__no_operation()的替换函数可以定义为:

IAR

为了实现与IAR的向后兼容性,重定义可以嵌套在预处理器定义中。IAR EWARM使用__ICCARM__,Embedded Studio使用__SEGGER_CC__。

项目设置

大多数项目设置都是由项目导入器为外部和内部构建配置自动设置的。在一些更复杂的项目中,需要手动添加某些项目设置。

例如,默认情况下,内部构建配置中不会排除任何文件,所以如果存在编译器不兼容的文件,编译器将尝试编译它并显示错误(例如GCC/Clang不兼容的汇编文件)。

可以Project Explorer右键单击项目,并选择“Edit options”修改。

用户包含目录

许多复杂项目的源代码分布在不同路径的多个文件夹中。确保所有需要的文件夹都包含在“Preprocessor→User Include Directories”下的构建配置中。

Pre/Post Build命令

Embedded Studio提供了类似IAR EWARM中的pre/post构建命令。然而,由于IAR和Embedded Studio之间的语法存在差异,项目导入器不会自动导入这些命令。

如果在IAR中使用这些命令,请确保在Embedded Studio的内部和外部构建配置中相应地模拟这些指令。要一次执行多个命令,也可以使用批处理脚本。

例如,要启用post-link批处理脚本,可以打开项目options中的构建配置,在“User build Step”下编辑post-link Command命令。在该条目中,输入bat文件的相对或绝对路径以及可选参数,格式如下:路径/ Example.bat Param1 Param2…。

3.2 外部配置

由于Embedded Studio只是通过命令行调用IAR工具链,因此只需以与EWARM相同的方式调用它即可使外部构建工作。导入工具将尝试从IAR项目设置中检测尽可能多的项目设置。但是,由于IAR IDE可能会随着更新而变化,因此可能无法正确检测到某些选项。

要解决这个问题,最简单的方法是从IAR导出build命令行,并将其与Embedded Studio中的设置进行匹配,操作步骤如下:

在EWARM中打开IAR项目

在Build窗口中右键单击并选择Filter Level:All

重新构建项目

将构建日志复制到编辑器中

关闭EWARM并打开Embedded Studio

在项目资源管理器中右键单击项目并选择Export Build

比较EWARM和Embedded Studio的构建命令行,查看Embedded Studio缺少的选项并修正。

修正构建配置

要修正IAR构建命令行和Embedded Studio之间的差异,只需在Embedded Studio打开项目options。在大多数情况下必须纠正针对编译器(iccarm)、汇编器(iasmarm)和链接器(ilinkarm)的命令行调用。用户可以自己设置构建命令行的相应项目选项,或者直接转到项目选项中的外部构建选项并直接编辑命令行。

完成上述步骤后,如果成功地匹配了EWARM和Embedded Studio的构建命令,那么应用程序可以基于Embedded Studio成功构建了。

麦克泰技术提供SEGGER Embedded Studio商业授权,具有丰富的软件开发与调试工具使用方面的知识和经验,欢迎咨询info@bmrtech.com。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分