Dynamic Memory Full

Hello,

I have a problem with the dynamic memory of arduino atmega328...

I need to use a table with some data. For that i created a 2D array.
In this array, i need to search the position of a specific value.

To do that, i program some code... but this code use a lot of dynamic memory.

Do you have any idea, how to do the same function but with less memory?

char matrix[][4] = {
  {0,  0,  0,  0},
  {1,  0,  0,  1},
  {2,  0,  0,  2},
  {3,  0,  0,  3},
  {4,  0,  0,  4},
  {5,  0,  0,  5},
  {6,  0,  0,  6},
  {7,  0,  0,  7},
  {8,  0,  0,  8},
  {9,  0,  0,  9},
  {10, 0,  0,  10},
  {11, 0,  0,  11},
  {12, 0,  0,  12},
  {13, 0,  0,  13},
  {14, 0,  0,  14},
  {15, 0,  0,  16},
  {16, 0,  0,  17},
  {17, 0,  0,  18},
  {18, 0,  0,  19},
  {19, 0,  0,  20},
  {20, 0,  0,  21},
  {21, 0,  0,  22},
  {22, 0,  0,  24},
  {23, 0,  0,  25},
  {24, 0,  0,  26},
  {25, 0,  0,  27},
  {26, 0,  0,  28},
  {27, 0,  0,  30},
  {28, 0,  0,  31},
  {29, 0,  0,  32},
  {30, 0,  0,  34},
  {31, 0,  0,  35},
  {32, 0,  0,  36},
  {33, 0,  0,  38},
  {34, 0,  0,  39},
  {35, 0,  0,  41},
  {36, 0,  0,  42},
  {37, 0,  0,  44},
  {38, 0,  0,  45},
  {39, 0,  0,  47},
  {40, 0,  0,  49},
  {40, 30, 0,  50},
  {41, 0,  0,  51},
  {41, 30, 0,  52},
  {42, 0,  0,  52},
  {42, 30, 0,  53},
  {43, 0,  0,  54},
  {43, 30, 0,  55},
  {44, 0,  0,  56},
  {44, 30, 0,  57},
  {45, 0,  0,  58},
  {45, 30, 0,  59},
  {46, 0,  1,  0},
  {46, 30, 1,  1},
  {47, 0,  1,  2},
  {47, 30, 1,  3},
  {48, 0,  1,  5},
  {48, 30, 1,  6},
  {49, 0,  1,  7},
  {49, 30, 1,  8},
  {50, 0,  1,  9},
  {50, 30, 1,  10},
  {51, 0,  1,  12},
  {51, 30, 1,  13},
  {52, 0,  1,  14},
  {52, 30, 1,  15},
  {53, 0,  1,  17},
  {53, 30, 1,  18},
  {54, 0,  1,  20},
  {54, 30, 1,  22},
  {55, 0,  1,  23},
  {55, 30, 1,  24},
  {56, 0,  1,  26},
  {56, 30, 1,  27},
  {57, 0,  1,  29},
  {57, 30, 1,  31},
  {58, 0,  1,  33},
  {58, 30, 1,  34},
  {59, 0,  1,  36},
  {59, 30, 1,  38},
  {60, 0,  1,  41},
  {60, 15, 1,  42},
  {60, 30, 1,  43},
  {60, 45, 1,  44},
  {61, 0,  1,  45},
  {61, 15, 1,  46},
  {61, 30, 1,  47},
  {61, 45, 1,  48},
  {62, 0,  1,  49},
  {62, 15, 1,  50},
  {62, 30, 1,  51},
  {62, 45, 1,  53},
  {63, 0,  1,  54},
  {63, 15, 1,  55},
  {63, 30, 1,  56},
  {63, 45, 1,  57},
  {64, 0,  1,  59},
  {64, 15, 2,  0},
  {64, 30, 2,  2},
  {64, 45, 2,  3},
  {65, 0,  2,  4},
  {65, 15, 2,  6},
  {65, 30, 2,  7},
  {65, 45, 2,  8},
  {66, 0,  2,  10},
  {66, 15, 2,  11},
  {66, 30, 2,  13},
  {66, 45, 2,  14},
  {67, 0,  2,  16},
  {67, 15, 2,  18},
  {67, 30, 2,  1},
  {67, 45, 2,  21},
  {68, 0,  2,  23},
  {68, 15, 2,  25},
  {68, 30, 2,  26},
  {68, 45, 2,  28},
  {69, 0,  2,  30},
  {69, 15, 2,  32},
  {69, 30, 2,  34},
  {69, 45, 2,  36},
  {70, 0,  2,  38},
  {70, 10, 2,  40},
  {70, 20, 2,  41},
  {70, 30, 2,  43},
  {70, 40, 2,  44},
  {70, 50, 2,  46},
  {71, 0,  2,  47},
  {71, 10, 2,  49},
  {71, 20, 2,  50},
  {71, 30, 2,  52},
  {71, 40, 2,  53},
  {71, 50, 2,  55},
  {72, 0,  2,  57},
  {72, 10, 2,  59},
  {72, 20, 3,  0},
  {72, 30, 3,  2},
  {72, 40, 3,  4},
  {72, 50, 3,  6},
  {73, 0,  3,  8},
  {73, 10, 3,  10},
  {73, 20, 3,  12},
  {73, 30, 3,  14},
  {73, 40, 3,  16},
  {73, 50, 3,  18},
  {74, 0,  3,  20},
  {74, 10, 3,  22},
  {74, 20, 3,  24},
  {74, 30, 3,  26},
  {74, 40, 3,  29},
  {74, 50, 3,  31},
  {75, 0,  3,  33},
  {75, 10, 3,  36},
  {75, 20, 3,  38},
  {75, 30, 3,  41},
  {75, 40, 3,  43},
  {75, 50, 3,  46},
  {76, 0,  3,  49},
  {76, 10, 3,  51},
  {76, 20, 3,  54},
  {76, 30, 3,  57},
  {76, 40, 4,  0},
  {76, 50, 4,  3},
  {77, 0,  4,  6},
  {77, 10, 4,  9},
  {77, 20, 4,  13},
  {77, 30, 4,  16},
  {77, 40, 4,  19},
  {77, 50, 4,  23},
  {78, 0,  4,  27},
  {78, 10, 4,  30},
  {78, 20, 4,  34},
  {78, 30, 4,  38},
  {78, 40, 4,  42},
  {78, 50, 4,  46},
  {79, 0,  4,  50},
  {79, 10, 4,  55},
  {79, 20, 4,  59},
  {79, 30, 5,  4},
  {79, 40, 5,  8},
  {79, 50, 5,  13},
  {80, 0,  5,  18},
  {80, 5,  5,  21},
  {80, 10, 5,  23},
  {80, 15, 5,  26},
  {80, 20, 5,  29},
  {80, 25, 5,  31},
  {80, 30, 5,  34},
  {80, 35, 5,  37},
  {80, 40, 5,  40},
  {80, 45, 5,  43},
  {80, 50, 5,  46},
  {80, 55, 5,  49},
  {81, 0,  5,  52},
  {81, 5,  5,  55},
  {81, 10, 5,  58},
  {81, 15, 6,  1},
  {81, 20, 6,  4},
  {81, 25, 6,  8},
  {81, 30, 6,  11},
  {81, 35, 6,  14},
  {81, 40, 6,  18},
  {81, 45, 6,  21},
  {81, 50, 6,  25},
  {81, 55, 6,  28},
  {82, 0,  6,  32},
  {82, 5,  6,  36},
  {82, 10, 6,  40},
  {82, 15, 6,  44},
  {82, 20, 6,  48},
  {82, 25, 6,  52},
  {82, 30, 6,  56},
  {82, 35, 7,  0},
  {82, 40, 7,  5},
  {82, 45, 7,  9},
  {82, 50, 7,  13},
  {82, 55, 7,  18},
  {83, 0,  7,  23},
  {83, 5,  7,  27},
  {83, 10, 7,  32},
  {83, 15, 7,  37},
  {83, 20, 7,  42},
  {83, 25, 7,  48},
  {83, 30, 7,  53},
  {83, 35, 7,  58},
  {83, 40, 8,  4},
  {83, 45, 8,  9},
  {83, 50, 8,  15},
  {83, 55, 8,  21},
  {84, 0,  8,  27},
  {84, 5,  8,  33},
  {84, 10, 8,  39},
  {84, 15, 8,  45},
  {84, 20, 8,  52},
  {84, 25, 8,  59},
  {84, 30, 9,  6},
  {84, 35, 9,  13},
  {84, 40, 9,  20},
  {84, 45, 9,  28},
  {84, 50, 9,  35},
  {84, 55, 9,  42},
  {85, 0,  9,  50},
  {85, 5,  9,  58},
  {85, 10, 10, 7},
  {85, 15, 10, 16},
  {85, 20, 10, 25},
  {85, 25, 10, 34},
  {85, 30, 10, 43},
  {85, 35, 10, 53},
  {85, 40, 11, 3},
  {85, 45, 11, 13},
  {85, 50, 11, 23},
  {85, 55, 11, 33},
  {86, 0,  11, 44},
  {86, 5,  11, 55},
  {86, 10, 12, 6},
  {86, 15, 12, 17},
  {86, 20, 12, 29},
  {86, 25, 12, 41},
  {86, 30, 12, 53},
  {86, 35, 13, 6},
  {86, 40, 13, 20},
  {86, 45, 13, 34},
  {86, 50, 13, 49},
  {86, 55, 14, 5},
  {87, 0,  14, 21},
  {87, 5,  14, 38},
  {87, 10, 14, 55},
  {87, 15, 15, 12},
  {87, 20, 15, 30},
  {87, 25, 15, 48},
  {87, 30, 16, 7},
  {87, 35, 16, 26},
  {87, 40, 16, 46},
  {87, 45, 17, 7},
  {87, 50, 17, 29},
  {87, 55, 17, 52},
  {88, 0,  18, 16},
  {88, 5,  18, 41},
  {88, 10, 19, 7},
  {88, 15, 19, 34},
  {88, 20, 20, 2},
  {88, 25, 20, 31},
  {88, 30, 21, 1},
  {88, 35, 21, 32},
  {88, 40, 22, 4},
  {88, 45, 22, 38},
  {88, 50, 23, 14},
  {88, 55, 23, 52},
  {89, 0,  24, 32},
  {89, 5,  25, 14},
  {89, 10, 25, 58},
  {89, 15, 26, 44},
  {89, 20, 27, 32},
  {89, 25, 28, 22},
  {89, 30, 29, 4},
  {89, 35, 30, 8},
  {89, 40, 31, 4},
  {89, 45, 32, 2},
  {89, 50, 33, 2},
  {89, 55, 34, 5},
  {90, 0,  35, 10}
};

char value = 7;
int found;
int xi;
void setup() {

  Serial.begin(9600);


}

void loop() {

  for (xi == 0; xi < 300; xi++) {
    if (value == matrix[xi][0]) {
      found = xi;
      break;
    }
  }


  Serial.println(found);
  Serial.println("--------");
  delay(1000);

}


Thank you,
Greetings

Put it in flash or eeprom.

Thank you very much...

32K Flash vs 2K SRAM, a huge diference :slight_smile:

It's working only with 10% of dynamic memory :slight_smile:

Solved! Thank you :slight_smile:

#include <avr/pgmspace.h>


const PROGMEM  uint8_t matrix[][4] = {
  {0,  0,  0,  0},
  {1,  0,  0,  1},
  {2,  0,  0,  2},
  {3,  0,  0,  3},
  {4,  0,  0,  4},
  {5,  0,  0,  5},
  {6,  0,  0,  6},
  {7,  0,  0,  7},
  {8,  0,  0,  8},
  {9,  0,  0,  9},
  {10, 0,  0,  10},
  {11, 0,  0,  11},
  {12, 0,  0,  12},
  {13, 0,  0,  13},
  {14, 0,  0,  14},
  {15, 0,  0,  16},
  {16, 0,  0,  17},
  {17, 0,  0,  18},
  {18, 0,  0,  19},
  {19, 0,  0,  20},
  {20, 0,  0,  21},
  {21, 0,  0,  22},
  {22, 0,  0,  24},
  {23, 0,  0,  25},
  {24, 0,  0,  26},
  {25, 0,  0,  27},
  {26, 0,  0,  28},
  {27, 0,  0,  30},
  {28, 0,  0,  31},
  {29, 0,  0,  32},
  {30, 0,  0,  34},
  {31, 0,  0,  35},
  {32, 0,  0,  36},
  {33, 0,  0,  38},
  {34, 0,  0,  39},
  {35, 0,  0,  41},
  {36, 0,  0,  42},
  {37, 0,  0,  44},
  {38, 0,  0,  45},
  {39, 0,  0,  47},
  {40, 0,  0,  49},
  {40, 30, 0,  50},
  {41, 0,  0,  51},
  {41, 30, 0,  52},
  {42, 0,  0,  52},
  {42, 30, 0,  53},
  {43, 0,  0,  54},
  {43, 30, 0,  55},
  {44, 0,  0,  56},
  {44, 30, 0,  57},
  {45, 0,  0,  58},
  {45, 30, 0,  59},
  {46, 0,  1,  0},
  {46, 30, 1,  1},
  {47, 0,  1,  2},
  {47, 30, 1,  3},
  {48, 0,  1,  5},
  {48, 30, 1,  6},
  {49, 0,  1,  7},
  {49, 30, 1,  8},
  {50, 0,  1,  9},
  {50, 30, 1,  10},
  {51, 0,  1,  12},
  {51, 30, 1,  13},
  {52, 0,  1,  14},
  {52, 30, 1,  15},
  {53, 0,  1,  17},
  {53, 30, 1,  18},
  {54, 0,  1,  20},
  {54, 30, 1,  22},
  {55, 0,  1,  23},
  {55, 30, 1,  24},
  {56, 0,  1,  26},
  {56, 30, 1,  27},
  {57, 0,  1,  29},
  {57, 30, 1,  31},
  {58, 0,  1,  33},
  {58, 30, 1,  34},
  {59, 0,  1,  36},
  {59, 30, 1,  38},
  {60, 0,  1,  41},
  {60, 15, 1,  42},
  {60, 30, 1,  43},
  {60, 45, 1,  44},
  {61, 0,  1,  45},
  {61, 15, 1,  46},
  {61, 30, 1,  47},
  {61, 45, 1,  48},
  {62, 0,  1,  49},
  {62, 15, 1,  50},
  {62, 30, 1,  51},
  {62, 45, 1,  53},
  {63, 0,  1,  54},
  {63, 15, 1,  55},
  {63, 30, 1,  56},
  {63, 45, 1,  57},
  {64, 0,  1,  59},
  {64, 15, 2,  0},
  {64, 30, 2,  2},
  {64, 45, 2,  3},
  {65, 0,  2,  4},
  {65, 15, 2,  6},
  {65, 30, 2,  7},
  {65, 45, 2,  8},
  {66, 0,  2,  10},
  {66, 15, 2,  11},
  {66, 30, 2,  13},
  {66, 45, 2,  14},
  {67, 0,  2,  16},
  {67, 15, 2,  18},
  {67, 30, 2,  1},
  {67, 45, 2,  21},
  {68, 0,  2,  23},
  {68, 15, 2,  25},
  {68, 30, 2,  26},
  {68, 45, 2,  28},
  {69, 0,  2,  30},
  {69, 15, 2,  32},
  {69, 30, 2,  34},
  {69, 45, 2,  36},
  {70, 0,  2,  38},
  {70, 10, 2,  40},
  {70, 20, 2,  41},
  {70, 30, 2,  43},
  {70, 40, 2,  44},
  {70, 50, 2,  46},
  {71, 0,  2,  47},
  {71, 10, 2,  49},
  {71, 20, 2,  50},
  {71, 30, 2,  52},
  {71, 40, 2,  53},
  {71, 50, 2,  55},
  {72, 0,  2,  57},
  {72, 10, 2,  59},
  {72, 20, 3,  0},
  {72, 30, 3,  2},
  {72, 40, 3,  4},
  {72, 50, 3,  6},
  {73, 0,  3,  8},
  {73, 10, 3,  10},
  {73, 20, 3,  12},
  {73, 30, 3,  14},
  {73, 40, 3,  16},
  {73, 50, 3,  18},
  {74, 0,  3,  20},
  {74, 10, 3,  22},
  {74, 20, 3,  24},
  {74, 30, 3,  26},
  {74, 40, 3,  29},
  {74, 50, 3,  31},
  {75, 0,  3,  33},
  {75, 10, 3,  36},
  {75, 20, 3,  38},
  {75, 30, 3,  41},
  {75, 40, 3,  43},
  {75, 50, 3,  46},
  {76, 0,  3,  49},
  {76, 10, 3,  51},
  {76, 20, 3,  54},
  {76, 30, 3,  57},
  {76, 40, 4,  0},
  {76, 50, 4,  3},
  {77, 0,  4,  6},
  {77, 10, 4,  9},
  {77, 20, 4,  13},
  {77, 30, 4,  16},
  {77, 40, 4,  19},
  {77, 50, 4,  23},
  {78, 0,  4,  27},
  {78, 10, 4,  30},
  {78, 20, 4,  34},
  {78, 30, 4,  38},
  {78, 40, 4,  42},
  {78, 50, 4,  46},
  {79, 0,  4,  50},
  {79, 10, 4,  55},
  {79, 20, 4,  59},
  {79, 30, 5,  4},
  {79, 40, 5,  8},
  {79, 50, 5,  13},
  {80, 0,  5,  18},
  {80, 5,  5,  21},
  {80, 10, 5,  23},
  {80, 15, 5,  26},
  {80, 20, 5,  29},
  {80, 25, 5,  31},
  {80, 30, 5,  34},
  {80, 35, 5,  37},
  {80, 40, 5,  40},
  {80, 45, 5,  43},
  {80, 50, 5,  46},
  {80, 55, 5,  49},
  {81, 0,  5,  52},
  {81, 5,  5,  55},
  {81, 10, 5,  58},
  {81, 15, 6,  1},
  {81, 20, 6,  4},
  {81, 25, 6,  8},
  {81, 30, 6,  11},
  {81, 35, 6,  14},
  {81, 40, 6,  18},
  {81, 45, 6,  21},
  {81, 50, 6,  25},
  {81, 55, 6,  28},
  {82, 0,  6,  32},
  {82, 5,  6,  36},
  {82, 10, 6,  40},
  {82, 15, 6,  44},
  {82, 20, 6,  48},
  {82, 25, 6,  52},
  {82, 30, 6,  56},
  {82, 35, 7,  0},
  {82, 40, 7,  5},
  {82, 45, 7,  9},
  {82, 50, 7,  13},
  {82, 55, 7,  18},
  {83, 0,  7,  23},
  {83, 5,  7,  27},
  {83, 10, 7,  32},
  {83, 15, 7,  37},
  {83, 20, 7,  42},
  {83, 25, 7,  48},
  {83, 30, 7,  53},
  {83, 35, 7,  58},
  {83, 40, 8,  4},
  {83, 45, 8,  9},
  {83, 50, 8,  15},
  {83, 55, 8,  21},
  {84, 0,  8,  27},
  {84, 5,  8,  33},
  {84, 10, 8,  39},
  {84, 15, 8,  45},
  {84, 20, 8,  52},
  {84, 25, 8,  59},
  {84, 30, 9,  6},
  {84, 35, 9,  13},
  {84, 40, 9,  20},
  {84, 45, 9,  28},
  {84, 50, 9,  35},
  {84, 55, 9,  42},
  {85, 0,  9,  50},
  {85, 5,  9,  58},
  {85, 10, 10, 7},
  {85, 15, 10, 16},
  {85, 20, 10, 25},
  {85, 25, 10, 34},
  {85, 30, 10, 43},
  {85, 35, 10, 53},
  {85, 40, 11, 3},
  {85, 45, 11, 13},
  {85, 50, 11, 23},
  {85, 55, 11, 33},
  {86, 0,  11, 44},
  {86, 5,  11, 55},
  {86, 10, 12, 6},
  {86, 15, 12, 17},
  {86, 20, 12, 29},
  {86, 25, 12, 41},
  {86, 30, 12, 53},
  {86, 35, 13, 6},
  {86, 40, 13, 20},
  {86, 45, 13, 34},
  {86, 50, 13, 49},
  {86, 55, 14, 5},
  {87, 0,  14, 21},
  {87, 5,  14, 38},
  {87, 10, 14, 55},
  {87, 15, 15, 12},
  {87, 20, 15, 30},
  {87, 25, 15, 48},
  {87, 30, 16, 7},
  {87, 35, 16, 26},
  {87, 40, 16, 46},
  {87, 45, 17, 7},
  {87, 50, 17, 29},
  {87, 55, 17, 52},
  {88, 0,  18, 16},
  {88, 5,  18, 41},
  {88, 10, 19, 7},
  {88, 15, 19, 34},
  {88, 20, 20, 2},
  {88, 25, 20, 31},
  {88, 30, 21, 1},
  {88, 35, 21, 32},
  {88, 40, 22, 4},
  {88, 45, 22, 38},
  {88, 50, 23, 14},
  {88, 55, 23, 52},
  {89, 0,  24, 32},
  {89, 5,  25, 14},
  {89, 10, 25, 58},
  {89, 15, 26, 44},
  {89, 20, 27, 32},
  {89, 25, 28, 22},
  {89, 30, 29, 4},
  {89, 35, 30, 8},
  {89, 40, 31, 4},
  {89, 45, 32, 2},
  {89, 50, 33, 2},
  {89, 55, 34, 5},
  {90, 0,  35, 10}
};


unsigned int displayInt;

int k;
int i;
int xi;
int yk;

int value = 80;

void setup() {
  Serial.begin(9600);
}

void loop() {

  for (i = 0; i < 300; i++) {
    for (k = 0; k < 4; k++) {
      displayInt = pgm_read_byte(&(matrix[i][k]));
      if (value == displayInt) {
        xi = i;
        Serial.println(xi);
        Serial.println(yk);
      }
    }

  }


  Serial.println("--------------");
  delay(2000);
}

but this code use a lot of dynamic memory.

No, the code does not use much memory. Your DATA uses a lot of memory. Put the blame where it belongs, if you are going to find a solution.

KeithRB:
Put it in flash or eeprom.
PROGMEM - Arduino Reference

PROGMEM doesn't "put it in flash" since it's already there to begin with. Where else could it be loaded to the SRAM from?

PROGMEM just prevents the array from being loaded into SRAM during initialization, so that the code only needs to load what is needed when it is needed with the pgm functions.

Sorry, I guess I should say "keep" it in flash.

I made this exact point on another board, so I guess I should not say you are being pedantic. 8^)