PROGMEM

You can store data in program memory instead of RAM and to use it, load it directly frm there.

const uint16_t DATA1_Length = 24;
const uint8_t DATA1[] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const uint16_t DATA2_Length = 8;
const uint16_t DATA2[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

const uint16_t DATA3_Length = 32;
const uint32_t DATA3[] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

void foo1(int baseAddr, int len) {
  int addr;
  for (int i = 0; i < len; i++) {
    addr = baseAddr + sizeof(uint8_t) * i;
    uint8_t value = pgm_read_byte(addr);
  }
}

void foo2(int baseAddr, int len) {
  int addr;
  for (int i = 0; i < len; i++) {
    addr = baseAddr + sizeof(uint16_t) * i;
    uint16_t value = pgm_read_word(addr);
  }
}

void foo3(int baseAddr, int len) {
  int addr;
  for (int i = 0; i < len; i++) {
    addr = baseAddr + sizeof(uint32_t) * i;
    uint32_t value = pgm_read_double(addr);
  }
}

foo1(&DATA1, DATA1_Legnth);
foo2(&DATA2, DATA2_Legnth);
foo3(&DATA3, DATA3_Legnth);

This page was last edited on 2024-06-28 07:32

Powered by Wiki|Docs

This page was last edited on 2024-06-28 07:32

Bjørn Singer
Private wiki!

Powered by Wiki|Docs