avr-gcc unsigned char



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł" <paw1976_at_nospam_poczta.onet.pl>
Subject: avr-gcc unsigned char
Date: Thu, 25 May 2006 10:51:27 +0200


Witam.

Dlaczego jak zdefiniuję zmienną typu
unsigned char zm = 128;
to w programie wynosi ona 0?
A jak wpiszę 129 to ma 1.
Tak jakby największa jej wartość to 127.
Czy to jakiś nowy standard?

Jakiego typu użyć żeby mieć osiem bitów bez znaku?

Dzięki za pomoc
Paweł



Poprzedni Następny
Wiadomość
Spis treści
From: =?ISO-8859-2?Q?G=F3rski_Adam?=
Subject: Re: avr-gcc unsigned char
Date: Thu, 25 May 2006 13:01:14 +0200


Użytkownik Paweł napisał:

Witam.

Dlaczego jak zdefiniuję zmienną typu
unsigned char zm = 128;
to w programie wynosi ona 0?
A jak wpiszę 129 to ma 1.
Tak jakby największa jej wartość to 127.
Czy to jakiś nowy standard?

Coś kolega opuścił.
Skąd wiadomo że jest równe 0 lub 1 ? Z printfa ?
Z debugera ?


Jakiego typu użyć żeby mieć osiem bitów bez znaku?


unsigned char

Dzięki za pomoc
Paweł


Ależ proszę.

Adam

Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł" <paw1976_at_nospam_poczta.onet.pl>
Subject: Re: avr-gcc unsigned char
Date: Thu, 25 May 2006 11:28:56 +0200


Coś kolega opuścił.
Skąd wiadomo że jest równe 0 lub 1 ? Z printfa ?
Z debugera ?
W pętli for mrygam lampką tyle razy jaka jest liczba.

unsigned char zm, i;

zm = 130;

for(int i = 0; i < zm; i++)
mrygaj;

Dla zmiennych poniżej 128 działa dobrze.

Paweł



Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł" <paw1976_at_nospam_poczta.onet.pl>
Subject: Re: avr-gcc unsigned char
Date: Thu, 25 May 2006 11:32:04 +0200


Sorry oczywiście w programie jest bez int i tylko samo i.
for(i = 0; i < zm; i++)

Paweł



Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
Subject: Re: avr-gcc unsigned char
Date: Mon, 29 May 2006 10:02:12 +0200


Dnia Thu, 25 May 2006 11:32:04 +0200, Paweł napisał(a):

Sorry oczywiście w programie jest bez int i tylko samo i.
for(i = 0; i < zm; i++)

Gdyby było z int stawiałbym na opcję -mint8 przy kompilacji :)

Pozdrawiam
Marcin Stanisz
--

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

Poprzedni Następny
Wiadomość
Spis treści
Date: Thu, 25 May 2006 13:58:30 +0200
From: RoMan Mandziejewicz <roman_at_nospam_pik-net.pl>
Subject: Re: avr-gcc unsigned char


Hello Paweł,

Thursday, May 25, 2006, 11:28:56 AM, you wrote:

Coś kolega opuścił.
Skąd wiadomo że jest równe 0 lub 1 ? Z printfa ?
Z debugera ?
W pętli for mrygam lampką tyle razy jaka jest liczba.
unsigned char zm, i;
zm = 130;
for(int i = 0; i < zm; i++)
^^^ a to co?
mrygaj;
Dla zmiennych poniżej 128 działa dobrze.

Ja się nie znam ale chyba typ zmiennej sterującej w pętli też jest
ważny...

--
Best regards,
RoMan mailto:roman_at_nospam_pik-net.pl


Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: avr-gcc unsigned char
Date: Thu, 25 May 2006 14:16:45 +0200


Użytkownik "Paweł" <paw1976_at_nospam_poczta.onet.pl> napisał w wiadomości
news:e5446u$nra$1_at_nospam_news.onet.pl...
Coś kolega opuścił.
Skąd wiadomo że jest równe 0 lub 1 ? Z printfa ?
Z debugera ?
W pętli for mrygam lampką tyle razy jaka jest liczba.

unsigned char zm, i;

zm = 130;

for(int i = 0; i < zm; i++)
mrygaj;


Problem jest chyba w porownaniu i< zm.
Poniewaz "i" jest typu int a "zm" typu unsigned char
to byc moze domyslnie obie sa kastowane na typ int.

Jednak to chyba nie wyjasnia dlaczego gdy zm=128 to miga 1 raz
bo 128 to jest -128 jeesli interpretowac ze znakiem.


--
Andrzej



Poprzedni Następny
Wiadomość
Spis treści
From: =?ISO-8859-2?Q?G=F3rski_Adam?=
Subject: Re: avr-gcc unsigned char
Date: Thu, 25 May 2006 15:14:37 +0200


Użytkownik Paweł napisał:

Coś kolega opuścił.
Skąd wiadomo że jest równe 0 lub 1 ? Z printfa ?
Z debugera ?

W pętli for mrygam lampką tyle razy jaka jest liczba.

unsigned char zm, i;

zm = 130;

for(int i = 0; i < zm; i++)
mrygaj;

Dla zmiennych poniżej 128 działa dobrze.

Paweł



Powinno działać ,ale może kompilator jakieś promocje robi samoistnie, bo
to chyba raczej nie na pecka.

Możesz spróbować : zm = (unsigned char ) 130;

Daj znać.

Adam

Poprzedni Następny
Wiadomość
Spis treści
From: =?ISO-8859-2?Q?Pawe=B3_Wi=EAcek?= <coven_at_nospam_vmh.net>
Subject: Re: avr-gcc unsigned char
Date: Thu, 25 May 2006 21:47:49 +0200


Thus wrote Górski Adam <gorskia_at_nospam_.................wp....................pl..................>:
Powinno działać ,ale może kompilator jakieś promocje robi samoistnie, bo

Zgodnie z odwieczną specyfikacją języka ma obowiązek promować char na int.

Paweł

--
(___) | Pawel Wiecek ----------------- Coven / Svart --------------------- |
< o o > | http://www.coven.vmh.net/ <coven_at_nospam_vmh.net> GSM: +48603240006 |
\ ^ / | GPG/PGP info in message headers * [ Debian GNU/Linux developer ] |
(") | * * * Fashion is destruction. -- Brats |

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr [PKi]" <pki.nospam_at_nospam_wp.pl>
Subject: Re: avr-gcc unsigned char
Date: Sun, 28 May 2006 19:13:22 +0200


Paweł napisał(a):
Coś kolega opuścił.
Skąd wiadomo że jest równe 0 lub 1 ? Z printfa ?
Z debugera ?
W pętli for mrygam lampką tyle razy jaka jest liczba.

unsigned char zm, i;

zm = 130;

for(int i = 0; i < zm; i++)
mrygaj;

Dla zmiennych poniżej 128 działa dobrze.

Paweł




A czasem kod mrygania nie jest skopany? Nie podałeś go.
Moze mrygaj to zmiana stanu lampki i bedzie taki efekt właśnie?!

Poprzedni Następny
Wiadomość
Spis treści
From: "Deaco" <dnkontakt_at_nospam_gmail.com>
Subject: Re: avr-gcc unsigned char
Date: 28 May 2006 18:43:33 -0700



Pawe=B3 napisa=B3(a):
Co=B6 kolega opu=B6ci=B3.
Sk=B1d wiadomo =BFe jest r=F3wne 0 lub 1 ? Z printfa ?
Z debugera ?
W p=EAtli for mrygam lampk=B1 tyle razy jaka jest liczba.

unsigned char zm, i;

zm =3D 130;

for(int i =3D 0; i < zm; i++)
mrygaj;

Dla zmiennych poni=BFej 128 dzia=B3a dobrze.

Pawe=B3

mysle ze chyba to to:
jedyny blad jaki zrobiles to "int" po for. na poczatku programu
deklarujesz zmienna unsigned, czyli od 0 do 255 a potem w forze
deklarujesz ja jako int czyli od 0 do 127.
ale to jest smieszne poniewaz powinien zadeklarowac od 0 do 32767,
przynajmniej tak jest w C, nie wiem jaki masz jezyk programowania, ale
to powinno pomoc


Poprzedni Następny
Wiadomość
Spis treści
From: AW <AW_at_nospam_somehost.com>
Subject: Re: avr-gcc unsigned char
Date: Thu, 25 May 2006 14:16:07 +0000 (UTC)


Dnia 25.05.2006 Paweł <paw1976_at_nospam_poczta.onet.pl> napisał/a:


Jakiego typu użyć żeby mieć osiem bitów bez znaku?


Ja namietnie uzywam zmiennej typu uint8_t

AW

Poprzedni Następny
Wiadomość
Spis treści
From: arkadiusz.antoniak_at_nospam_wp.pl
Subject: Re: avr-gcc unsigned char
Date: 25 May 2006 15:18:38 -0700


AW wrote:
Ja namietnie uzywam zmiennej typu uint8_t

Slusznie, jednak w AVR-GCC typ ten najpewniej powstaje tak:

typedef unsigned char uint8_t;

Sprawdz w types.h :).


Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: avr-gcc unsigned char
Date: Fri, 26 May 2006 01:40:05 +0200


arkadiusz.antoniak_at_nospam_wp.pl napisał(a):

Ja namietnie uzywam zmiennej typu uint8_t
Slusznie, jednak w AVR-GCC typ ten najpewniej powstaje tak:
typedef unsigned char uint8_t;
Sprawdz w types.h :).

Akurat te standardowe typy leżą w inttypes.h (ew. stdint.h)

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

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: arkadiusz.antoniak_at_nospam_wp.pl
Subject: Re: avr-gcc unsigned char
Date: 26 May 2006 08:00:06 -0700


Adam Dybkowski wrote:
arkadiusz.antoniak_at_nospam_wp.pl napisa=B3(a):

Ja namietnie uzywam zmiennej typu uint8_t
Slusznie, jednak w AVR-GCC typ ten najpewniej powstaje tak:
typedef unsigned char uint8_t;
Sprawdz w types.h :).

Akurat te standardowe typy le=BF=B1 w inttypes.h (ew. stdint.h)

looknalem do GMUARM-a ;). Widocznie tu jest inaczej


Poprzedni Następny
Wiadomość
Spis treści
From: AW <AW_at_nospam_somehost.com>
Subject: Re: avr-gcc unsigned char
Date: Fri, 26 May 2006 06:36:56 +0000 (UTC)


Dnia 25.05.2006 arkadiusz.antoniak_at_nospam_wp.pl <arkadiusz.antoniak_at_nospam_wp.pl> napisał/a:
AW wrote:
Ja namietnie uzywam zmiennej typu uint8_t

Slusznie, jednak w AVR-GCC typ ten najpewniej powstaje tak:

typedef unsigned char uint8_t;

Sprawdz w types.h :).

Nie wazne gdzie, wazne ze dziala ;-)

A po co w ogole to tak jest zrobione?

AW

Poprzedni Następny
Wiadomość
Spis treści
From: arkadiusz.antoniak_at_nospam_wp.pl
Subject: Re: avr-gcc unsigned char
Date: 26 May 2006 08:05:13 -0700


AW wrote:
Nie wazne gdzie, wazne ze dziala ;-)

jesli unsigned char z jakich tajemniczych powodow sprawia autorowi
problem, to uint8_t zefiniowany tak jak napisalem tez bedzie :)


A po co w ogole to tak jest zrobione?

Glownie po to, aby uniezaleznic sie od platformy. Nie ma reguly, ze
unsigned int jest np. 16-bitowy, choc na niektorych platformach wlasnie
tak jest. W ARM7 bedzie 32-bitowy itp. itd. unsigned char niemal
wszedzie jes 8 bitowy, ale 8-bitowosc to nie jest jego cecha
przyrodzona :). Jesli wiec cecha typu ma byc jego dlugosc bitowa, to
stosuje sie takie podejscie. Na innej platformie latwo to zmienic -
wystarczy podmienic plik z definicjami typow i nie trzeba zmieniac
calego programu.


Poprzedni Następny
Wiadomość
Spis treści
From: =?ISO-8859-2?Q?Pawe=B3_Wi=EAcek?= <coven_at_nospam_vmh.net>
Subject: Re: avr-gcc unsigned char
Date: Fri, 26 May 2006 20:25:58 +0200


Thus wrote arkadiusz.antoniak_at_nospam_wp.pl:
tak jest. W ARM7 bedzie 32-bitowy itp. itd. unsigned char niemal
wszedzie jes 8 bitowy, ale 8-bitowosc to nie jest jego cecha
przyrodzona :). Jesli wiec cecha typu ma byc jego dlugosc bitowa, to

Z tym tylko, że tam, gdzie char nie jest ośmiobitowy nie znajdzie się
ośmiobitowego typu wcale -- bo standard języka narzuca, że char ma się mieścić
w pojedyńczym bajcie (który zazwyczaj jest ośmiobitowy, ale...).

Paweł

--
(___) | Pawel Wiecek ----------------- Coven / Svart --------------------- |
< o o > | http://www.coven.vmh.net/ <coven_at_nospam_vmh.net> GSM: +48603240006 |
\ ^ / | GPG/PGP info in message headers * [ Debian GNU/Linux developer ] |
(") | * * Eat shit -- billions of flies can't be wrong. * * |