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



Teraz jest 16 lis 2024, o 17:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 24 sie 2012, o 17:51 
Offline
Moderator
Avatar użytkownika

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

Witam, w związku z tym, że na maila dostałem więcej zapytań o co chodzi z tymi warningami przy PSTR()

Obrazek

http://mirekk36.blogspot.com/2012/08/ec ... zytaj.html

podczas używania nowego toolchaina atmelowskiego postanowiłem skrobnąć coś na ten temat - zapraszam do poczytania ;)

_________________
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 sie 2012, o 11:01 
Offline
Moderator
Avatar użytkownika

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

Nie jest jedna i druga sugerowana zmiana deklaracji taka sama, ponieważ pierwsza dotyczy konfliktu typów zmiennych co pokazałem wyraźnie w przykładzie:

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


czyli tak pisaliśmy kiedyś (może nie wszyscy ale ja często pozwalałem sobie nie używać tu specyfikatora const - co się teraz zemściło) i to jest RÓŻNE od tego:

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


gdzie tu widać takie same przypadki ?

Tylko rozwiązanie pozostaje to samo czyli należy (albo wystarczy) , użyć specyfikatora const przy argumencie w takich własnych funkcjach i koniec problemów, czyli teraz te dwa przypadki teraz muszą wyglądać tak:

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


niże widać że rozwiązanie nieco innego kłopotu - właśnie z PSTR(), które w postaci makra automatycznie definiuje to samo ale ze specyfikatorem const to musimy tak zrobić:

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

_________________
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 sie 2012, o 12:06 
Offline
Moderator
Avatar użytkownika

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

robiw napisał(a):
PS.1
Co prawda wbudowane funkcje ze string.h nadal krzyczą ;-).


tak tego mogłem nie przebadać, ale podaj mi tu jakichś kilka linii z tymi funckjami, przypadkami gdzie krzyczą - to z chęcią sprawdzę bo pewnie i tak wcześniej czy później się z tym będę musiał zmierzyć - a nie cierpię warnigów w kodzie

_________________
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 sie 2012, o 13:30 
Offline
Moderator
Avatar użytkownika

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

makro PSTR ma taką postać:

Kod:
# define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s); &__c[0];}))


i już nie ważne czy z const czy bez const, jest to niejako instrukcja zakończona średnikiem, co oznacza, że jeśli jest w postaci definicji czy deklaracji to jest OK, jeśli zaś wystąpić ma w postaci argumentu funkcji to rzeczywiście z punktu widzenia syntaktyki zdaje się C++ jest to instrukcja, która NIC NIE ROBI (statement has no effect). Niestety gdyby to był C czy C++ stosowany na PC to nigdy z taką sytuacją byśmy nie mieli do czynienia ponieważ tam nie ma takich hocków-klocków z jakimś PROGMEM ... i całymi sztuczkami jakie trzeba robić w avr gcc żeby dopasować niejako C na potrzeby procków. Więc coś za coś - udało się to sprytnie za pomocą tego makra ominąć i kompilator AVR GCC sobie z tym radzi bo przecież nie zgłasza żadnych warningów! a to jest najważniejsze - więc możemy być pewni że z punktu widzenia AVR GCC jest wszystko ok

owszem jak się pracuje w eclipse to te podkreślenia (szlaczek żółty i to oznaczenie po prawej na pionowej belce) mogą drażnić bo po kompilacji zawsze wydaje się że pozostał jakiś warning, więc jeśli często posługujemy się czymś takim, to może to prowadzić do sytuacji, że wciąż będziemy musieli skrupulatnie od nowa przeglądać każdy przypadek i oceniać czy to coś złego czy nie....

więc znowu - można ponarzekać a można poszukać przyczyny ale i rozwiązania problemu. OK przyczynę już widać gołym okiem - za te szlaczki odpowiedzialne jest samo Eclipse i to akurat ta wersja - bo w innych tego nie ma. Czy to oznacza, że z tak błahego powodu ja miałbym np nie próbować nadal korzystać ze sporo lepszego Juno ????

Nie nie - można szukać dalej i znaleźć rozwiązanie - nie może być tak że coś tam się dzieje i nic nie da zrobić, no chyba że wykryjemy BUG'a w eclipse ;)

Ja poszedłem tym tropem, że jak się najedzie kursorem myszki na to podkreślenie, to pojawia się:

Obrazek

hmmm w takim razie zamiast się martwić - może kliknę ten klawisz F2, żeby zobaczyć co mi się dalej pokaże:

Obrazek

Oooo! moim oczom ukazuje się podpowiedź: "Configure Annotation Preferences"

czyli będzie można to gdzieś ustawić w preferencjach - coś tam musi być takiego i to może jeszcze coś czego nie ma w innych wersjach Eclipse. No to bach na tapetę bierzemy kilka poprzednich wersji Eclipse i tę najnowszą - sprawdzamy.... skanujemy.... sprawdzamy.... skanujemy....

i ciach! okazuje się że w Juno mamy dodatkowo taką pozycję w drzewku jak niżej:

Obrazek

czyli pojawiło się: "Code Analysis" !!! a co w nim mamy po prawej ???

"Statement has no effect" !!!

generowane przez Eclipsa i możemy to pięknie wyptaszyć .... więc odptaszkowujemy tę opcję i pseudo-warningi z takich instrukcji znikają a nasze oczęta nie są drażnione.

Można byłoby się obawiać no że hmmm no ale co teraz jeśli tego typu błąd tzn ostrzeżenie wystąpi gdzieś w kodzie na prawdę ? to co - może tego nie zauważymy ???? ....

O nie nie - spokojnie to już byłoby ostrzeżenie kompilatora a nie Eclipsa więc po pierwsze pojawiłoby się w konsoli po kompilacji a jednocześnie nie wyobrażam sobie aby na taki Warning od kompilatora miał nie zareagować Eclips. No i proszę mam rację - zasymulujmy sobie w kodzie C wyrażenie które wygeneruje nam Warniga prawdziwego w konsoli można to zrobić tak:

Obrazek

i co widzimy że teraz nawet Eclips pokazuje obydwa ostrzeżenia nieco inaczej. To wygenerowane przez kompilator oznaczył standardowo trójkątem ostrzegawczym, a to wynikające z jego "Code Analysis" jakąś pchłą .... (bo znowu włączyłem PTAKA) przy tej opcji. A zatem teraz go wyłączam i proszę jak to wygląda:

Obrazek

czyli podkreślenia z domysłów eclipsa (code analysis) zniknęły bezpowrotnie natomiast warningi z kompilatora tak jak miały być tak pozostają.

KONIEC TEMATU

_________________
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: 11 lis 2013, o 20:00 
Offline
Nowy

Dołączył(a): 11 lis 2013
Posty: 8
Pomógł: 0

Witam

Po prawienia w bibliotece HD44780.h funkcji lcd_str_P, otrzymuję błąd:

conflicting types for 'lcd_str_P'

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2013, o 20:10 
Offline
Moderator
Avatar użytkownika

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

No a poprawiłeś także deklarację funkcji w *.h ? ;)

_________________
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: 12 lis 2013, o 17:37 
Offline
Nowy

Dołączył(a): 11 lis 2013
Posty: 8
Pomógł: 0

Dzięki nie pomyślałem :(



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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