原文:http://blog.csdn.net/jinling1441/article/details/5430706
avr-libc 支持头文件:pgmspace.h
#include <avr/pgmspace.h>
在ICC AVR下的代码:
flash unsigned char seg8[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
但是在GCC-AVR中却要使用:
const unsigned char seg8[] PROGMEM = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
以前本来可以这样写的:
const prog_uchar seg8[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
但
是在Fedora Linux
22中,头文件avr/pgmspace.h里面的注释里已经明确声明了这种写法已经不赞成使用了(deprecated),如果不定义(define)
特殊的宏(这个目前我还暂时没找到),是无法再用这种写法的。所以还是用PROGMEM后置那种写法吧。
调用数组时,不能再像WinAVR中用seg8[5]那种调用方法了,应该改成:pgm_read_byte(seg8 + 5)。当然seg8[0]就该改成pgm_read_byte(seg8 + 0)或者直接pgm_read_byte(seg8)。