Arduino a doporučená volná ram

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
nextclick
Příspěvky: 2
Registrován: 10 pro 2017, 21:17
Reputation: 0

Arduino a doporučená volná ram

Příspěvek od nextclick » 10 pro 2017, 21:21

Ahoj,
existuje nějaké obecné doporučení na množství volné ram co je potřeba mít v arduinu volnou? Pokud píšu na Arduino s 2kB RAM program a mám už jen 200byte volných. Jak moc riskuju?
Díky za odpovědi.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Arduino a doporučená volná ram

Příspěvek od pavel1tu » 10 pro 2017, 21:57

Asi neriskuješ nic, co by jsi riskoval

Pokud to chápu že RAM nebude stačit, kompilátor to stopne a nenahraje se to
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

nextclick
Příspěvky: 2
Registrován: 10 pro 2017, 21:17
Reputation: 0

Re: Arduino a doporučená volná ram

Příspěvek od nextclick » 11 pro 2017, 13:28

No ono prý riziko existuje pri nejake fragmentaci pameti. Snad to pry vznika pokud se napriklad ukladaji do string promene ruzne dlouhe retezce.

Existuje nejaky rychly "arduino simulator" u ktereho se daji simulovat ruzne vstupy a tim zrychlene testovat arduino program napr proti preteceni?

zbysek
Site Admin
Příspěvky: 125
Registrován: 22 úno 2017, 15:18
Reputation: 0

Re: Arduino a doporučená volná ram

Příspěvek od zbysek » 11 pro 2017, 16:20

Dobrý den,
ono hodně závisí na programu.

Pokud se v programu nevyskytují dynamicky alokované datové struktury (pole, objekty, ...), tak se nemáte čeho bát. Jen pozor na to, že i když vy žádnou takovou strukturu nevytváříte, může se toto dít v použitých knihovnách.

Pěkným příkladem objektu, který mění svoji velikost za běhu programu, je String. Občas nevíte, jestli má nějakou maximální délku a může se tak stát, že už se do RAM nevyjde (třeba načítáte něco ze sériové linky, přijímáte data z wifi, ...).

Druhou skupinou, kde je potřeba si dát pozor, jsou funkce - jejich parametry a lokální proměnné při zavolání také zabírají nějakou RAM. Potom záleží, kolik má funkce parametrů, kolik lokálních proměnných používá, jaké typy mají apod. Žroutem RAM jsou i rekurzivně volané funkce.

Pokud je ale nedostatek paměti způsobených tím, že máte v programu hodně proměnných, popřípadě velká pole apod., u kterých zároveň znáte jejich velikost (jsou alokované staticky), popřípadě přesně víte, kdy voláte funkce, jestli se tyto funkce nějak navzájem volají a kolik maximálně potom zaberou jejich lokální proměnné a parametry, tak bych se toho nebál.

Kupříkladu pole byte[2000] zabírá většinu z 2kB paměti, ale nehrozí u něj, že se "nafoukne" mimo povolenou velikost - bude mít vždy 2000 bytů.

Možná by stálo za zkusit v programu najít místa, která zabírají hodně paměti, ale zároveň se při běhu programu nemění - jsou to často například velká pole. Ty je pak možné přesunout mimo RAM do oblasti dat programu pomocí PROGMEM.

Odpovědět

Kdo je online

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