Sziasztok!
Érdeklődnék, hogy van-e lehetőség a következőre Arduino alatt:
még a Setup előtt létre kell hozni a globális változókat, így a globális tömböket is.
viszont a tömbök méretét szeretném dinamikussá tenni, amit az EEPROM-ból olvasna ki például, vagy SD-ről...
szóval valami ilyesmit szeretnék:
int pieces = EEPROM.read(10);
float TempsByEepromIndex[pieces];
Tömbök
Re: Tömbök
Nem. A változók foglalása fix.
Foglald le a lehető legnagyobbat, max nem használod ki..
Foglald le a lehető legnagyobbat, max nem használod ki..
Re: Tömbök
Elvileg lehet dinamikusan méretezni a memória lefoglalását. A kérdés, hogy szükséged van-e rá, kb. 1.2k -val növeli meg a programod méretét, ha dinamikusan méretezel.
Az egész úgy megy, hogy a globálisan lefoglalt változók utáni és a verem előtti területet tudod dinamikusan kiosztani. Emellett a problémáid számát megtízszerezni. pl. ha elfelejted felszabadítani, betelik a memória, véletlenszerű fagyások ha kétszer szabadítod fel,...
A kérdés, hogy miért jó neked a dinamikus helyfoglalás. Van 2k memóriád, a veremnek hagysz 300 byte-ot, a kettő közötti résznél a lehető legnagyobb területet lefoglalod. A mikrovezérlőnek ez nem fáj, szemben az asztali PC-vel, ahol ha előre lefoglalnál 8 giga ramot fölöslegesen, a felhasználók felkoncolnának.
Az esetek 99%-ában AVR alatt nincs szükséged dinamikus helyfoglalásra.
Az egész úgy megy, hogy a globálisan lefoglalt változók utáni és a verem előtti területet tudod dinamikusan kiosztani. Emellett a problémáid számát megtízszerezni. pl. ha elfelejted felszabadítani, betelik a memória, véletlenszerű fagyások ha kétszer szabadítod fel,...
A kérdés, hogy miért jó neked a dinamikus helyfoglalás. Van 2k memóriád, a veremnek hagysz 300 byte-ot, a kettő közötti résznél a lehető legnagyobb területet lefoglalod. A mikrovezérlőnek ez nem fáj, szemben az asztali PC-vel, ahol ha előre lefoglalnál 8 giga ramot fölöslegesen, a felhasználók felkoncolnának.
Az esetek 99%-ában AVR alatt nincs szükséged dinamikus helyfoglalásra.
Kód: Egész kijelölése
void setup()
{
uint16_t * mem = (uint16_t *)malloc(sizeof(uint16_t) * 100); // lefoglal
mem = realloc(mem, sizeof(uint16_t) * 120); // nagyobbra cserél
free(mem); // amikor nem kell, elengeded
}
void loop()
{
}
A hozzászólást 1 alkalommal szerkesztették, utoljára csabeszq 2014. december 2. kedd, 0:21-kor.
Re: Tömbök
Amikor egy pufferben AVR alatt 64 byte-ot kell tárolnom, azt legtöbbször a vermen teszem meg:
Kód: Egész kijelölése
void fuggveny()
{
uint8_t puffer[64]; // a 64 helyére változót is rakhatsz!
uint8_t i;
// itt mindenféle nyalánkságot csinálhatsz a 64 byte memóriáddal
for(i=0; i < 64; i++)
puffer[i] = 0;
// amikor kilép a függvény automatikusan törlődik a puffer nevű tömb a tartalmával együtt
}