Arduino 中使用 PROGMEM 存储在闪存中的字符串数组

c++

1个回答

写回答

18682453421

2025-06-23 05:10

+ 关注

word
word

Arduino中使用PROGMEM存储在闪存中的字符串数组

在Arduino开发中,我们常常需要使用字符串数组来存储和处理大量的文本数据。然而,由于Arduino的内存有限,直接将字符串数组存储在SRAM(静态随机访问存储器)中会导致内存不足的问题。为了解决这个问题,我们可以使用PROGMEM来将字符串数组存储在闪存中,从而节省内存空间。

什么是PROGMEM?

PROGMEM是Arduino中的一个关键字,它用于将数据存储在闪存(也称为程序存储器)中。闪存是一种非易失性存储器,它可以在断电后保持数据的完整性。相比之下,SRAM是易失性存储器,会在断电后丢失数据。

如何使用PROGMEM存储字符串数组?

要使用PROGMEM存储字符串数组,我们首先需要定义一个字符串数组,并使用PROGMEM关键字将其存储在闪存中。然后,我们可以使用pgm_read_word_near函数来读取闪存中的字符串。

下面是一个简单的例子,演示了如何使用PROGMEM存储和读取字符串数组:

cpp

#include <avr/pgmspace.h>

const char string1[] PROGMEM = "Hello";

const char string2[] PROGMEM = "World";

void setup() {

Serial.begin(9600);

delay(1000);

// 读取并打印字符串1

char buffer[10];

strcpy_P(buffer, (char*)pgm_read_word_near(&string1));

Serial.println(buffer);

// 读取并打印字符串2

strcpy_P(buffer, (char*)pgm_read_word_near(&string2));

Serial.println(buffer);

}

void loop() {

// 程序循环

}

在上面的示例中,我们定义了两个字符串常量string1和string2,并使用PROGMEM关键字将它们存储在闪存中。然后,在setup函数中,我们使用strcpy_P函数和pgm_read_word_near函数将存储在闪存中的字符串复制到缓冲区中,并通过串口打印出来。

如何在PROGMEM中存储字符串数组?

如果我们需要存储一个字符串数组,可以使用多维数组的形式。下面是一个示例代码,演示了如何在PROGMEM中存储和读取字符串数组:

cpp

#include <avr/pgmspace.h>

const char array[][10] PROGMEM = {

"String 1",

"String 2",

"String 3"

};

void setup() {

Serial.begin(9600);

delay(1000);

// 读取并打印字符串数组

char buffer[10];

for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++) {</p> strcpy_P(buffer, (char*)pgm_read_word_near(&array[i]));

Serial.println(buffer);

}

}

void loop() {

// 程序循环

}

在上面的示例中,我们定义了一个二维字符串数组array,并使用PROGMEM关键字将其存储在闪存中。然后,在setup函数中,我们使用for循环遍历数组,并使用strcpy_P函数和pgm_read_word_near函数将存储在闪存中的字符串复制到缓冲区中,并通过串口打印出来。

使用PROGMEM存储字符串数组可以帮助我们节省Arduino的内存空间,特别是当需要处理大量文本数据时。通过将字符串数组存储在闪存中,我们可以有效地利用Arduino的资源,提高程序的性能和稳定性。希望本文对你理解Arduino中使用PROGMEM存储字符串数组有所帮助。

如有疑问,欢迎留言讨论!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号