打印
[AVR单片机]

问个gcc 将常量定义到flash的问题

[复制链接]
2263|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dlwlmlj|  楼主 | 2008-5-20 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用GCC的时候定义
数组
unsigned char const  sz[16] __attribute__ ((section (".progmem")))={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//led0-9对应显示值断值
用于数码管显示 
为什么 不好用啊!
unsigned char const  sz[16] 就好用!

我又单独定义了个小数点
unsigned char const  dian __attribute__ ((section (".progmem")))=0x80;//显示用小数点
不优化的时候不好用!
优化的时候好用!
那位大侠指导一下啊!
这样有错没有?!

相关帖子

沙发
simon21ic| | 2008-5-20 19:07 | 只看该作者

AVR-GCC?

使用特权

评论回复
板凳
ATmega32l| | 2008-5-21 08:22 | 只看该作者

不知道你说好用不好用什么标准?

好用不好用具体指什么?

使用特权

评论回复
地板
dlwlmlj|  楼主 | 2008-5-21 09:39 | 只看该作者

读会来的数

数码管显示错误!
数组是要显示数字的数码管的段值啊!

使用特权

评论回复
5
农民讲习所| | 2008-5-21 10:24 | 只看该作者

读的时候

#define FLASH    prog_uchar
#define FLASHU8(x)    pgm_read_byte(x)

FLASH sz[16] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//led0-9对应显示值断值

读的时候一定使用FLASHU8(x):
 FLASHU8(sz + i);

使用特权

评论回复
6
ATmega32l| | 2008-5-21 12:25 | 只看该作者

读取FLASH

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

//读取FLSH区2字节变量 
#define pgm16(A)
((typeof(A))pgm_read_word(&(A))) 

//读取FLSH区4字节变量 
#define pgm32(A)
((typeof(A))pgm_read_dword(&(A))) 

使用特权

评论回复
7
dlwlmlj|  楼主 | 2008-5-21 12:42 | 只看该作者

ok

好用了!谢谢大侠!

使用特权

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

本版积分规则

46

主题

436

帖子

0

粉丝