Если вы работаете с микроконтроллером ESP8266 и вам необходимо перебирать массивы, хранящиеся в PROGMEM (программная память), вы попали по адресу. В этой статье мы углубимся в различные методы выполнения этой задачи, сопровождаемые разговорными объяснениями и примерами кода. Давайте начнем!
Метод 1: использование pgm_read_byte()
Функция pgm_read_byte() позволяет вам прочитать байт из PROGMEM. Вы можете использовать эту функцию в цикле for для перебора массива. Вот пример:
#include <pgmspace.h>
const uint8_t myArray[] PROGMEM = {1, 2, 3, 4, 5};
void loopThroughArray() {
for (int i = 0; i < sizeof(myArray); i++) {
uint8_t value = pgm_read_byte(&myArray[i]);
// Process the value as needed
}
}
Метод 2: использование pgm_read_word()
Если вы работаете с массивом 2-байтовых значений (например, целых чисел), вы можете использовать функцию pgm_read_word(). Вот пример:
#include <pgmspace.h>
const int myArray[] PROGMEM = {100, 200, 300, 400, 500};
void loopThroughArray() {
for (int i = 0; i < sizeof(myArray) / sizeof(myArray[0]); i++) {
int value = pgm_read_word(&myArray[i]);
// Process the value as needed
}
}
Метод 3: непосредственное использование атрибута PROGMEM
В некоторых случаях вы можете предпочесть использовать атрибут PROGMEM непосредственно в объявлении массива. Вот пример:
const char myString[] PROGMEM = "Hello, World!";
void loopThroughString() {
const char* ptr = myString;
while (pgm_read_byte(ptr) != '\0') {
// Process the character
ptr++;
}
}
В этой статье мы рассмотрели несколько методов циклического обхода массивов PROGMEM на ESP8266. Используя такие функции, как pgm_read_byte() и pgm_read_word(), мы можем получить доступ к данным, хранящимся в памяти программы, и обработать их соответствующим образом. Независимо от того, работаете ли вы с байтовыми массивами или строками, эти методы пригодятся. Приятного кодирования!