C absolut cimu valtozo generalasa
Andras Tantos
andras_tantos at yahoo.com
Mon Jan 5 20:37:13 CET 2004
> > Csak C-ben nem lehet valtozot adott cimre rakni, tobbek kozott, mert a
cimek
> > kiosztasa a linker dolga. Tehat vagy a linkernek lehet megmondani
(GCC-ben a
> > linker script valo erre), vagy nem lehet.
>
> ANSI C-ben nem, de a mikrokontrollerekre keszitett forditokban szokott
lenni
> nem-szabvanyos megoldas.
>
> Pl. PICC-ben (htsoft):
>
> // 20h cimre allokal
> unsigned char valtozo @ 0x20;
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.
> 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.
Amugy egy ilyen definicio nagyon veszelyes tud lenni:
static bit irhato_olvashato @ 0x20*8+1;
static bit csak_olvashato @ 0x20*8+2;
static bit csak_irhato @ 0x20*8+3;
static bit csak_olvashato_statusz @ 0x20*8+4;
static bit csak_irhato_parancs @ 0x20*8+5;
irhato_olvashato = 1;
Mit fog erre a fordito generalni. Felthetoen kenytelen lesz olvasni a
csak_irhato, es irni a csak_olvashato regisztereket is, raadsasul
feltehetoen a statuszt vissza fogja irni a parancsba, a byte-szervezes
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
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).
Udv,
Tantos Andras
More information about the Elektro
mailing list