Arduino进阶教程——使用PROGMEM在flash中存储数据-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: 奈何col

Arduino进阶教程——使用PROGMEM在flash中存储数据

[复制链接]
发表于 2019-3-12 17:33 | 显示全部楼层
本帖最后由 MrBattery 于 2019-3-12 18:09 编辑

请问下如果我想读取整个数组该怎么写,我本来的数组是unsigned int直接定义的,因为动态内存满了就换成了这个语句,但是我原来的调用语句无法调用我设定的数组了
期待大佬回复


#include <avr/pgmspace.h>
#include <IRremote.h>//红外发射模块接3引脚


IRsend irsend;
const unsigned int geli_on_30Hhigh[254] PROGMEM  = {8900,4450,700,600,650,650, ........(省略).......};
const unsigned int geli_on_16Chigh[254] PROGMEM = {9000,4350,750,1600,650,650,
........(省略).......
};
const unsigned int geli_off[254] PROGMEM = {9000,4350,750,600,700,600,700,1650,
........(省略).......
};

void setup(){}

void loop()
{
  irsend.sendRaw(geli_on_30Hhigh,254,38);   //这里是发射语句,本来是可以发射的,但是现在无法发射红外信号
  delay(500);
  irsend.sendRaw(geli_on_16Chigh,254,38);
  delay(500);
  irsend.sendRaw(geli_off,254,38);
  delay(500);
}


发表于 2019-3-14 17:02 | 显示全部楼层
奈何col 发表于 2017-8-20 00:36
不明白你是什么意思,“存进”即是“写入”

请问下如果我想读取整个数组该怎么写,我本来的数组是unsigned int直接定义的,因为动态内存满了就换成了这个语句,但是我原来的调用语句无法调用我设定的数组了
期待大佬回复


#include <avr/pgmspace.h>
#include <IRremote.h>//红外发射模块接3引脚


IRsend irsend;
const unsigned int geli_on_30Hhigh[254] PROGMEM  = {8900,4450,700,600,650,650, ........(省略).......};
const unsigned int geli_on_16Chigh[254] PROGMEM = {9000,4350,750,1600,650,650,
........(省略).......
};
const unsigned int geli_off[254] PROGMEM = {9000,4350,750,600,700,600,700,1650,
........(省略).......
};

void setup(){}

void loop()
{
  irsend.sendRaw(geli_on_30Hhigh,254,38);   //这里是发射语句,本来是可以发射的,但是现在无法发射红外信号
  delay(500);
  irsend.sendRaw(geli_on_16Chigh,254,38);
  delay(500);
  irsend.sendRaw(geli_off,254,38);
  delay(500);
}

发表于 2019-4-26 11:36 | 显示全部楼层
大佬您好,我现在在学习Arduino,做一些小的控制项目。由于动态内存不足,我想将数组元素存入闪存Flash中,但是找了很多资料没有涉及,也碰到一些道友碰到类似问题,好像没有得到解答,请问如何将数据写入flash呢?恳请您的答复

点评

这个帖子就是讲的存入flash啊  详情 回复 发表于 2019-4-26 11:51
发表于 2019-4-26 11:38 | 显示全部楼层
759717075 发表于 2017-7-24 20:01
请问这存进FLASH的数组还可以进行写入操作吗,比如说定义一个空的数组(全部是0)放在FLASH,后期单片机收 ...

请问后期该问题解决了吗?我现在也遇到了这种问题
 楼主| 发表于 2019-4-26 11:51 | 显示全部楼层
Robot-zjc 发表于 2019-4-26 11:36
大佬您好,我现在在学习Arduino,做一些小的控制项目。由于动态内存不足,我想将数组元素存入闪存Flash中, ...

这个帖子就是讲的存入flash啊
发表于 2019-4-26 14:18 | 显示全部楼层
奈何col 发表于 2019-4-26 11:51
这个帖子就是讲的存入flash啊

是的,但是帖子中的内容都是直接定义或初始化的(const int array[] PROGMEM = {1,2,3,}),如果后期从ATmega328p模拟I/O写入一些数据可否实现?读取flash中的数据的话可以使用相应的命令,那写入呢?有没有类似的方法?
发表于 2019-4-26 14:36 | 显示全部楼层
奈何col 发表于 2019-4-26 11:51
这个帖子就是讲的存入flash啊

有人说,程序运行的时候flash不可写,只能在最开始的时候烧录进去,不会是真的吧?

点评

可以编程写入,具体方法自己研究了  详情 回复 发表于 2019-4-26 15:57
 楼主| 发表于 2019-4-26 15:57 | 显示全部楼层
Robot-zjc 发表于 2019-4-26 14:36
有人说,程序运行的时候flash不可写,只能在最开始的时候烧录进去,不会是真的吧?
...

可以编程写入,具体方法自己研究了
发表于 2019-4-27 09:13 | 显示全部楼层
奈何col 发表于 2019-4-26 15:57
可以编程写入,具体方法自己研究了

嗯嗯,感谢大佬
发表于 2019-11-12 09:55 | 显示全部楼层
MrBattery 发表于 2019-3-14 17:02
请问下如果我想读取整个数组该怎么写,我本来的数组是unsigned int直接定义的,因为动态内存满了就换成了 ...

好像是调用的时候需要加一句 pgm_read_byte(&) “&”号后面跟你的函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:29 , Processed in 0.112957 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表