Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 sty 2025, o 22:47


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 28 mar 2013, o 22:36 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 14
Lokalizacja: Niepołomice
Pomógł: 0

Mam pytanie o zmienną typu BOOL.
W języku C czy C++, zmienna ta ma rozmiar 1 bajtu, w książce Pana Mirka zmienna BOOL rezerwuje aż 2 bajty pamięci.
Czy jest to błąd w książce, czy faktycznie zmienna BOOL dla AVR-GCC zajmuje aż 2 bajty ?

_________________
0011010111001000100100101



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2013, o 22:51 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27351
Lokalizacja: Szczecin
Pomógł: 1042

eeeh tabela na stronie 73 - oczywiście błąd :( .... przepraszam. Bool to przecież albo zero albo nie zero ... więc po co byłyby aż dwa bajty ? ...

wystarczy podciągnąć:

#include <stdbool.h>

i już można korzystać z bool - chociaż ja jakoś nigdy z tego nie korzystam - wolę uint8_t i zero lub nie zero ;) - no ale to kwestia przyzwyczajenia

------------------------ [ Dodano po: 4 minutach ]

już jest w erracie:

http://atnel.pl/errata.html

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2013, o 23:13 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Czegoś nie rozumiem, uint8_t ma 1 bajt a może przechowywać 0..255. Natomiast bool też ma 1 bajt i może przechowywać tylko 0..1 . Wiesz może dlaczego twórcy C nie zmniejszyli wielkości bool do np. 2 bitów zamiast większych 8 bitów?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2013, o 23:18 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27351
Lokalizacja: Szczecin
Pomógł: 1042

kiclaw napisał(a):
Czegoś nie rozumiem, uint8_t ma 1 bajt a może przechowywać 0..255. Natomiast bool też ma 1 bajt i może przechowywać tylko 0..1 . Wiesz może dlaczego twórcy C nie zmniejszyli wielkości bool do np. 2 bitów zamiast większych 8 bitów?


nie nie - bool to tak na prawdę - jak piszę wyżej - albo ZERO - albo NIE ZERO

do dwóch bitów nie mogli ograniczyć bo procki AVR najmniejszą jednostkę jaką posiadają to BAJT, nie ma tu sprzętowych pól bitowych ;)

dlatego FALSE to 0
natomiast TRUE to dowolna wartość nie zerowa czyli np 1

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 09:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2011
Posty: 582
Lokalizacja: okolice Wrocławia :)
Pomógł: 24

Korzystając z okazji zapytam inaczej.

W jaki sposób można wykorzystać w 'normalny' sposób 8 bitów np. uint8_t (np. na jakieś flagi potrzebne w programie).
Na co dzień korzystając z asemblera używam flag na poszczególnych bitach, korzystając w C z np. 8 zmiennych bool to zwykłe maranotrawstwo ;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 09:28 
Offline
Użytkownik

Dołączył(a): 17 mar 2012
Posty: 74
Lokalizacja: Okolice Gdańska
Pomógł: 3

No to też w książce nawet niebieskiej się znajdzie :P

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


flag.flaga1 - może przyjąć wartości od 0 - 1
flag.flaga4 - może przyjąć wartość przechowywaną na dwóch bitach (0-3)

Kompilator sam się tym zajmuje, ale jak będziemy mieli tylko jedną flagę jednobitową to i tak kompilator zajmie w tym przypadku 8 bitów, więc ma to sens przy przynajmniej 2 flagach w strukturze.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 09:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2011
Posty: 582
Lokalizacja: okolice Wrocławia :)
Pomógł: 24

Wiedziałem że gdzieś dzwoni....

Po pierwszy przeczytaniu 'niebieskiej' jeszcze się gubię ale może być już chyba tylko lepiej :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 09:50 
Offline
Użytkownik

Dołączył(a): 17 mar 2012
Posty: 74
Lokalizacja: Okolice Gdańska
Pomógł: 3

Z innej beczki, jaką książkę byś polecił do ASM?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 10:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2011
Posty: 582
Lokalizacja: okolice Wrocławia :)
Pomógł: 24

shoc napisał(a):
Z innej beczki, jaką książkę byś polecił do ASM?


hmm.. niestety nie pomogę... sam uczyłem się jeszcze za czasów Commodore 64, później 8051, później PIC.
W książkach o asm nie mam rozeznania.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 10:47 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8597
Pomógł: 337

zobacz może to, Programowanie mikrokontrolerów AVR w języku assembler
ale mimo wszystko polecam noty producenta i dokumentacje ATmela

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 10:54 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27351
Lokalizacja: Szczecin
Pomógł: 1042

Ja myślę że też na pewno, jeśli chodzi o asembler dla AVR, godne są polecenia książki Rafała Baranowskiego z BTC:

Mikrokontrolery AVR ATmega w praktyce

http://www.btc.pl/?id_prod=1675800

oraz:

Mikrokontrolery AVR ATtiny w praktyce

http://www.btc.pl/?id_prod=2581400

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 13:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

"Mój" bool też pewnie zajmuje 1 bajt? ;)
topic2645.html

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 20:38 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27351
Lokalizacja: Szczecin
Pomógł: 1042

SmN napisał(a):
W C nie ma typu bool, ani BOOL. Jest typ standardowy _Bool, który zwykle jest implementowany jako jednobajtowy. O rozmiar każdego typu lub danej można zapytać kompilator w programie. Służy do tego operator sizeof, np. printf("%d\n", sizeof(_Bool));


no i to właśnie DOKŁADNIE widać w tej bibliotece tzn inkludowanym pliku nagłówkowym

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 21:38 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 14
Lokalizacja: Niepołomice
Pomógł: 0

Panie Mirku dziękuję za odpowiedź. Ta zmienna nie dawała mi spokoju. Przyznam się szczerze, że czytając za pierwszym razem niebieską książkę, nie zwróciłem na to uwagi, ale teraz ponownie powróciłem do lektury, prawie po dwóch latach i przy okazji robię ściągę, coś na wzór tablic jakie HELION wypuszcza do języków programowania, i ta zmienna przykuła moją uwagę.

Strzeliłem gafę pisząc że w C jest zmienna bool, można oczywiście zrobić odpowiednik boolowski, używając klauzul „typedef” i „enum” .

_________________
0011010111001000100100101



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO