打印
[AVR单片机]

同问 gcc里flash的数组

[复制链接]
2181|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++));
就可以了

使用特权

评论回复
5
muslimsali|  楼主 | 2007-11-23 15:05 | 只看该作者

谢谢

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

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


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

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

呵呵,再次感谢

使用特权

评论回复
6
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

粉丝