OpenEdv-开源电子网

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

MDK链接时空间溢出????

[复制链接]

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2011-10-15
在线时间
0 小时
发表于 2012-1-14 21:46:39 | 显示全部楼层 |阅读模式
我的写程序的时候由于定义了很大的一个数组,放的是一张位图转换成的数据,可能是数组太大的造成链接的时候出现下面的错误提示:
.\Obj\STM3210B-EVAL.axf: Error: L6406W: No space in execution regions with .ANY selector matching Section .bss(main.o).
.\Obj\STM3210B-EVAL.axf: Error: L6407W: Sections of aggregate size 0x14000 bytes could not fit into .ANY selector(s).

我在网上看到有解决方法,就是把Target Opration里的IRAM1做相应的修改。我修改了,然而虽然没有报错了,但是,烧程序的时候,容易出错,而且就算烧进去了,lcd黑屏,根本没有图片。请问是为什么? 
下面是我的程序:



/*************显示图片************/
void LCD_picture()
{
    u16 i,p=0,c=0;
    LCD_WriteReg(R80,20);           //水平方向GRAM 起始地址
    LCD_WriteReg(R81,20+126-1);//水平方向 GRAM 结束地址
    LCD_WriteReg(R82,20);           //垂直方向GRAM 起始地址
    LCD_WriteReg(R83,20+94-1);    // 垂直方向 GRAM 结束地址 
    LCD_SetCursor(20,20);            // 设置光标位置 
    LCD_WriteRAM_Prepare();     //开始写入GRAM    
    for(i=0;i<11844;i++){
        c = p11[p+1] | p11[p]<<8;      //    u8 p11[11840] = {/*图片的数据。。。好多*/};
        LCD_WR_DATA(c);
        p = p + 2;    
    }
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-1-14 23:46:08 | 显示全部楼层
回复【楼主位】戎将:
---------------------------------
你的内存就那么大,硬往里面塞,怎么行呢?

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2011-10-15
在线时间
0 小时
 楼主| 发表于 2012-1-15 10:36:46 | 显示全部楼层
哦。。。酱紫。。那个图片其实是很小的哦,那个数组只是 U8 p11[11840] ,11844个元素,每个八位,竟然连内存都塞爆了。。
我还想请教一下原子哥,如果我要让lcd显示图片,我没有sd卡,原来的想法是用位图转换又内存不够,那我应该怎么弄?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-1-15 10:48:03 | 显示全部楼层
回复【3楼】戎将:
---------------------------------
STM32才20K内存.
你定义在flash里面吧.
增多关键字const.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2011-10-15
在线时间
0 小时
 楼主| 发表于 2012-1-15 11:48:39 | 显示全部楼层
哇塞。。在那个数组前加个const居然可以显示了。。。原子哥碉堡了!!一句话就把问题解决了。。。
当我还有点点疑惑:
const不是定义为常变量而已吗?为什么会占用内存变少?程序是不是被烧到哪里?rom里?加了const之后的数组又写到了哪里??
还有,当内存空间都不够的时候,程序都烧不进去,怎么写进flash?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-1-15 12:54:59 | 显示全部楼层
回复【5楼】戎将:
---------------------------------
const关键字是定义不可以修改的数据,既然数据不可以修改,定义在ram里面那就太浪费了.所以就放到flash里面了.
你说的rom就是flash了.
内存空间不够是报错,不会说烧不进去.
烧不进去只是flash空间超过了才会有的现象.
 
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2011-10-15
在线时间
0 小时
 楼主| 发表于 2012-1-15 13:53:43 | 显示全部楼层
原来如此。。。学习了~~~
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-4-26
在线时间
0 小时
发表于 2013-10-24 08:27:28 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥,我也是想用这种方法解决的,可是他出现了下面的提示,
text.c(70): error:  #167: argument of type "const u8 *" is incompatible with parameter of type "u8 *"
s(u8 *x,s8 n)我是通过函数来调用这个数组的,不知道和这个有没有关系,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-25 16:45:52 | 显示全部楼层
回复【8楼】aosini:
---------------------------------
加强制转换。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-9 23:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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