[AVR单片机] 同问 gcc里flash的数组

[复制链接]
3188|5
 楼主| muslimsali 发表于 2007-11-23 09:14 | 显示全部楼层 |阅读模式
我定义了数组:
const prog_uchar pic_tab[]=/*256*30*/
{......};
但是在用的时候:
如:WraDataByte(pic_tab[address++]);
编译出来就不对,老是编译成:ldi的指令,出来的数字都是乱的。
不知道我哪里出错了。

我的解决办法是:
WraDataByte(~(__LPM_classic__(pic_tab+(tempaddress++))));
结果还是我想要的结果。

但这种方法好像不通用的,换编译器就要改的。

望有人能指出我哪里出错 
 
工作狂人 发表于 2007-11-23 10:51 | 显示全部楼层

re:

#include <avr/pgmspace.h>

pgm_read_byte(&pic_tab[0]);
农民讲习所 发表于 2007-11-23 11:29 | 显示全部楼层

const -> PROGMEM

mgarm 发表于 2007-11-23 11:38 | 显示全部楼层

读FLASH内数据用pgm_read_byte

WraDataByte(pgm_read_byte(pic_tab + address++));
就可以了
 楼主| muslimsali 发表于 2007-11-23 15:05 | 显示全部楼层

谢谢

哈哈:真心感谢以上的三位:

re:农民伯伯
其实const可以不要的。prog_char已经说明是在flash里了。


re:工作狂人
是你让我把问题想明白了
pgm_read_byte和我的__LPM_classic__是一个东西;
关键是 & 这个字符!
自己c太菜了,刚从汇编转型呢!

re:mgarm
你的解和我的解一样,呵呵。
但都解决了问题!对吧!

呵呵,再次感谢
ATmega16 发表于 2007-11-24 09:14 | 显示全部楼层

WraDataByte(pgm8(pic_tab[address]));

//读取FLSH区1字节变量 
#define pgm8(A)
((typeof(A))pgm_read_byte(&(A)))


WraDataByte(pgm8(pic_tab[address]));
 

移植的其他编译器时
#define pgm8(A) (A)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

115

帖子

0

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