Simplicity Studio编译EFM32 Release版本“FLASH memory overflowed”问题解决方法

近期,在开发EFM32相关项目过程中,发现Debug版本Flash空间并没有超,甚至还预留有相当一部分空间,但在切换到Release版本编译时,却发现编译器报错“FLASH memory overflowed”,按说,切换到Release版本去掉调试信息,并进行代码优化后,编译的固件空间相比Debug版本应该更小才对。

经过探索,发现问题出现在Linker Scripts,在Release版本的Settings中,Memory Layout不可设置,而是由系统自动拷贝,并根据实际情况作必要的修改的。如图1。

经系统拷贝的Linker Scripts放在工程目录下的xxx-Release文件夹下,查看*.ld文件,发现报错的地方:

  /* Check if FLASH usage exceeds FLASH size */
  ASSERT( LENGTH(FLASH) >= (__etext + SIZEOF(.data)), "FLASH memory overflowed !")

 这里有一个断言,判断芯片Flash空间大小是否大于编译生成的代码末端(__etext)和数据段长度(SIZEOF(.data)),但这个地方代码末端是以芯片Flash的起始地址(EFM32的为0x08000000)的,不是0x00000000,而LENGTH(FLASH)为0x80000(我用的512KB Flash空间的芯片),SIZEOF(.data)值大于0,所以编译一定会报错。

错误原因在于计算Flash占用空间的方法出错,没有减去芯片Flash起始地址,知道问题原因,解决就简单了,但这里不能直接修改当前目录下的*.ld文件,因为编译器在链接时,每次都重新从系统中拷贝Linker Scripts模板文件到此目录,需要修改原始的Linker Scripts文件。

原始Linker Scripts文件目录:

xxx\SiliconLabs\SimplicityStudio\v5\configuration\org.eclipse.osgi\883\0\.cp\linker_scripts

"xxx"取决于你的Simplicity Studio安装路径,文件路径根据安装也可能不一样,可以以“linker_scripts”为关键字进行搜索。修改"linker_scripts"最后一行如下:

ASSERT( LENGTH(FLASH) >= (__etext - ORIGIN(FLASH) + SIZEOF(.data)), "FLASH memory overflowed !")

减去Flash起始地址(ORIGIN(FLASH))即可。

修改后,在编译Release版本就不会报超出Flash空间了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Simplicity Studio 是一款集成开发环境,用于开发和调试Silicon Labs的微控制器和无线芯片。它提供了许多工具和资源,包括代码示例、文档、调试器和仿真器等,方便开发者进行开发和调试工作。以下是一些Simplicity Studio教程的主题: 1. 安装Simplicity Studio:介绍如何下载和安装Simplicity Studio,以及如何配置开发环境。 2. 创建项目:介绍如何创建一个新的项目,并选择适合的芯片和开发板。 3. 编写代码:介绍如何使用Simplicity Studio的代码编辑器编写代码,并添加必要的库和头文件。 4. 调试代码:介绍如何使用Simplicity Studio的调试器和仿真器调试代码,并查看变量和寄存器的值。 5. 上传代码:介绍如何将编写好的代码上传到芯片中,并进行测试和验证。 6. 使用示例代码:介绍如何使用Simplicity Studio提供的示例代码,以及如何修改和定制示例代码以满足自己的需求。 7. 使用外设:介绍如何使用Simplicity Studio的外设库,以及如何控制和配置外设,如GPIO、UART、SPI等。 8. 调试无线应用:介绍如何使用Simplicity Studio的无线调试工具,以及如何调试无线应用程序。 以上是一些Simplicity Studio教程的主题,希望对您有所帮助。 ### 回答2: Simplicity Studio是一款非常好用的软件集成开发环境,可以帮助我们进行MCU芯片的开发和调试。本教程将为大家详细介绍Simplicity Studio使用方法。 一、安装Simplicity Studio 首先,我们需要下载并安装Simplicity Studio软件。下载地址:https://www.silabs.com/products/development-tools/software/simplicity-studio 安装完毕后,我们需要注册账号和激活软件。 二、添加开发板 Simplicity Studio支持多种MCU芯片,并且有针对不同芯片的开发板。在使用Simplicity Studio之前,我们需要先添加开发板。 点击菜单栏中的"Add",选择"Boards"。 在弹出的对话框中,选择芯片品牌和型号,然后选择对应的开发板,点击"Next"。 选择调试器,点击"Finish",开发板就添加成功了。 三、新建工程 在Simplicity Studio中,可以直接新建一个工程,也可以导入一个已有的工程。 点击菜单栏中的"File",选择"New",然后选择"Project"。 在弹出的对话框中,选择芯片品牌和型号,选择对应的工程模板,输入工程名称和工程路径,选择调试器,点击"Finish"即可创建工程。 四、配置工程 完成工程创建后,我们需要配置工程参数,例如时钟、GPIO等。在Simplicity Studio中,可以通过"Builder"功能进行配置。 点击窗口底部的"Task",选择"Project Explorer"。 在左侧的项目管理器中,选择工程,右键点击,选择"Properties"。 选择需要配置的参数,比如"MCU","Debug","Build"等。 五、编写代码 在Simplicity Studio中,可以使用C或者C++编写代码。我们可以使用内置编辑器编写代码,也可以使用外部编辑器编写代码,然后导入工程。 六、编译和调试 完成代码编写后,我们需要进行编译和调试。在Simplicity Studio中,可以通过"Debug"功能进行调试。 在左侧的项目管理器中,选择工程,右键点击,选择"Debug As",然后选择相应的调试方式。 进入调试模式后,我们可以在Simplicity Studio中进行单步执行、断点、变量查看等操作。 七、总结 以上就是Simplicity Studio的教程。Simplicity Studio操作简单、易上手,完善的调试功能可以帮助我们解决开发过程中的问题。如果你是一个MCU芯片的爱好者或者工程师,Simplicity Studio将是你不可或缺的工具。 ### 回答3: Simplicity Studio是一款针对Silicon Labs MCU的集成开发环境。它提供了丰富的工具和功能,方便开发者进行代码编写和调试,适用于各种应用领域,例如IoT、工业自动化、智能家居等。 在使用Simplicity Studio之前,需要先下载并安装它。安装完成后,打开软件,就会看到主界面。它分为几个区域,分别是:启动器、管理器、项目构建器、调试器等。 启动器区域提供了许多工具的入口,包括创建项目、下载固件、下载模拟器等。管理器区域提供了项目管理、文件管理和资源管理等功能,可以方便地查看和管理项目相关的文件和资源。 在创建新项目时,可以选择MCU类型、开发板、调试器等。Simplicity Studio提供了很多常用的芯片型号和开发板,方便开发者进行开发。 编写代码是整个开发过程中最重要的环节之一。Simplicity Studio提供了编译器、调试器、Simu IDE和能量管理等工具,可以方便地进行代码编写和调试。此外,它还集成了很多应用程序示例和代码,可以快速学习和理解如何使用芯片的各种功能。 在调试过程中,可以使用Simu IDE进行仿真调试,也可以使用调试器进行硬件调试。Simplicity Studio提供了多种硬件调试器,例如J-Link、J-Trace等,可以适用于不同类型的MCU。 总之,Simplicity Studio是一款功能强大的集成开发环境,适用于各种应用场景。通过使用它,开发者可以更高效地进行MCU开发,提高开发效率,降低开发成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值