OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 78078|回复: 32

【转】MDK在链接时提示空间不够(No space in execution regions with .ANY selector... )的解决方案总结

[复制链接]

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2012-11-27 00:19:44 | 显示全部楼层 |阅读模式

 帮用户解决空间不够时候看的一个资料,【转】过来整理一下供大家参考:

 

RealView MDK具有强大的编译、链接功能。嵌入式设备拥有的资源往往有限,如果一个程序编译、链接之后的可执行文件大小略大于存储大小时,则不能生成可执行文件进行调试或固化到Flash中。在这种情况下我们一般不去从硬件上调整存储空间的大小(有些存储空间在片内,实在无法调整),而是去修改程序,试图将程序简化、将缓存减小、减少全局变量、少用大数组多用指针等等人工方法,有些时候这些方法很有效。但如果使用的开发工具是RealView MDK,则有一系列方法,可以达到这一目的,比起手动方法只有过之而无不及。这些方法仅仅需要在编译、链接之前对某些配置做一些修改即可,使用非常简单。当然,如果将这些方法和人工修改程序的方法结合起来,效果更佳。有时单独使用以下三种方法中的一种即可解决问题,有时需要结合其中两种,甚至三种才能解决问题。下面以开发板Embest ATEB9200(采用的SOC AT91RM9200)的例程USARTPDC_test为例,由于片内SRAM空间比较小(大小为16KB,起始地址为0x200000),本例程在片内SRAM中进行调试时需要使用一些技巧,下面介绍如何使用这些方法。

在默认设置下,将例程USARTPDC_test选择在片上SRAM中调试时,编译通过、在链接时会提示以下错误信息提示空间不够:

compiling init.c...

compiling interrupt_Usart.c...

compiling main.c...

linking...

.\Int_RAM\USARTPDC_test.axf: Error: L6406W: No space in execution regions with .ANY selector matching Section .text(_scanf_int.o).

.\Int_RAM\USARTPDC_test.axf: Error: L6406W: No space in execution regions with .ANY selector matching Section .text(_scanf_longlong.o).

.\Int_RAM\USARTPDC_test.axf: Error: L6406W: No space in execution regions with .ANY selector matching Section .text(aeabi_sdiv.o).

Target not created

一、使用微库

使用微库时,将以更精简短小的C库替代标准C库,减小代码大小,使用微库的方法如下:

打开Project->Options->Target,将Use MicroLIB前面的复选框勾上。如下图:



图一  使用微库

 

点击确定之后,重新编译、链接。发现还是会提示空间不够的错误信息,但错误信息明显比以前少了:

Build target 'USARTPDC_test Int RAM'

assembling RM9200.s...

compiling init.c...

compiling interrupt_Usart.c...

compiling main.c...

linking...

.\Int_RAM\USARTPDC_test.axf: Error: L6406W: No space in execution regions with .ANY selector matching Section .text(interrupt_usart.o).

.\Int_RAM\USARTPDC_test.axf: Error: L6406W: No space in execution regions with .ANY selector matching Section i._printf_core(printf8.o).

.\Int_RAM\USARTPDC_test.axf: Error: L6407W: Sections of aggregate size 0x86c bytes could not fit into .ANY selector(s).

Target not created

二、修改链接脚本

修改链接脚本的方法有两种一种是直接修改分散加载文件,另一种是使用默认分散加载文件,这时仅需修改Project->Options->Target中的存储空间起始和大小。为了简单直观,本例中使用后者。在使用后者时,需要在Project->Options->Linker中将Use Memory Layout from Target Dialog前面的复选框勾上。如下图:



图二 使用默认的分散加载文件

 

然后在Project->Options->Target中修改存储空间中只读部分和可读写部分的起始和大小,一般来说加大只读部分大小(该部分存放程序中的指令),而减小可读写部分的大小(该部分存放堆栈、局部变量等)。

根据错误提示可知,只读部分空间最少需要加大0x86c bytes,总空间固定16KB,相应地需要减小可读写部分大小。修改之前如图一,修改后如下图:



图三  增大只读部分大小,减小可读写部分大小

 

点击确定之后,重新编译、链接:

Build target 'USARTPDC_test Int RAM'

assembling RM9200.s...

compiling init.c...

compiling interrupt_Usart.c...

compiling main.c...

linking...

Program Size: Code=9388 RO-data=380 RW-data=4 ZI-data=1244 

".\Int_RAM\USARTPDC_test.axf" - 0 Error(s), 0 Warning(s).

编译链接成功!

三、修改优化级别,着重对空间进行优化

在编译时着重对空间进行优化,让编译器自动减小代码大小。可使用编译选项-Ospace进行编译以达到目的,另外可以选更高的选优化级别―-03如下图:



图四 选较高优化级别针对空间进行优级化以减小代码大小


正点原子官方开发板购买店铺地址:

http://eboard.taobao.com


 

我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2012-10-25
在线时间
0 小时
发表于 2012-11-27 08:14:01 | 显示全部楼层
貌似验证一下正版就可以了。
程序员是未来的魔法师!
回复 支持 反对

使用道具 举报

51

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2011-4-11
在线时间
43 小时
发表于 2012-11-27 10:55:11 | 显示全部楼层
O(∩_∩)O哈哈~  牛呀!
回复 支持 反对

使用道具 举报

头像被屏蔽

254

主题

304

帖子

0

精华

禁止发言

积分
1006
金钱
1006
注册时间
2012-4-13
在线时间
32 小时
发表于 2013-12-28 10:34:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-3-17 17:00:36 | 显示全部楼层
今天果然遇见这问题了,顶一个!
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-3-17 17:13:57 | 显示全部楼层
回复【楼主位】Admin:
---------------------------------
请问使用MicroLib后出现这个问题怎么回事?

Error:L6218E:Undefined Symbol exit (referred from jerror.o)

在移植ucos加gui时出现的
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-3-18 17:04:33 | 显示全部楼层
回复【2楼】super_Tao:
---------------------------------
请问怎么验证啊?
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

51

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2012-10-25
在线时间
0 小时
发表于 2014-3-19 17:03:02 | 显示全部楼层
用KEIL破解软件!
程序员是未来的魔法师!
回复 支持 反对

使用道具 举报

51

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2012-10-25
在线时间
0 小时
发表于 2014-3-19 17:03:38 | 显示全部楼层
回复【7楼】爱博不专:
---------------------------------
用KEIL破解软件!
程序员是未来的魔法师!
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-3-19 17:24:30 | 显示全部楼层
回复【9楼】super_Tao:
---------------------------------
好像安装时候已经破解,不过把GUI的demo去掉,support全开也没报错,应该是头文件包含,宏定义什么出了点问题吧

不过谢了!
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2012-8-20
在线时间
1 小时
发表于 2014-5-4 11:14:02 | 显示全部楼层
的确有效果,不过关键还是数组的问题。
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2012-4-26
在线时间
1 小时
发表于 2014-5-13 21:26:41 | 显示全部楼层
 今天也碰到这样的问题,发现按照上述方法之后还是不能通过,所以只能从程序上下手,发现自己的程序中一些全局变量太多,加上分配给缓存的空间太大,试着减少之后,问题就解决了。      #define USART2_MAX_RECV_LEN 1024(此处改为500)
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-10-15
在线时间
8 小时
发表于 2014-7-23 11:37:31 | 显示全部楼层
回复【10楼】爱博不专:
---------------------------------
请问楼主解决没?
我现在也是加上GUI_Init(); 就报这个错 keil也是破解了的
GUI的demo我都没添加
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-7-29 21:31:04 | 显示全部楼层
回复【13楼】fuluoce:
---------------------------------
只能不用Demo了,使用Microlib好像对功能有一定限制,没法完美了
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-10-15
在线时间
8 小时
发表于 2014-7-30 00:37:51 | 显示全部楼层
回复【14楼】爱博不专:
---------------------------------
回复【14楼】爱博不专:
---------------------------------
找到原因了  是GUI的空间配置太大了
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-7-30 09:47:45 | 显示全部楼层
回复【15楼】fuluoce:
---------------------------------
在哪里配置了,最近没有玩GUI
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-10-15
在线时间
8 小时
发表于 2014-7-30 13:58:36 | 显示全部楼层
回复【16楼】爱博不专:
---------------------------------
GUIconf.C的文件里的宏定义
#define GUI_NUMBYTES  (1024 * 126)    // x KByte
回复 支持 反对

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-7-30 19:44:04 | 显示全部楼层
哦,谢谢。最近快用到GUI了,到时详细研究
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-1-13 00:53:14 | 显示全部楼层
mark///
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-8-1
在线时间
0 小时
发表于 2015-4-16 14:11:33 | 显示全部楼层
果然有用,非常感谢,用了前两种方法。。
回复 支持 反对

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-4-1
在线时间
0 小时
发表于 2015-5-7 11:57:54 | 显示全部楼层
今天碰到了这个问题
工作
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
35
金钱
35
注册时间
2015-4-6
在线时间
2 小时
发表于 2015-7-19 21:02:52 | 显示全部楼层
楼主所说可行,谢谢哈~
多少事,从来急
回复 支持 反对

使用道具 举报

21

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2015-12-4
在线时间
10 小时
发表于 2016-1-4 17:09:39 | 显示全部楼层
这个有时并不是那么靠谱,虽然优化级别提高了,但是有些时候读取的数据就不是你想要的,那样会导致图片显示不出来,就是因为优化级别提高了,导致我搞这个问题搞了半天,总结两个字:蛋疼
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2015-6-7
在线时间
1 小时
发表于 2016-1-7 14:33:24 | 显示全部楼层
这几天正好遇到这个问题,一会验证再说
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-11-26
在线时间
23 小时
发表于 2016-1-8 15:23:28 | 显示全部楼层
顶楼主,但是关于“Project->Options->Target中修改存储空间”部分  应该是这样的
     以ministm32  f103rc为例 ,大容量256k flash  ,rom区 开始地址 - 大小一般设置为0x800 000-0x40000(0x40000 正好对应f103rc的flash大小256K),  当编译后显示RAM不足时,可以将Size改大些(见图二,我改为了0x42000== 264K,刚好够用 并且程序也可以正常运行),因为stm32f103rc数大容量产品 flash>256k(见图二 英文手册),而楼主RAM区的大小是不用改变的

图一

图一

图二

图二
回复 支持 反对

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2014-4-16
在线时间
82 小时
发表于 2016-6-7 22:32:12 | 显示全部楼层
谢谢,有用到
回复 支持 反对

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2014-4-16
在线时间
82 小时
发表于 2016-8-10 17:52:43 | 显示全部楼层
非常实用啊,一步减少一点
回复 支持 反对

使用道具 举报

14

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2016-5-19
在线时间
87 小时
发表于 2017-3-14 10:17:56 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2017-5-23
在线时间
35 小时
发表于 2018-6-6 16:34:03 | 显示全部楼层
谢谢楼主分享!解决问题了
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2018-5-11
在线时间
10 小时
发表于 2018-6-13 16:15:02 | 显示全部楼层
路过,有点复杂。学习学习
回复 支持 反对

使用道具 举报

2

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2018-4-15
在线时间
34 小时
发表于 2018-8-5 21:32:24 | 显示全部楼层
感谢楼主 实用的骚操作
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-1-18
在线时间
4 小时
发表于 2018-10-17 14:22:00 | 显示全部楼层
厉害了
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2019-4-22
在线时间
57 小时
发表于 2019-9-30 09:12:41 | 显示全部楼层
有用,在移植UCOSIII系统时遇到了相同的问题,使用了第一和第二种方法后编译通过无提示错误
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 14:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表