打印
[AVR单片机]

问个 GCC 在FLASH中的数组使用问题????

[复制链接]
2669|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xumax|  楼主 | 2007-11-13 08:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
xumax|  楼主 | 2007-11-14 15:29 | 只看该作者

自己顶一下

使用特权

评论回复
板凳
coldra| | 2007-11-14 15:31 | 只看该作者

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

使用特权

评论回复
地板
xumax|  楼主 | 2007-11-14 15:43 | 只看该作者

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

找了好久 也没找到解决办法,

使用特权

评论回复
5
xumax|  楼主 | 2007-11-14 15:57 | 只看该作者

kkkk

使用特权

评论回复
6
洪七公| | 2007-11-14 18:10 | 只看该作者

搞个专用函数即可

使用特权

评论回复
7
ATmega16| | 2007-11-15 13:18 | 只看该作者

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


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

使用特权

评论回复
8
xumax|  楼主 | 2007-11-15 16:29 | 只看该作者

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

定义数组的形参时 没用 const prog_定义
现在用 PGM_P 的指针方式 和 直接数组名方式 都可以啦

使用特权

评论回复
9
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++))));
结果还是我想要的结果。

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

往有人能指出我哪里出错

使用特权

评论回复
10
muslimsali| | 2007-11-22 17:27 | 只看该作者

补充

WraDataByte(~(__LPM_classic__(pic_tab+(tempaddress++))));
改为:
WraDataByte((__LPM_classic__(pic_tab+(tempaddress++))));

使用特权

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

本版积分规则

44

主题

201

帖子

6

粉丝