Экономия progmem

Тема в разделе "Микроконтроллеры AVR", создана пользователем pian, 1 май 2021.

  1. pian

    pian Нуб

    Можно ли объявить переменную а потом сделать ее частью массива для экономии памяти. В данном коде видно что элементы 4,5,6,7 массива повторяются но каждый занимает по 1 байту.
    Код (C++):
    const uint8_t data[] PROGMEM ={10,20,30,40,50,50,50,50}
    А я хочу чтото вроде этого
    Код (C++):
    const uint8_t a = 50;
    const uint8_t data[] PROGMEM ={10,20,30,40,a,a,a,a}
    Что бы 4 одинаковых элемента массива заняли лишь 1 байт
     
  2. Asper Daffy

    Asper Daffy Иксперд

    А добираться до них как планируете? По каким индексам?
     
  3. pian

    pian Нуб

    вот так както
    Код (C++):
    pgm_read_word(&data[i])
     
  4. AlexU

    AlexU Гуру

    Лучше так:
    Код (C++):

    pgm_read_word(data + 1)
     
    иначе может быть неожиданный результат.
    И под элементы всё равно нужно выделять память или менять логику программы, которая будет учитывать "усечённый" массив.
     
    Daniil нравится это.
  5. Asper Daffy

    Asper Daffy Иксперд

    если
    то задача неразрешима. Тему можно закрывать.