system dwojkowy w avr-gcc

May 06, 2004 13 Replies

Witam



Czy w avr-gcc mozna zapisywac liczby w systemie dwojkowym (cos w stylu



11010101b)?

Thu, 6 May 2004 12:48:39 +0200, na pl.misc.elektronika, tekio napisał(a):

W oficjalnej wersji nie ( poza standardem C ). W sieci mozna odszukac patcha ( by Joerg Wunsch ) , ktory to umozliwia - ale trzeba samodzielnie przekompilowac gcc-core. Nie probowalem tego patcha.

Dnia czw 6. maja 2004 12:48 tekio napisał(a):

Nie. Chyba, że sobie zdefiniujesz makro. Na liście avr-gcc podawano przykład takiego makra - poszukaj w archiwum tej listy

formatting link

Pozdrawiam

C o ile pamietam nie przewiduje. Za to mozesz hex [0xD5] oraz osemkowo [0325]

J.

Natchnê³o mnie, napisa³em co¶ takiego:

formatting link
Mo¿e siê przydaæ.

U¿ytkownik "Bielsky" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:c7dcuf$mml$ snipped-for-privacy@news.onet.pl...

Dobre. Móg³by¶ te¿ zrobiæ wersjê dla long'ów (2^32 bitów)? Nie mogê siê doczekaæ ;) Pozdrawiam Wojtek

Machnê na jutro :)) Masz wolne miejsce na dysku? :)))

2^32 czyli 4294967296 linii razy ( #define b 9 znaków liczba 32 znaki <spacja>

ok. dziesiêæ znaków liczby cr + lf 2 znaki ) je¶li siê nie mylê 216 GB (przy definicji 1G jako 1024^3)

THX. Swietny pomysl.

U¿ytkownik "Bielsky" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:c7dcuf$mml$ snipped-for-privacy@news.onet.pl...

Bezposrednio nie, ale kiedys wymyslilismy takie makro:

#define bitval(n,s) (((n>=sizeof(s)-1)?0:\ (long)(s[sizeof(s)-2-n]-'0'))<<n)

#define binaux(s) (bitval(0,s)|bitval(1,s)|bitval(2,s)|bitval(3,s)|\ bitval(4,s)|bitval(5,s)|bitval(6,s)|bitval(7,s)|\ bitval(8,s)|bitval(9,s)|bitval(10,s)|bitval(11,s)|\ bitval(12,s)|bitval(13,s)|bitval(14,s)|bitval(15,s)|\ bitval(16,s)|bitval(17,s)|bitval(18,s)|bitval(19,s)|\ bitval(20,s)|bitval(21,s)|bitval(22,s)|bitval(23,s)|\ bitval(24,s)|bitval(25,s)|bitval(26,s)|bitval(27,s)|\ bitval(28,s)|bitval(29,s)|bitval(30,s)|bitval(31,s))

#define bin(x) binaux(#x)

ktorego uzywa sie naturalnie:

int i = bin(100010010);

Pozdrawiam Piotr Wyderski

[...]

I wynikowo wychodza z tego zoptymalizowane dwie instrukcje LDI (dla liczby 16-bitowej)? No to brawa dla optymalizera - oryginalny zapis makra jest cokolwiek zamieszany.

Sat, 8 May 2004 01:12:32 +0200, na pl.misc.elektronika, Piotr Wyderski napisał(a):

Witam. Czy można to zamieścić na stronce z poradami avr ( z podaniem autora oczywiście ) ?

Wychodzi z tego int, a co z tym zrobi generator kodu wynikowego, to juz zalezy od konkretnego procesora. W szczegolnosci moga wyjsc z tego 2 instrukcje LDI, jesli akurat taki schemat translacji jest podany.

Nie przesadzajmy z tymi brawami, to sie opiera na optymalizacji zwanej skladaniem stalych, ktora jest chyba pierwsza wymyslona technika optymalizacji. :-)

Ale to nie czlowiek ma czytac, tylko maszyna. :-)

Pozdrawiam Piotr Wyderski

Prosze bardzo. Tylko przed opublikowaniem prosze sprawdzic czy to dziala z AVR GCC (to zostalo pierwotnie opracowane dla "prawdziwego" GCC). Na innych kompilatorach moga wyniknac problemy, jesli skladanie stalych nie jest zaimplementowane wystarczajaco dobrze. W takim przypadku mozna uzyc tego (kod dla Watcoma, dla GCC trzeba nieco zmodyfikowac postfiks "ui64"):

// Binary system support macros

#define __BIT_VALUE(v,n) (((v >> (0x04ui64 * n##ui64)) & 0x01) << n)

#define __BINARY_VALUE(v) __BIT_VALUE(v,0x00) | __BIT_VALUE(v,0x01) | \ __BIT_VALUE(v,0x02) | __BIT_VALUE(v,0x03) | \ __BIT_VALUE(v,0x04) | __BIT_VALUE(v,0x05) | \ __BIT_VALUE(v,0x06) | __BIT_VALUE(v,0x07) | \ __BIT_VALUE(v,0x08) | __BIT_VALUE(v,0x09) | \ __BIT_VALUE(v,0x0a) | __BIT_VALUE(v,0x0b) | \ __BIT_VALUE(v,0x0c) | __BIT_VALUE(v,0x0d) | \ __BIT_VALUE(v,0x0e) | __BIT_VALUE(v,0x0f)

#define BINARY_VALUE(v) (__BINARY_VALUE((0x##v##ui64)))

ale jest to ograniczone do liczb binarnych o co najwyzej

16 cyfrach. Inne przydatne makra:

// Structure member offset

#define OFFSET(Structure,Member) ((UINT)(&((Structure *) 0)->Member))

// Array length

#define LENGTH(Array) (sizeof(Array)/sizeof(Array[0]))

Pozdrawiam Piotr Wyderski

Sat, 8 May 2004 17:02:03 +0200, na pl.misc.elektronika, Piotr Wyderski napisał(a):

THX - niestety rzeczywiście z avr-gcc nie działa, więc nie ma jak wykorzystać.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required