搜索
bottom↓
回复: 10

在ICC 中定义flash中的大型数组 遇到的问题

[复制链接]

出0入0汤圆

发表于 2009-10-25 08:34:56 | 显示全部楼层 |阅读模式
我也碰到和 mobufan 相同的问题,那位大侠指点一个,谢谢
液晶显示需要比较大的图片,我都定义为const 存在flash中
程序如下:
#pragma data:code
const INT8U welcome[25][160] =
{
{0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
{0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
..................

};
#pragma data:data
char r1;
.......

可是编译时出现以下提示:
too many initializers  

而且 多次编译发现,
如果上面 welcom 数组 里面的初始化数据很少时, 比如只有10行时,就没有问题。
如果 超过20行,就肯定 提示 too many initializers
估计是 icc 是有某些限制导致的,可是看了半天的help都找不到,
请各位大侠能够指点以下

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2009-10-25 09:05:07 | 显示全部楼层
英文提示很清楚啊,你初始化值写多了

出0入0汤圆

 楼主| 发表于 2009-10-25 17:41:56 | 显示全部楼层
NO,即使只定义 pic2[62624] 也是too many initializers  的提示

出0入0汤圆

发表于 2009-10-25 18:05:29 | 显示全部楼层
没有办法。软件对数组个数有限制。好像只能到30000左右。咱们这里的那个TFT LCD 。只能用120*120图片。我今天终于能好了SD卡读图片。
如果读别的图片只能用外部存储SD。

出0入0汤圆

 楼主| 发表于 2009-10-26 20:12:00 | 显示全部楼层
你把一个32768的数组拆成两个,在文件中连续定义,这样在编译后两个数组在Flash空间中是连续放置的,然后用一个指针指向第一个数组的首地址,访问数据时可以无视数组的大小。比如用两个16384的数组存放32768个数据,*data指向第一个数组的其实地址,然后32768个数据可以这样访问*(data + add),add范围是0-32767

出0入0汤圆

 楼主| 发表于 2009-10-26 20:13:03 | 显示全部楼层
目前avrgcc是有这个限制,准确的说是单个类型对象不能超过32k(所以不能通过多维数组、结构体来回避)。
如果要连续的32k以上的数据空间,还是得拆成多个32k以下的对象,然后通过段限定,设定每个对象在存储器中的绝对定位,使它们连续存储。如果觉得数组大小可能以后还变化,计算会比较麻烦,就要自定义链接脚本,可以不用计算空间分配了。

出0入0汤圆

 楼主| 发表于 2009-10-26 20:13:08 | 显示全部楼层
目前avrgcc是有这个限制,准确的说是单个类型对象不能超过32k(所以不能通过多维数组、结构体来回避)。
如果要连续的32k以上的数据空间,还是得拆成多个32k以下的对象,然后通过段限定,设定每个对象在存储器中的绝对定位,使它们连续存储。如果觉得数组大小可能以后还变化,计算会比较麻烦,就要自定义链接脚本,可以不用计算空间分配了。

出0入0汤圆

 楼主| 发表于 2009-10-26 20:13:20 | 显示全部楼层
目前avrgcc是有这个限制,准确的说是单个类型对象不能超过32k(所以不能通过多维数组、结构体来回避)。
如果要连续的32k以上的数据空间,还是得拆成多个32k以下的对象,然后通过段限定,设定每个对象在存储器中的绝对定位,使它们连续存储。如果觉得数组大小可能以后还变化,计算会比较麻烦,就要自定义链接脚本,可以不用计算空间分配了。

出0入0汤圆

发表于 2014-12-15 23:24:24 | 显示全部楼层
ICCAVR遇到同样的问题,无字符的12864定义10几个汉字就不行了,已经到了多一个就有问题的情况。
const uchar  tui[]={
/*--  文字:  退  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x41,0xC6,0x00,0x00,0xFE,0x4A,0x4A,0xCA,0x4A,0x4A,0x7E,0x80,0x00,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x5F,0x48,0x44,0x40,0x41,0x42,0x4D,0x58,0x40,0x40,0x00,
};
...................
..................

求解

出0入0汤圆

发表于 2014-12-20 11:55:34 | 显示全部楼层
__flash uchar  tui[]={
/*--  文字:  退  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x41,0xC6,0x00,0x00,0xFE,0x4A,0x4A,0xCA,0x4A,0x4A,0x7E,0x80,0x00,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x5F,0x48,0x44,0x40,0x41,0x42,0x4D,0x58,0x40,0x40,0x00,
};
我也用无符号的液晶,这样定义能用主要flash前是两个_
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 04:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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