Массив из структур, расход памяти

borin
Offline
Зарегистрирован: 20.11.2015

Как уменьшить расход памяти при использовании масиива структур?

typedef struct {
  byte tempAddrAir[8];
  byte tempAddrFloor[8];
  int16_t tAirRaw;
  int16_t tFloorRaw;
  byte flapPin;
  bool isFlapOn;
} Contour;

Contour contour1 = {
  {0x28, 0xFF, 0xB5, 0xAB, 0x90, 0x15, 0x01, 0x8D},
  {0x28, 0xFF, 0xAB, 0x39, 0x90, 0x15, 0x01, 0xB5},
  4080,
  4080,
  4,
  false
};

Contour contour2 = {
  {0x28, 0xFF, 0x72, 0x3B, 0x90, 0x15, 0x01, 0x1F},
  {0x28, 0xFF, 0x14, 0xB1, 0x90, 0x15, 0x01, 0x50},
  4080,
  4080,
  5,
  false
};

Contour contours[] = {contour1, contour2};

void setup() {

}

void loop() {
}
Sketch uses 590 bytes (1%) of program storage space. Maximum is 30 720 bytes.
Global variables use 97 bytes (4%) of dynamic memory, leaving 1 951 bytes for local variables. Maximum is 2 048 bytes.
 
т.е получается выделяется 97байт оперативки, а должно быть 22 байта структура их у нас две и 9 байт пустой скетч. Итого 22+22+9 = 53 байта Пока таких структур 2, можно не обращать на повыщеный расход оперативки, но когда структур будет 8.
borin
Offline
Зарегистрирован: 20.11.2015
Contour contours[] = {contour1, contour2, contour3, contour4, contour5, contour6, contour7, contour8};
Sketch uses 830 bytes (2%) of program storage space. Maximum is 30 720 bytes.
Global variables use 361 bytes (17%) of dynamic memory, leaving 1 687 bytes for local variables. Maximum is 2 048 bytes.
 
361 байт
(361-9)/22 = 16, а у нас 8 структур. т.е. оперативки расходуется x2
 
 
 
Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

вы же их сначала объявляете, а потом в массив складываете вот и получается 22+ 22 и массив 22+22, объявляйте сразу в массиве

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

borin пишет:

Как уменьшить расход памяти при использовании масиива структур?

для начала, не дублировать их все дважды.

borin
Offline
Зарегистрирован: 20.11.2015

Точно, всем огромное спасибо! Помогло!!!!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Видимо так:
 

typedef struct {
  byte tempAddrAir[8];
  byte tempAddrFloor[8];
  int16_t tAirRaw;
  int16_t tFloorRaw;
  byte flapPin;
  bool isFlapOn;
} Contour;

/*
Contour contour1 = {
  {0x28, 0xFF, 0xB5, 0xAB, 0x90, 0x15, 0x01, 0x8D},
  {0x28, 0xFF, 0xAB, 0x39, 0x90, 0x15, 0x01, 0xB5},
  4080,
  4080,
  4,
  false
};

Contour contour2 = {
  {0x28, 0xFF, 0x72, 0x3B, 0x90, 0x15, 0x01, 0x1F},
  {0x28, 0xFF, 0x14, 0xB1, 0x90, 0x15, 0x01, 0x50},
  4080,
  4080,
  5,
  false
};
*/
Contour contours[] = {{
  {0x28, 0xFF, 0xB5, 0xAB, 0x90, 0x15, 0x01, 0x8D},
  {0x28, 0xFF, 0xAB, 0x39, 0x90, 0x15, 0x01, 0xB5},
  4080,
  4080,
  4,
  false
}, {{0x28, 0xFF, 0x72, 0x3B, 0x90, 0x15, 0x01, 0x1F},
  {0x28, 0xFF, 0x14, 0xB1, 0x90, 0x15, 0x01, 0x50},
  4080,
  4080,
  5,
  false
}};

void setup() {

}

void loop() {
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em, что это было? Джек Дэниэлс или что-то поэкзотичнее?