[AVR单片机] 问个 GCC 在FLASH中的数组使用问题????

[复制链接]
 楼主| xumax 发表于 2007-11-13 08:50 | 显示全部楼层 |阅读模式
  在AVR 的flash中定义了个数组
此数组名不能做为实参调用,不知如何解决
那位 GCC高手帮帮忙 !!

觉得GCC在使用FLASH是挺麻烦 与C不兼容 不如其他编译器来的方便
 楼主| xumax 发表于 2007-11-14 15:29 | 显示全部楼层

自己顶一下

coldra 发表于 2007-11-14 15:31 | 显示全部楼层

GCC在使用FLASH操作是有点不方便

 楼主| xumax 发表于 2007-11-14 15:43 | 显示全部楼层

是啊 数组名不能被引用,只能直接读取

找了好久 也没找到解决办法,
 楼主| xumax 发表于 2007-11-14 15:57 | 显示全部楼层
洪七公 发表于 2007-11-14 18:10 | 显示全部楼层

搞个专用函数即可

ATmega16 发表于 2007-11-15 13:18 | 显示全部楼层

指针都能传递,数组名哪有传递不了的。


数组名不就是个常量指针,
看看GCC的头文件,有很多函数的参数PGM_P,
指针都能传递,数组名哪有传递不了的。

 楼主| xumax 发表于 2007-11-15 16:29 | 显示全部楼层

哈哈 怪我 函数的数组形参定义错啦

定义数组的形参时 没用 const prog_定义
现在用 PGM_P 的指针方式 和 直接数组名方式 都可以啦
muslimsali 发表于 2007-11-22 17:23 | 显示全部楼层

gcc里flash的数组

我也同样定义了数组:
const prog_uchar pic_tab[]=/*256*30*/
{......};
但是在用的时候:
如:WraDataByte(pic_tab[address++]);
编译出来就不对,老是编译成:ldi的指令,出来的数字都是乱的。
不知道我哪里出错了。

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

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

往有人能指出我哪里出错
muslimsali 发表于 2007-11-22 17:27 | 显示全部楼层

补充

WraDataByte(~(__LPM_classic__(pic_tab+(tempaddress++))));
改为:
WraDataByte((__LPM_classic__(pic_tab+(tempaddress++))));
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

202

帖子

7

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

45

主题

202

帖子

7

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