OT to RTOS or not to RTOS, was: Mereni napeti baterie pomoci AVR

Michal Gregor a2x1nptda8 na email.cz
Pátek Leden 7 10:33:15 CET 2011


No dobre, nepouzitelne...

Beru to ze sveho pohledu - jednocipy 8bit.

Treba takovy pic na 11,0592MHz ma pro UART 9600 2880 instrukci na jeden 
byte. To je hodne malo - bavime se o aplikaci kde bezi nekolik UARTu, AD, 
klavesnice, lcd, uzivatlske rozhrani a dalsi.  (Navic nektere UARTy jsou 
reseny pomoci SW, takze vyssi interupt se pousti co 200cyklu a sezere 20-30 
cyklu.)
Pokud behem jedne komunikacni ulohy pristoupite k 10 promennym primo tak to 
vezme 10-20 cyklu. Ale pokud to bude ve structure, tak se bude pokazde 
vypocitavat ukazatel na byte ve strukture coz vezme 20-30 cyklu (+/- testy 
jsem delal davno), coz ve vysledku zvysi zatizeni procesoru o tisic %.


Michal Gregor

----- Original Message ----- 
From: "Jan Waclawek" <konfera na efton.sk>
To: "HW-news" <hw-list na list.hw.cz>
Sent: Friday, January 07, 2011 1:16 AM
Subject: Re: OT to RTOS or not to RTOS, was: Mereni napeti baterie pomoci 
AVR


"nerealizovatelny" je dalsie silne slovo. Uz tych silnych slov mam dost.

Ak nepouzijete index ale ukazovatel na strukturu (pripadne ak je 
optimalizator dostatocne chytry aby to urobil sam), tak ten overhead nie je 
taky dramaticky, u niektorych jednocipov, ktore maju ofsetove instrukcie 
moze byt aj ziadny. No a ak Vam ide o nejaku efektivitu za kazdu cenu, tak 
by ste aj tak nemali pouzivat vyssi programovaci jazyk.

Ale samozrejme je mozne aj funkciu napisat viackrat, hoci aj to moze (a 
nemusi) trebars byt neefektivne, nech to slovo znamena cokolvek. A daju sa 
tie funkcie napriklad aj generovat, ked treba, zlepsuje to udrziavatelnost.

Na programovani je pekne to, ze vela veci ide urobit roznymi sposobmi, a 
potom sa mozeme tak pekne pohadat o tom, ktory z nich pouzivaju ti co ho 
maju najvacsi... :-P

wek



----- Original Message ---------------
>Pole structur je sice pekny napad, ale v praxi na jednocipu
>nerealizovatelny.
>Zkousel jsem napsat jeden program pro tri porty. Na zacatku "vlakna" se
>prepne ukazatel na data aktualniho portu:
>switch (Aktualni_Port) {
>    case 1:
>        Aktualni_Port = 2;
>        break;
>    case 2:
>        Aktualni_Port = 3;
>        break;
>    default:
>        Aktualni_Port = 3;
>        break;
>}
>Vysledek mizivy. Zkuste si to prelozit:
>
>Datovy_Protokol(Aktualni_Port).Soucet += Prijaty_Byte(Aktualni_Port);
>Po prekladu bude kod pro tento radek strasne dlouhy a nefektivni, protoze 
>se
>pocita ukazatela na pole atd.
>
>Kdezto:
>Soucet += Prijaty_Byte;
>Je ve vysledku jen jedna instrukce.
>
>Nakonec mam tri stejne soubory, kazdy pro jeden port. Upravy delam na 
>modulu
>1 a pak to jen prekopiruji. Vsechny globalni funkce a promenne zacinaji
>stejne: Port1_. Takze staci nahradit Port1_ za Port2_ atd.

_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list 



Další informace o konferenci Hw-list