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ć
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

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