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



Teraz jest 5 kwi 2026, o 21:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 5 wrz 2015, o 08:39 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

Piszę sobie programik na Xmegę używający biblioteki "LCD" z bluebooka. Mamy tam taką funkcję:
Kod:
void lcd_char(char c)
{
   lcd_write_data( ( c>=0x80 && c<=0x87 ) ? (c & 0x07) : c);
}

programik kompiluję raz w Eclipse-Mars-32bit z toolchainem Atmela i drugi raz w Atmel Studio 6.2
W obu przypadkach program kompiluje się bez błędów jednak w AS wyrzuca warningi mówiące o tym, że wynik porównania zmiennej typu char ze stałą jest zawsze w jednym przypadku fałszem (false) a w drugim prawdą (true) (jak na zrzucie ekranu)
Obrazek

Czy któryś z kolegów mógłby mi wytłumaczyć skąd te warningi. Dlaczego w Eclipse ich nie ma a w AS są? Pewnie zależy to od jakiś ustawień opcji kompilacji. I jak ich uniknąć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 wrz 2015, o 09:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2013
Posty: 568
Zbananowany użytkownik

Pomógł: 31

Używasz char, czuli zmiennej z zakresu -128 do 127. Spróbuj unsigned char, wtedy będzie miała zakres od 0 do 255.

_________________
Und schreien

Spring
Erlöse mich
Spring
...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 wrz 2015, o 10:44 
Offline
Moderator
Avatar użytkownika

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

PROTON napisał(a):
Używasz char, czuli zmiennej z zakresu -128 do 127. Spróbuj unsigned char, wtedy będzie miała zakres od 0 do 255.

Nie trzeba używać unsigned char

Gdyby sobie autor kompilował w Eclipse to nie miałby żadnego warninga

Gdyby sobie autor kompilował w poprawnie skonfigurowanym AS też nie miałby warninga

a tak ? ... bez pojęcia o AS .... zabieramy się za kobyłę, której nawet nie potrafimy skonfigurować a później piszemy po internecie, że w kodach z Bluebooka są warningi albo że nie da się skompilować

Wyjaśnienie: ... dlaczego gdyby była kompilacja w Eclipse to nie byłoby warningów ? czary jakieś czy co ?

żadne czary - DOMYŚLNIE przy kompilacji w AVR GCC typ char zamieniany jest AUTOMATYCZNIE na unsigned char ! i warto to sobie zapamiętać

dlaczego jest domyślnie zamieniany ? ano dlatego żeby nie męczyć się pisaniem tego durnego słówka unsigned a widać to pięknie podczas pierwszej kompilacji projektu albo po jego CELAN'owaniu, oto przykład

Cytuj:
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=11059200UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"


Takie posunięcie wymusza oczywiście za sobą pewne ważne konsekwencje, bo wręcz nie zaleca się w takiej sytuacji NIGDZIE w kodzie stosować durnego

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


tylko sam typ

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


i znowu DLACZEGO ?

Ano dlatego, że większość wbudowanych w GCC funkcji operuje często na argumentach typu char (autorzy tych funkcji słusznie uznali, że każdy będzie kompilował sobie programy właśnie z tym przełącznikiem DOMYŚLNYM podkreślam -funsigned-char No i jeśli teraz jakiś początkujący uparcie będzie stosował kocie "unsigned char" to się zdziwi, że przy wielu funkcjach dostaje warningi że mu się rodzaje typów argumentów nie zgadzają.... i często zamiast poczytać o przełącznikach kompilacji i o tym co tu piszę - to załatwia sprawę TYSIĄCAMI RZUTOWAŃ w kodzie - jawnych rzutowań np..... skoro ma warninga w takiej powiedzmy zmyślonej tu funkcji

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


to gościu robi sobie:

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


podobnie rzecz się ma ze wskaźnikami char wtedy ..... i cała kołomyja .....

W AS jak sobie coś ktoś pokiełbasi to ma wyłączony ten przełącznik domyślnej zamiany char na unsigned char no i później ma problemy

ale to nie jedyny kocie pułapki jakie czyhają w AS na takich początkujących co to jak im ktoś wmówi że Eclips jest nie dobry to go nawet nie dotknie ....

Ja tam uważam, że szczególnie dla początkujących zdecydowanie lepszy jest ECLIPSE a jak się człowiek nauczy już ... m.in tego o czym piszę ale jeszcze innych rzeczy (jak pracuje kompilator) to wtedy można sobie używać AS albo jeszcze czego innego co się żywnie podoba

------------------------ [ Dodano po: 6 minutach ]

Jak widać proste rzeczy w AS urastają dla początkującego do jakichś KOSMICZNYCH problemów .... a w Eclipse o dziwo wszystko działa i się kompiluje. Dziwię się, jak można być tak upartym i pomimo to, że w Bluebooku piszę o Eclipse, że specjalnie przygotowuję kody działające pod Eclipse (cały workspace jest na DVD) to nie .... nawet taki początkujący nie spróbuje tylko idzie katować się AS

_________________
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: 5 wrz 2015, o 10:56 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

dziękuję Panie Mirku za obszerne wytłumaczenie sprawy. Tak jak czułem trzeba prawidłowo skonfigurować kompilator. Przyznaję że za bardzo nie znam AS. Cóż - człowiek całe życie się uczy!

Pisałem że używam Eclipsa (i tam nie mam problemów z kompilacją) ale chcę poznać rówież AS. A to nie jest zbrodnia.

------------------------ [ Dodano po: 19 minutach ]

niestety, opcję kompilatora mam ustawioną (próbowałem ją również wyłączyć i ponownie ją włączyć)
Obrazek

chyba że trzeba jeszcze coś przestawić :) OK, zamykam temat.



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: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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