Stránka 1 z 1
Arduino a doporučená volná ram
Napsal: 10 pro 2017, 21:21
od nextclick
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.
Re: Arduino a doporučená volná ram
Napsal: 10 pro 2017, 21:57
od pavel1tu
Asi neriskuješ nic, co by jsi riskoval
Pokud to chápu že RAM nebude stačit, kompilátor to stopne a nenahraje se to
Re: Arduino a doporučená volná ram
Napsal: 11 pro 2017, 13:28
od nextclick
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?
Re: Arduino a doporučená volná ram
Napsal: 11 pro 2017, 16:20
od zbysek
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.