RTV forum PL | NewsGroups PL

Zapis liczb w systemie dwojkowym w avr-gcc jak to zrobić?

system dwojkowy w avr-gcc

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Zapis liczb w systemie dwojkowym w avr-gcc jak to zrobić?

tekio
Guest

Thu May 06, 2004 9:48 am   



Witam

Czy w avr-gcc mozna zapisywac liczby w systemie dwojkowym (cos w stylu
11010101b)?

Jurek Szczesiul
Guest

Thu May 06, 2004 10:15 am   



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

Quote:
Czy w avr-gcc mozna zapisywac liczby w systemie dwojkowym (cos w stylu
11010101b)?

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.

--
Pozdrowienia
Jurek Szczesiul

Marcin Stanisz
Guest

Thu May 06, 2004 10:15 am   



Dnia czw 6. maja 2004 12:48 tekio napisał(a):
Quote:
Czy w avr-gcc mozna zapisywac liczby w systemie dwojkowym (cos w stylu
11010101b)?

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

Pozdrawiam
--
Marcin Stanisz

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

J.F.
Guest

Thu May 06, 2004 11:59 am   



On Thu, 6 May 2004 12:48:39 +0200, tekio wrote:
Quote:
Czy w avr-gcc mozna zapisywac liczby w systemie dwojkowym (cos w stylu
11010101b)?

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

J.

Bielsky
Guest

Thu May 06, 2004 12:05 pm   



Quote:
Czy w avr-gcc mozna zapisywac liczby w systemie dwojkowym (cos w stylu
11010101b)?

Natchnęło mnie, napisałem coś takiego:
http://bielsky.republika.pl/binarny.h

Może się przydać.

Wojtek
Guest

Thu May 06, 2004 1:52 pm   



Użytkownik "Bielsky" <bielsky@poczta.onet.pl> napisał w wiadomości news:c7dcuf$mml$1@news.onet.pl...
Quote:
Czy w avr-gcc mozna zapisywac liczby w systemie dwojkowym (cos w stylu
11010101b)?

Natchnęło mnie, napisałem coś takiego:
http://bielsky.republika.pl/binarny.h

Może się przydać.

Dobre. Mógłbyś też zrobić wersję dla long'ów (2^32 bitów)?

Nie mogę się doczekać Wink
Pozdrawiam
Wojtek

Bielsky
Guest

Thu May 06, 2004 2:34 pm   



Quote:
Dobre. Mógłbyś też zrobić wersję dla long'ów (2^32 bitów)?

Machnę na jutro Smile)
Masz wolne miejsce na dysku? Smile))

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)

tekio
Guest

Thu May 06, 2004 4:48 pm   



THX. Swietny pomysl.

Użytkownik "Bielsky" <bielsky@poczta.onet.pl> napisał w wiadomości
news:c7dcuf$mml$1@news.onet.pl...
Quote:
Czy w avr-gcc mozna zapisywac liczby w systemie dwojkowym (cos w stylu
11010101b)?

Natchnęło mnie, napisałem coś takiego:
http://bielsky.republika.pl/binarny.h

Może się przydać.



Piotr Wyderski
Guest

Fri May 07, 2004 10:12 pm   



tekio wrote:

Quote:
Czy w avr-gcc mozna zapisywac liczby w systemie dwojkowym (cos w stylu
11010101b)?

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

Adam Dybkowski
Guest

Sat May 08, 2004 12:20 am   



Piotr Wyderski wrote:

Quote:
Bezposrednio nie, ale kiedys wymyslilismy takie makro:

#define bitval(n,s)
[...]
#define bin(x) binaux(#x)

ktorego uzywa sie naturalnie:

int i = bin(100010010);

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

--
Adam Dybkowski
adybkows@amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/

Jurek Szczesiul
Guest

Sat May 08, 2004 6:02 am   



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

Quote:
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

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

--
Pozdrowienia
Jurek Szczesiul

Piotr Wyderski
Guest

Sat May 08, 2004 1:52 pm   



Adam Dybkowski wrote:

Quote:
I wynikowo wychodza z tego zoptymalizowane dwie instrukcje LDI (dla
liczby 16-bitowej)?

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.

Quote:
No to brawa dla optymalizera

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

Quote:
- oryginalny zapis makra jest cokolwiek zamieszany.

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

Pozdrawiam
Piotr Wyderski

Piotr Wyderski
Guest

Sat May 08, 2004 2:02 pm   



Jurek Szczesiul wrote:

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

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

Jurek Szczesiul
Guest

Mon May 10, 2004 1:34 pm   



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

Quote:
Jurek Szczesiul wrote:

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

Prosze bardzo. Tylko przed opublikowaniem prosze sprawdzic
czy to dziala z AVR GCC

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

--
Pozdrowienia
Jurek Szczesiul

elektroda NewsGroups Forum Index - Elektronika Polska - Zapis liczb w systemie dwojkowym w avr-gcc jak to zrobić?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map