switch case s intervalem

DavidO
Příspěvky: 1131
Registrován: 01 kvě 2013, 21:27

Re: switch case s intervalem

Příspěvek od DavidO »

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 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() {
}
zabere (u mě) 728 B programové a 11 B datové paměti, zatímco

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() {
}
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 :)
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Vladimir66
Příspěvky: 383
Registrován: 02 dub 2014, 15:30

Re: switch case s intervalem

Příspěvek od Vladimir66 »

Ahoj,

boj s pameti jsem prohraval proto, ze mam spoustu hlasek na LCD.
takze to vyresilo -F-
napr.

Kód: Vybrat vše

 oled.print (F("start -ready? "));

potom se mi hlasky neukladaji do RAM ale zustanou v PROGMEM.

-V66
Odpovědět