原文:
http://blog.csdn.net/jinling1441/article/details/5430706avr-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)。