При программировании для микроконтроллера ESP8266 эффективное управление памятью имеет решающее значение из-за ее ограниченных ресурсов. Одним из распространенных сценариев является работа с массивами строк, которая может потреблять значительный объем драгоценной оперативной памяти. В этой статье мы рассмотрим различные методы циклического перебора строковых массивов, хранящихся в PROGMEM (программной памяти) ESP8266, оптимизируя использование памяти и повышая производительность. Мы предоставим примеры кода для каждого метода, что позволит вам реализовать их в ваших проектах ESP8266.
Методы:
-
Метод: использование макроса F()
Пример кода:const char stringArray[][10] PROGMEM = { "String 1", "String 2", "String 3" }; void loop() { for (uint8_t i = 0; i < sizeof(stringArray) / sizeof(stringArray[0]); i++) { Serial.println(FPSTR((const char*)pgm_read_word(&(stringArray[i])))); delay(1000); } } -
Метод: использование функции PSTR()
Пример кода:const char stringArray[][10] PROGMEM = { PSTR("String 1"), PSTR("String 2"), PSTR("String 3") }; void loop() { for (uint8_t i = 0; i < sizeof(stringArray) / sizeof(stringArray[0]); i++) { char buffer[10]; strcpy_P(buffer, (const char*)pgm_read_word(&(stringArray[i]))); Serial.println(buffer); delay(1000); } } -
Метод: использование модификатора PROGMEM
Пример кода:const char stringArray[][10] PROGMEM = { "String 1", "String 2", "String 3" }; void loop() { for (uint8_t i = 0; i < sizeof(stringArray) / sizeof(stringArray[0]); i++) { char buffer[10]; strcpy_P(buffer, (const char*)pgm_read_word(&(stringArray[i]))); Serial.println(buffer); delay(1000); } } -
Метод: использование атрибута PROGMEM
Пример кода:const char stringArray[][10] __attribute__((section(".progmem"))) = { "String 1", "String 2", "String 3" }; void loop() { for (uint8_t i = 0; i < sizeof(stringArray) / sizeof(stringArray[0]); i++) { char buffer[10]; strcpy_P(buffer, (const char*)pgm_read_word(&(stringArray[i]))); Serial.println(buffer); delay(1000); } }
Используя массивы PROGMEM и соответствующие методы, вы можете эффективно перебирать строковые массивы в проектах ESP8266, оптимизируя использование памяти и улучшая общую производительность. Методы, обсуждаемые в этой статье, предлагают различные подходы к достижению этой цели. Поэкспериментируйте с этими методами и выберите тот, который лучше всего соответствует требованиям вашего конкретного проекта.