[elektro] 8bit->32bit

Móczik Gábor pm_levlista at progzmaster.hu
Wed May 8 14:04:28 CEST 2013


2013.05.08. 10:42 keltezéssel, Arnold Fuzesi írta:
> (Segito szandekot koszonom, ertekelem, de nem arra iranyult a kerdes, h mi a big es a little endian. Veszekedes ide vagy oda, a C bitfield bit sorrendnek nincs hivatalos koze az "endianess"-hez, es erre probaltam felhivni a figyelmet, nem veszekedesnek szantam....... )

Hát ha leteszel egy bitfield-et, arra unionnal egy multibyte változót, 
akkor a változó értéke függeni fog az endianness-től. Persze ha a 
compiler jófejségből megfordítja és a definiálttal átellenes sorrendben 
osztja ki a területet, akkor lehetne jó, de _szerintem_ ilyen nincs.

Ezzel az auto-forgatással jó nagyot lehetne szopni, ha teszel egymásra 
egy 32x bitfield, 2x uint16, 1x uint32 változót unionnal.

Nyugodtan maradhatsz abban, hogy procifüggő emellett még compiler függő is.

Ezek a bitfield deklarációk sajnos nem jók hw közeli programozásra, 
bármennyire is jól nézne ki a kód, már egy sima struct-tal is annyi a 
szívás, hogy netovább. (packed, nem packed, aligned, stb...)

Sajnos csak a bit buzerálós makró a biztos.

#define RELAY1    0x80
#define RELAY2    0x40
...

#define SET_RELAY(rly)  (port_latch |= rly)
#define CLR_RELAY(rly)  (port_latch &= rly^0xFF)

Általános célú újrafelhasználásra tervezett (pl. kijelző) hardver 
drivert pedig úgy szoktam írni, hogy:

#define LCD_INIT_CS  ... // port adatirány, stb. beállítás
#define LCD_SET_CS   ... // CS bit beállítása
#define LCD_CLR_CS   ... // CS bit törlése

és a driverben ezeket a makrókat hívom.

A sokak által használt megoldás:
#define LCD_CS_TRIS_BIT ...
#define LCD_CS_LAT_BIT  ...

Az előbbi esetén akár SPI portbővítőre, osztott adatbuszra, akármire 
kötheted, majd definiálod a projekthez a hw környezetet, az utóbbi 
esetben meg ha nem portbitre kötötted, vagy esetleg invertált egy bit, 
akkor szopó van. Nem beszélve arról, hogy komolyabb procin (pl. ARM) pl. 
van bit set, bit clear regiszter, a fentivel esetleg optimálisabb vagy 
jobban optimalizálható kódot lehet írni.



More information about the Elektro mailing list