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



Teraz jest 19 sty 2026, o 06:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 25 paź 2017, o 20:46 
Offline
Użytkownik

Dołączył(a): 23 sty 2013
Posty: 126
Pomógł: 0

Cześć

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

W linijce gdzie robię operację += kompilator wywala mi
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nawet jak zrobię:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Zależy mi na tym aby kompilator wywalał mi błędy jak dokonywana jest zmiana typu z większego na mniejszy.
Uzywam avr-gcc. Na zwykłym gcc wszystko jest ok. Da się coś z tym zrobić ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2017, o 21:42 
Offline
Moderator
Avatar użytkownika

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

Panie to są mikrokontrolery 8-bitowe a nie PC ;)

ileż razy trzeba powtarzać ;) no chyba że kolega nie posiada Bluebooka i nie doczytał .... chociaż hmmm w samym komunikacie błędu też jest jak byk napisane, że masz nie zainicjalizowaną zmienną ...

powołujesz zmienną wewnątrz funkcji, tworzona jest na stosie - to znaczy, że nie będzie zainicjalizowana tak jak globalna ... więc co się dziwisz gdy robisz operację

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


toż wystarczy albo jej DEFINICJĘ wpisać w obszarze zmiennych globalnych tak jak teraz masz i zostanie automatycznie zainicjalizowana zerem i błędu nie uświadczysz - albo jak się upierasz robić definicję wewnątrz funkcji main to zainicjalizuj że ją pan byle jaką wartością

np

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


i też błędu nie uświadczysz - to nie wina kompilatora tylko tego, że czasem warto zapoznać się z PODSTAWAMI PODSTAW - zrozumieć czym różni się zmienna lokalna (automatyczna) powoływana do życia wewnątrz funkcji od cyklu życia zmiennej globalnej i co się z nimi dzieje.... Jak się to wie i zrozumie to człowiek nie spotyka się z takimi błędami ;) bo nie przyjdzie do głowy pomysł taki jak tu zrobiłeś po prostu ;)

dlatego na koniec, tak jak na początku - polecam Bluebooka bo tam sporo wyjaśnień i również w tym zakresie

_________________
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: 25 paź 2017, o 21:50 
Offline
Użytkownik

Dołączył(a): 23 sty 2013
Posty: 126
Pomógł: 0

Mam taki kod (wiem jest dużo includów ale to zaszłość i i tak się nie linkują):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2017, o 22:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Zrób clean projektu. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2017, o 22:06 
Offline
Użytkownik

Dołączył(a): 23 sty 2013
Posty: 126
Pomógł: 0

roske napisał(a):
Co kompilator ma do powiedzenia na
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

?

To zadziałało bez problemu. Zapomniałem o tym operatorze.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2017, o 21:35 
Offline
Użytkownik

Dołączył(a): 23 sty 2013
Posty: 126
Pomógł: 0

Teraz kompilatorowi nie podoba się linia 2. Ten sam błąd. Nawet jak dam przed 2 (uint8_t)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wersja avr-gcc 7.2.0.

Kurcze zależy mi na tym aby kompilator pokazywał błędy jak jest zmiana typu z większego na mniejszy. Odwrotnie jest ok. Już pare razy się złapałem gdzie w funkcji jako parametr dałem uint8_t a przekazywałem uint16_t i się dziwiłem dlaczego nie chcę działać. Macie jakieś pomysły dlaczego kompilator tak dziwnie mi się zachowuje ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2017, o 11:09 
Offline
Użytkownik

Dołączył(a): 23 sty 2013
Posty: 126
Pomógł: 0

Cytuj:
?? Samo przekazanie na pewno nie powoduje błędnego działania, kompilator po prostu odrzuci starszy bajt i przekaże tylko młodszy. Jeśli więc w takim wypadku funkcja nie działa tak jak powinna to znaczy, że przekazana wartość przekracza zakres argumentu funkcji. A skoro wiadomo, że może osiągnąć takie wartości to trzeba od razu zdefiniować parametr funkcji jako uint16_t.

Chodzi mi o zwykły ludzki błąd. Wiem że to moje przeoczenie ale po to właśnie chciałbym żeby kompilator wyłapał takie błędy które się zdarzają każdemu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Działa.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2017, o 12:08 
Offline
Moderator
Avatar użytkownika

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

ukasz napisał(a):
ale po to właśnie chciałbym żeby kompilator wyłapał takie błędy

Masz szansę - napisz lepszy kompilator ;)

albo zapoznaj się z zasadami działania obecnego, postaraj się je zrozumieć i wtedy się okaże - że nie ma problemu .... zapoznaj się szczególnie z zagadnieniem tzw "domyślnej promocji do int"

http://atnel.pl/domyslna-promocja-do-typu-int.html

to ci się może rozjaśni troszkę

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 3 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO