Hi! Простой пример кода ниже (такое определение описано на страничке AlexGyver "РАБОТА С PROGMEM ПАМЯТЬЮ").
При любом единичном цикле for (uint16_t n=0; n<1; n++) или for (uint16_t n=1; n<2; n++) данные массива читаются правильно.
При любом не единичном цикле for (uint16_t n=0; n<2; n++) или for (uint16_t n=1; n<3; n++) данные массива читаются не правильно.
Это на обычной Ардуине(328P).
Кто подскажет? Может компилятор чего оптимизирует?
При любом единичном цикле for (uint16_t n=0; n<1; n++) или for (uint16_t n=1; n<2; n++) данные массива читаются правильно.
При любом не единичном цикле for (uint16_t n=0; n<2; n++) или for (uint16_t n=1; n<3; n++) данные массива читаются не правильно.
Это на обычной Ардуине(328P).
Кто подскажет? Может компилятор чего оптимизирует?
Форматирование (BB-код):
const uint16_t _A[ ]PROGMEM = {0x11, 0x12, 0x13, 0x14};
const uint16_t _B[ ] PROGMEM = {0x21, 0x22, 0x23, 0x24};
const uint16_t _C[ ] PROGMEM = {0x31, 0x32, 0x33, 0x34};
const uint16_t* const Ch_arr[ ] PROGMEM = {_A, _B, _C};
void setup() {
Serial.begin(9600);
uint16_t ni_arr;
for (uint16_t n=0; n<1; n++){
for (uint16_t i=0; i<4; i++){
ni_arr=pgm_read_word(&Ch_arr[n]);
Serial.println(ni_arr, HEX);
}
}
}
void loop() {
}
Изменено: