arduino闪存阵列

arduino flash memory array

我有许多不同大小的数组存储在闪存中。 我可以使用

访问单个数组条目
byte j = pgm_read_byte(&(array[x]));

我想做的是将闪存中的数组作为参数传递给函数。我试过给出一个指向数组的指针作为参数,但这会产生编译错误:

void callPGM2(byte arr_size, byte *arr) {
..
..
}

ptr2 = &pgm_read_byte(&(array_1[0]));
callPGM2(5, &ptr2);

能否将完整数组作为函数参数从闪存传递?

无法直接传递指向 PROGMEM 变量的指针,因为 AVR 的哈佛架构有 2 个地址 spaceC 无法直接表达 - 您需要临时将内存复制到 RAM例如,使用 memcpy_P

并且您想了解 pgmspace 库中提供的函数。它等同于许多 C 函数,例如 strcmp,允许您在程序 space.

中使用常量参数

将字符串从闪存复制到 RAM

#include<avr/pgmspace.h>
const byte Update_1[5]  PROGMEM = {0x01, 0xB2, 0x02, 0xFF, 0xFF};
byte buffer2[5];
setup {
  memcpy_P (buffer2, &(Update_1),5);
}