一、定义结构体
先添加#include <avr/io.h>。
#include <avr/io.h>
然后定义如下的结构体。
typedef struct tagFORMAT_SET_STRUCT
{
uint8_t Decimal;
int16_t Min;
int16_t Max;
int16_t Default;
} FORMAT_SET_STRUCT,*FORMAT_SET_STRUCT_PTR;
二、添加头文件<avr/pgmspace.h>
只有添加头文件<avr/pgmspace.h>才能进行程序存储器(flash)的定义和读取操作。
#include <avr/pgmspace.h>
三、使用关键字 PROGMEM const 定义结构体数组
PROGMEM const FORMAT_SET_STRUCT SET_DEFAULT_BUFFER[30] = {
{0x00 , 0 , 9999 , 0},
{0x01 , 0 , 1000 , 0},
{0x03 , 0 , 29999 , 2430},
{0x03 , 0 , 29999 , 280},
{0x03 , 0 , 29999 , 0},
{0x01 , 0 , 8 , 6},
{0x01 , 0 , 100 , 0},
{0x00 , 0 , 3 , 0},
{0x00 , 1 , 2 , 2},
{0x00 , 0 , 1 , 0},
{0x01 , 0 , 200 , 100},
{0x00 , 0 , 1 , 0},
{0x00 , -40 , 40 , 4},
{0x00 , 1 , 200 , 1},
{0x00 , 0 , 8 , 6},
{0x00 , 0 , 2 , 0},
{0x00 , 0 , 1 , 0},
{0x00 , 0 , 32767 , 1206},
{0x00 , 0 , 32767 , 6341},
{0x00 , 0 , 32767 , 350},
{0x00 , 0 , 32767 , 2410},
{0x00 , 0 , 32767 , 4218},
{0x00 , 0 , 32767 , 21006},
{0x00 , 0 , 32767 , 4222},
{0x00 , 0 , 32767 , 21035},
{0x00 , 0 , 4095 , 812},
{0x00 , 0 , 4095 , 3862},
{0x00 , 0 , 4095 , 694},
{0x00 , 0 , 4095 , 3488},
{0x00 , 0 , 1 , 0},
};
四、结构体数组的读取操作
1、读取结构体数组中的16位数值,使用pgm_read_word(&)库函数
例如:
int16_t m;
m = pgm_read_word(&SET_DEFAULT_BUFFER[0].Default);
2、读取结构体数组中的8位数值,使用pgm_read_byte(&)库函数
例如:
uint8_t n;
n = pgm_read_byte(&SET_DEFAULT_BUFFER[1].Decimal);