[AVR单片机] AVR中大数组应用问题

[复制链接]
5150|18
 楼主| cetclyb 发表于 2007-10-23 09:16 | 显示全部楼层 |阅读模式
用ICC编译器,在MG32中(它的数据区大小为2K),有一个长度为3000字节的静态数组,应该怎样声明引用?
我的方法是
     const char data[3000] ={1, 2, 3, .......};
并且在编译器中设置它在FLASHZ中,但是编译报错,超出BSS,请问有谁知道怎么操作?
谢谢!
 楼主| cetclyb 发表于 2007-10-24 12:55 | 显示全部楼层

双龙没有人看这个问题吗?

greenspace 发表于 2007-10-24 17:41 | 显示全部楼层

刚开始用,手册中好像有

应该声明中用__flash关键字吧?const可以不要
__flash char data[3000]=
greenspace 发表于 2007-10-24 17:55 | 显示全部楼层

说句题外话

21ic的笔记居然不能用中文ID登录,是何道理?害我重起炉灶,还要灌水赚分
 楼主| cetclyb 发表于 2007-10-26 13:06 | 显示全部楼层
computer00 发表于 2007-10-26 13:25 | 显示全部楼层

积分容易,去做题就行了,就在左边的列表里找找

 楼主| cetclyb 发表于 2007-10-26 16:47 | 显示全部楼层

好象用关键字flash也不行,包扩前边带下划杠

掩埋水雷 发表于 2007-10-28 11:29 | 显示全部楼层

高手来解答下啊,我学习下

高手来解答下啊,我学习下
greenspace 发表于 2007-10-29 14:03 | 显示全部楼层

我测试了一下,没问题,变量就在code区域

__flash char data[3000] ={1, 2, 3};
注意是双下划线
 楼主| cetclyb 发表于 2007-11-1 12:38 | 显示全部楼层

我测试还是不通过,报错

请问你用的什么编译器?我的是ICC
greenspace 发表于 2007-11-1 15:30 | 显示全部楼层

抱歉,我一直以为是IAR了

iccAVR应该是这样
#pragma data:code 
const table[]={1,2,3}; 
#pragma data:data 
另外,变量名最好不要用data吧,有没有问题我不知道,总归是不好
 楼主| cetclyb 发表于 2007-11-1 17:31 | 显示全部楼层

谢谢,我测试以下

左手换右手 发表于 2007-11-1 19:26 | 显示全部楼层

没有选择器件型号吧

 楼主| cetclyb 发表于 2007-11-2 10:48 | 显示全部楼层

还是有问题

#pragma data:code
const table[4000]={1,2,3};
#pragma data:data 

用MG32芯片,编译不能通过,说CODE区不够,为什么?
gwnpeter 发表于 2007-11-4 07:28 | 显示全部楼层

实验一下这个

static const char data[3000] = {1,2,3,};
在函数里面就必须这样,否则有问题!!!!!!!!!!!!!!!!!!
dadodo 发表于 2007-11-4 11:24 | 显示全部楼层

这样是可以的

在main()前可以这样用:
const char data[3000]={1,2,3};

编译结果为增加了9%的代码。
john871410 发表于 2007-11-5 11:25 | 显示全部楼层

我碰到过这个问题,我已经解决了

方法1:将一维数组定义成二维数组,如:map【3000】---》map【3】【1000】然后程序中用指针访问数组。
方法2:将iccavr生成的makefile文件中bssdata直接加大到你需要的大小就ok。

呵呵
你式把,一定ok的!

Mrtos01@163.com
一颗心的思考 发表于 2014-9-19 23:15 | 显示全部楼层
#pragma data:data
const unsigned char table[]={1,2,3};
const unsigned char a[]="ICCAVR";
#pragma data:code
一颗心的思考 发表于 2014-9-22 20:23 | 显示全部楼层
直接用flash代替const不行吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

70

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部