我是靠谱客的博主 高贵店员,最近开发中收集的这篇文章主要介绍GCC AVR(Atmel Studio+ AVR Studio)如何将结构体数组定义在程序存储器(flash)空间并进行读操作一、定义结构体二、添加头文件三、使用关键字 PROGMEM const 定义结构体数组四、结构体数组的读取操作 ,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一、定义结构体
先添加#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);
最后
以上就是高贵店员为你收集整理的GCC AVR(Atmel Studio+ AVR Studio)如何将结构体数组定义在程序存储器(flash)空间并进行读操作一、定义结构体二、添加头文件
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复