可执行文件大于Flash存储空间,不能被下载到Flash的解决办法

 

一、问题描述:

在编译通过后,生成的可执行文件准备下载到开发板上时,若提示如下类似的错误,则表示生成的可执行文件大于Flash存储空间,则不能被下载到Flash中。(开发环境:Keil MDK V5.25.1.0)

Error:L6406W:No space in execution regions with.ANY selector matching Section.....


 

二、解决办法

这时我们第一个想到的应该就是对程序进行优化了,那么可以怎么优化程序呢?

1、通过对实际代码进行优化操作。

  • 减少缓存尺寸
  • 减少全局变量
  • 少定义尺寸大的数组而多用指针

2、通过合理调整RealView MDK的编译和链接配置(也可以减小生成的可执行文件大小)。

  • 使用微库。

将以更精简短小的C库替代标准C库,以减少代码大小。此外,如果在Keil中使用printf函数,不能想串口输出信息,或者不能硬件仿真时,也可以注意一下是否选中了“Use MicroLIB”

  • 修改连接脚本 

在Linker页面,选中"Use Memory Layout from Target Dialog"。此外在Target页面中修改“Read/Only Memory Areas”(只读部分)和“Read/Write Memory Areas”(可读/写部分)的起始地址和大小。一般来说加大只读部分大小(存放程序中指令的地方),减小可读写部分的大小(存放堆栈、局部变量等的地方)。

  • 修改优化级别

 在当前设置页面的C/C++页面中,使用编译选项“-Ospace”进行编译,将着重对空间进行优化,让编译器自动减少代码的大小。另外可以选择更高的优化级别“Level3(-O3)”。Level3 的优化等级最高,最适合下载到最终产片芯片中而Level0为不优化,这种模式最适合调试,代码不会被优化掉


三、总结

一般我们建立工程的时候,Keil的设置基本就是有利于减少代码所占空间的,所以在遇到比较大的工程的时候,在写代码的过程中就应该考虑到程序结构是否尽可能的最优化了,平时多多注意,多多积累~


 坚持记录,坚持原创~哇咔咔

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微芯供氧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值