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