打印
[AVR单片机]

GCC中怎么把数组定义到flash中

[复制链接]
6296|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
472666GAQ|  楼主 | 2010-9-17 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想把一个32k的数组定义到mega128的flash中但是老是提示数组过大 不知道是为什么
#include < avr/pgmspace.h >
const prog_uchar flash_array[]

const unsigned char flash_array[] RROGMEM
这两种 方法都试了不行  然后我把数组的元素调成一个还是不行  还是提示大  ~~~~这是为啥呢

相关帖子

沙发
宇宙飞船| | 2010-9-18 23:59 | 只看该作者
超过32767就有初始化数据超过near (16位限制出错)的警告。progam H文件没有找到对应的解释。
楼主这个贴有点难度!BUG?呵呵。

使用特权

评论回复
板凳
472666GAQ|  楼主 | 2010-9-19 06:39 | 只看该作者
但是 const unsigned char flash_array[1] RROGMEM={0};  也不行  老是包错呀 也就是说只要一往flash中 定义数组就不行 不知道为啥

使用特权

评论回复
地板
472666GAQ|  楼主 | 2010-9-19 09:13 | 只看该作者
程序不把  数组定义到 flash中很正常 然是一定义就出错 老是提示大   我就是定义 而没有在程序中使用数组

使用特权

评论回复
5
472666GAQ|  楼主 | 2010-9-19 10:40 | 只看该作者
帮帮忙呀  再不行的话 我只有换编译器了  真无语了

使用特权

评论回复
6
粉丝| | 2010-9-19 13:43 | 只看该作者
楼主早就该换啦。换IAR,ICC去。

使用特权

评论回复
7
472666GAQ|  楼主 | 2010-9-19 15:27 | 只看该作者
问题解决了    const unsigned char flash_array[1] PROGMEM={0};不是RROGMEM(艺心是这样写的看来是错的) iCC用不惯  我喜欢GCC的简洁编译效率  高免费

使用特权

评论回复
8
xwj| | 2010-9-19 18:15 | 只看该作者
专家果然是zuangjia,果然是玩GCC、力推GCC的专家。

使用特权

评论回复
9
宇宙飞船| | 2010-9-20 11:42 | 只看该作者
给出一种方法参考,把大数组切割成多组存放,读写时用32位读写(far),首地址取 &flash_array_1[]
const unsigned char flash_array_1[32767] PROGMEM={};
const unsigned char flash_array_2[32767] PROGMEM={};
const unsigned char flash_array_3[32767] PROGMEM={};
const unsigned char flash_array_4[32767] PROGMEM={};

使用特权

评论回复
10
粉丝| | 2010-9-20 12:18 | 只看该作者
from the avr-gcc libc 1.4.4

6.5.2.3 #define pgm_read_byte_far(address_long) __ELPM((uint32_-
t)(address_long))
Readabytefromtheprogramspacewith a 32-bit(far) address.

使用特权

评论回复
11
472666GAQ|  楼主 | 2010-9-20 12:21 | 只看该作者
谢谢大家了  怎么感觉这里的帖子更新的很慢 是不是用avr的少了 难道avr真的不行了?!

使用特权

评论回复
12
粉丝| | 2010-9-20 12:31 | 只看该作者
只能怪原来的AVR广告商开了一大坏头,只管做广告,不视技术生产的结果,慢慢来。

使用特权

评论回复
13
472666GAQ|  楼主 | 2010-9-20 14:01 | 只看该作者
不行就不用avr 不过avr确实比较找人喜欢不知道为什么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

285

帖子

2

粉丝