Automaticke zvetsovani pole

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Uživatelský avatar
Diego
Příspěvky: 178
Registrován: 23 črc 2017, 09:43
Kontaktovat uživatele:

Automaticke zvetsovani pole

Příspěvek od Diego » 25 kvě 2023, 14:12

Ahoj vsem,
Jde v arduinu nejak udelat aby se mi automaticky behem behu programu rozsirovalo 2D pole dle potreby?
Mam jeden rozmer pevne dany a potrebuju aby se druhy rozsiroval podle vyuziti v ramci RAM.
Jde to nejak?
Dik
https://arze.cz - ARduino Zapojení Elektronika

ondraN
Příspěvky: 935
Registrován: 08 srp 2019, 20:01

Re: Automaticke zvetsovani pole

Příspěvek od ondraN » 25 kvě 2023, 14:17

Použij normální příkazy CPP pro dynamické alokování-uvolnění paměti
https://cplusplus.com/doc/tutorial/dynamic/
Jinak to bohužel nejde.

Uživatelský avatar
Caster
Příspěvky: 398
Registrován: 11 zář 2019, 09:02

Re: Automaticke zvetsovani pole

Příspěvek od Caster » 25 kvě 2023, 14:43

Šel bych na to přes malloc, calloc, realloc viz doporučení Arduino Memory Guide.

Např.

Changing size from 100 bytes to 1000 bytes using realloc.

Kód: Vybrat vše

char *ptr; ptr = malloc(100); ptr = realloc(ptr,1000);

Uživatelský avatar
Diego
Příspěvky: 178
Registrován: 23 črc 2017, 09:43
Kontaktovat uživatele:

Re: Automaticke zvetsovani pole

Příspěvek od Diego » 25 kvě 2023, 16:28

Diky, asi bude nejjednodussi nastavit rovnou max velikost a pak to neresit ;)
https://arze.cz - ARduino Zapojení Elektronika

Uživatelský avatar
gilhad
Příspěvky: 814
Registrován: 07 bře 2018, 11:22

Re: Automaticke zvetsovani pole

Příspěvek od gilhad » 28 kvě 2023, 22:13

Pokud je to možné, tak určitě.

Na Arduinu ti stejně poběží jen jeden program naráz, takže ušetřená paměť prostě leží ladem. A bez dynamického realokování to bude i jednodušší.

Nic proti optimalizacím a efektivitě, ale dokud paměť stačí, tak je přehlednost programu důležitější. A když stačit přestane, tak se dá levně a bezpečně ještě ušetřit pomocí F-stringů - Serial.println(F("Something"));

A teprve pak má cenu začít používat nějaké složitější techniky.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti