Optimalizace
Nízkoúrovňové programování pro vestavěné systémy se zcela liší od programování pro univerzální zařízení, jako jsou počítače a mobilní telefony. Efektivita (z hlediska rychlosti a prostoru) je mnohem důležitější, protože zdroje jsou vysoce kvalitní. To znamená, že první věcí, kterou musíte udělat, pokud vám dojde místo, je podívat se na to, které části kódu můžete optimalizovat.
Pokud jde o snížení využití programového prostoru (Flash), velikost kódu může být docela obtížné optimalizovat, pokud nemáte zkušenosti, nebo pokud jste více zvyklí na programování pro stolní počítače, které tuto dovednost nepotřebují. Bohužel neexistuje žádný přístup „kouzelná kulka“, který bude fungovat ve všech situacích, i když to pomůže, když vážně zvážíte, co váš náčrt skutečně potřebuje . Pokud funkce není nutná, vyjměte ji.
Někdy je také užitečné zjistit, kde jsou více částí vašeho kódu stejné (nebo velmi podobné). Možná je budete moci zkondenzovat na opakovaně použitelné funkce, které lze volat z více míst. Uvědomte si však, že někdy pokus o opětovné použití příliš kódu ve skutečnosti nakonec způsobí, že bude podrobnější. Je to složitá rovnováha k úderu, která má tendenci přicházet s praxí. Může vám pomoci strávit nějaký čas zkoumáním toho, jak změny kódu ovlivňují výstup kompilátoru.
Optimalizace dat za běhu (SRAM) má tendenci být o něco jednodušší, když jste zvyklí. Velmi častým úskalím pro začínající programátory je používání příliš velkého množství globálních dat. Cokoli deklarované v globálním rozsahu bude existovat po celou dobu životnosti náčrtu, a to není vždy nutné. Pokud se proměnná používá pouze uvnitř jedné funkce a nemusí mezi hovory přetrvávat, udělejte z ní místní proměnnou. Pokud je třeba hodnotu sdílet mezi funkcemi, zvažte, zda ji můžete předat jako parametr, místo aby byla globální. Tímto způsobem použijete SRAM pro tyto proměnné pouze tehdy, když to skutečně potřebujete.
Dalším zabijákem pro použití SRAM je zpracování textu (např. pomocí třídy String
). Obecně řečeno, pokud je to možné, měli byste se vyhnout provádění řetězcových operací. Jsou to obrovská paměťová prasata. Pokud například vydáváte hodně textu do seriálu, použijte místo volání zřetězení řetězců více volání funkce Serial.print ()
. Pokuste se také pokud možno snížit počet řetězcových literálů v kódu.
Pokud je to možné, vyhněte se také rekurzi. Pokaždé, když se provede rekurzivní volání, posune zásobník o úroveň hlouběji. Refaktorujte své rekurzivní funkce, aby byly místo toho iterativní.
Použít EEPROM
EEPROM se používá k dlouhodobému ukládání věcí, které se mění jen příležitostně. Pokud potřebujete použít velké seznamy nebo vyhledávací tabulky fixních dat, zvažte jejich uložení v EEPROM předem a vytáhněte pouze to, co potřebujete, když je to nutné.
Je zřejmé, že velikost EEPROM je poměrně omezená a rychlost a má omezený počet cyklů zápisu. Není to skvělé řešení omezení dat, ale mohlo by to stačit ke zmírnění zátěže pro Flash nebo SRAM. Je také docela možné použít rozhraní s podobným externím úložištěm, jako je například SD karta.
Rozšíření
Pokud jste vyčerpali všechny ostatní možnosti, může být možné rozšíření. . Rozšíření paměti Flash pro zvětšení programového prostoru bohužel není možné. Je však možné SRAM rozšířit. To znamená, že můžete být schopni refaktorovat svůj náčrt, abyste zmenšili velikost kódu na úkor zvětšení velikosti dat.
Získání více SRAM je ve skutečnosti celkem jednoduché. Jednou z možností je použít jeden nebo více čipů 23K256 . Jsou přístupné prostřednictvím SPI. K jejich použití vám pomůže knihovna SpiRAM . Jen si dejte pozor, aby fungovaly na 3,3 V ne 5V!
Pokud používáte Mega, můžete alternativně získat rozšiřující štíty SRAM z Lagrangian Point nebo Rugged Circuits .