GCC AVR(Atmel Studio+ AVR Studio)如何将结构体数组定义在程序存储器(flash)空间并进行读操作

一、定义结构体

先添加#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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值