[AVR单片机] GCC中怎么把数组定义到flash中

[复制链接]
6995|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中很正常 然是一定义就出错 老是提示大   我就是定义 而没有在程序中使用数组
 楼主| 472666GAQ 发表于 2010-9-19 10:40 | 显示全部楼层
帮帮忙呀  再不行的话 我只有换编译器了  真无语了
粉丝 发表于 2010-9-19 13:43 | 显示全部楼层
楼主早就该换啦。换IAR,ICC去。
 楼主| 472666GAQ 发表于 2010-9-19 15:27 | 显示全部楼层
问题解决了    const unsigned char flash_array[1] PROGMEM={0};不是RROGMEM(艺心是这样写的看来是错的) iCC用不惯  我喜欢GCC的简洁编译效率  高免费
xwj 发表于 2010-9-19 18:15 | 显示全部楼层
专家果然是zuangjia,果然是玩GCC、力推GCC的专家。
宇宙飞船 发表于 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={};
粉丝 发表于 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.
 楼主| 472666GAQ 发表于 2010-9-20 12:21 | 显示全部楼层
谢谢大家了  怎么感觉这里的帖子更新的很慢 是不是用avr的少了 难道avr真的不行了?!
粉丝 发表于 2010-9-20 12:31 | 显示全部楼层
只能怪原来的AVR广告商开了一大坏头,只管做广告,不视技术生产的结果,慢慢来。
 楼主| 472666GAQ 发表于 2010-9-20 14:01 | 显示全部楼层
不行就不用avr 不过avr确实比较找人喜欢不知道为什么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

285

帖子

2

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