Re: switch case s intervalem
Napsal: 03 kvě 2018, 09:52
Jestli až tak bojuješ s místem, tak mrkni i na to, jestli používáš správně velké (=ne zbytečně velké) datové typy pro proměnné. Například obyčejný int (nebo unsigned int) je na běžných Arduinech dvoubytový, což je pro běžné cykly typu
zabere (u mě) 728 B programové a 11 B datové paměti, zatímco
zabere 676 B programové a 9 B datové paměti. Pak při běhu si to ještě samozřejmě někde přimyslí tu lokální proměnnou, ale šance je, že bude v registru a ani místo v datové paměti nezabere.
A tak dál
for(int i=0;i<50;i++) blik();
zbytečné, stačí typ byte
. Na datové paměti se sice ušetří na jedné proměnné jen jeden bajt, ale jednak kdybys jich měl pole, tak to bude patřičněkrát víc, ale hlavně v programové paměti se pro manipulaci může ušetřit docela dost, protože aritmetika s jednobytovými čísly je obvykle na jednu instrukci, zatímco s delšími typy se to musí dělat po jednotlivých bytech. Dále, když by ti docházela datová paměť, tak globální proměnné zabírají v datové paměti místo pořád, lokální jen v rozsahu své platnosti, přitom oboje jsou ve stejné paměti. K tomu přidej, že když je proměnná globální, taký to pár bytů programové paměti zabere, pokud je inicializovaná na něco jiného než 0 tak ještě něco. A pak se to nasčítá, např:
Kód: Vybrat vše
void blik() {digitalWrite(5,1);digitalWrite(5,0);}
int i=5;
void setup() {
for(i=0; i<50; i++) blik();
}
void loop() {
}
Kód: Vybrat vše
void blik() {digitalWrite(5,1);digitalWrite(5,0);}
void setup() {
byte i;
for(i=0; i<50; i++) blik();
}
void loop() {
}
A tak dál