C absolut cimu valtozo generalasa
Moczik Gabor
progzmaster at freemail.hu
Tue Jan 6 18:21:07 CET 2004
Andras Tantos wrote:
> Oszinten szolva ennek nem tudom mi az ertelme:
>
> #define valtozo (*((volatile unsigned char *)(x20)))
>
> Ez ugyanugy mukodik, mint a fenti (felteve, hogy nem gepeltem el) csak epp
> minden C fordito megeszi.
Viszont nem biztos hogy ugyanolyan kodot general belole.
>>vagy egy bitet is meg lehet adni
>>// 20h cim 1. bitje.
>>static bit valami @ 0x20*8+1;
>
> Ennek mar tobb ertelme van, de itt nem csak a definialas, hanem maga a tipus
> se szabvanyos.
Mondtam hogy nem szabvanyos, de ha mikrokontrollerre forditasz, akkor
altalaban fontosabb hogy gyors, hatekony legyen a kod, es ennyi
szabvanytalansagot meg lehet engedni.
> Amugy egy ilyen definicio nagyon veszelyes tud lenni:
> Mit fog erre a fordito generalni. Felthetoen kenytelen lesz olvasni a
Nem veszelyes, a PIC processzornak vannak bit-kezelo utasitasai, es a PICC
ezeket forditja a kodba. Sot! Ha egy byte valtozora megadod hogy x|=0x40,
akkor is bit utasitas fog forditani ami beallitja a 6. bitet!
> miatt. Viszont, hogy pontosan mi fog tortenni, az el van rejtve eloled, es
> nincs beleszolasod a dolgok folyasaba. En nem hasznalnam. Ez az egyik oka
Nincs elrejtve, kered hogy ASM kodba forditson, es megnezed mit csinalt belole.
> annak, hogy bit-mezoket se hasznalok a HW leirasara (a masik, hogy annak a
> kiosztasa is a fordito belso ugye, es nem biztos, hogy olyan sorrendben
> fogja lerakni oket, ahogy en szeretnem).
Nem egeszen. Szerinted mire talaltak ki? Biztos hogy olyan sorrendben fogja
lerakni, mert dokumentalva van.
Mikrokontrollerre teljesen mas programozasi logikat kell alkalmazni mint
PC-re. A PC-n a nagy progik miatt fontosabb lett a kod attekinthetosege,
masok altali ertelmezhetosege, a feladathoz legkozelebb allo megfogalmazasa,
es ma mar _tobbnyire_ nem szamit az eroforras igeny.
Ellenben mikrokontrolleren, ahol szukos a ROM hely, a RAM hely is, a
sebesseg is, maskepp kell optimalizalni. Ki kell hasznalni mindent amit
lehet, ami specifikus a processzorra. Pl. egy pointer muvelet PIC-en igen
hulye atlathatatlan kodot tud eloidezni az architektura hulye megoldasai
miatt (kulon RAM/ROM tar, kulon cimzesi modokkal). Ellenben a fenti BIT
deklaracio tok egyertelmu, es tudod hogy a PIC-nek van bit-orientalt
utasitasa -> teljesen trivialis kodot fog generalni.
Vagy, pl. ha kell egy szam 0.0-10.0 kozott, akkor float tipussal tok
kenyelmesen megoldhato, jo nagy kodot fog generalni. Erdemes elgondolkodni
hogy inkabb byte-ot hasznalsz 0-100 kozott, es majd ha lesz szerepe a
tizedespontnak (kijelzes, egyeb szamitasok), akkor integer muveletekkel
megoldhato. Joval gyorsabb.
Ja, meg egy fontos dolog: PIC-en nincs ertelme sebessegre optimalizalni.
Kodmeretre kell, minel rovidebb a kod, annal gyorsabb, mivel szinte minden
PIC utasitas 1 ciklus alatt vegrehajtodik.
--
((( Móczik Gábor )))--((( hu <- DOT <- freemail <- AT <- progzmaster )))
((( Debian unstable )))-((( Kernel 2.4.20 )))-((( Celeron466 / 128Mb )))
((( --> Vigyázat! Ön súlyos közlekedési balesetet szenvedett. <-- )))
((( --> Kívánja, hogy a légzsák felfúvódjon? <-- )))
More information about the Elektro
mailing list