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



Teraz jest 17 paź 2017, o 04:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 33 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
 Tytuł: Problem z C
PostNapisane: 8 mar 2017, o 17:23 
Offline
Nowy

Dołączył(a): 08 mar 2017
Posty: 6
Pomógł: 0

Witam
Dziękuję za uwagi i szybką odpowiedz.
Kod wstawiłem wg zaleceń i dodałem komentaże. Naukę C opieram na książce 'Mirokontrolery AVR język C podstawy programowania'. Kod, który wstawiłem, napisany jest wg zaleceń z ksiązki (kolejno: pliki nagłówkowe, definicje zmiennych globalnych, deklaracje funkcji, główna f. programu, definicje funkcji).
Kod programu, jaki załączam poniżej, jest maksymalnie uproszczonym fragmentem programu, jaki piszę, do obsługi czujnika DS 18B20, gdzie problem wystąpił. Kod jest tak napisany, by pokazać sedno problemu , bez konieczności analizowania całości programu, oraz, by w łatwy sposób można było go prześledzić. Wygląda na to, jakby kompilator niewłaściwie wykonywał instrukcję a = (a << 8); lub a = (a >> 4);???. Gdzie robię błąd ???. Ponawiam prośbę.
Pozdrawiam

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



Ostatnio edytowano 9 mar 2017, o 16:17 przez hbtomek, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 8 mar 2017, o 17:42 
Offline
Moderator
Avatar użytkownika

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

hbtomek napisał(a):
Bardzo proszę o przetestowanie programiku,

zamiast tego proponuję ci zapoznaj się z tym

http://mirekk36.blogspot.com/2015/07/ec ... ogram.html

i sam to zrobisz - mówię ci

------------------------ [ Dodano po: 1 minucie ]

poza tym szczerze polecam ci zacząć uczyć się C od tej książki:

http://atnel.pl/mikrokontrolery-avr-jezyk-c.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  
 Tytuł: Re: Problem z C
PostNapisane: 8 mar 2017, o 20:18 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 316
Pomógł: 29

Zgodnie z kodem powinno być cały czas 1. Zobacz co dzieje ci się na PB5.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 9 mar 2017, o 15:53 
Offline
Nowy

Dołączył(a): 08 mar 2017
Posty: 6
Pomógł: 0

Witam
Dziękuję za uwagi i szybką odpowiedz.
Kod wstawiłem wg zaleceń i dodałem komentarze. Naukę C opieram na książce 'Mirokontrolery AVR język C podstawy programowania'. Kod, który wstawiłem, napisany jest wg zaleceń z ksiązki (kolejno: pliki nagłówkowe, definicje zmiennych globalnych, deklaracje funkcji, główna f. programu, definicje funkcji).
Kod programu, jaki załączam poniżej, jest maksymalnie uproszczonym fragmentem programu, jaki piszę, do obsługi czujnika DS 18B20, gdzie problem wystąpił. Kod jest tak napisany, by pokazać sedno problemu , bez konieczności analizowania całości programu, oraz, by w łatwy sposób można było go prześledzić. Wygląda na to, jakby kompilator niewłaściwie wykonywał instrukcję a = (a << 8); lub a = (a >> 4);???. Gdzie robię błąd ???. Ponawiam prośbę.
Pozdrawiam

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  
 Tytuł: Re: Problem z C
PostNapisane: 9 mar 2017, o 17:17 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1168
Lokalizacja: okolice Warszawa
Pomógł: 107

Witam,
Może się mylę,
ale spróbuj przy deklaracji zmiennej "a" dodać przed przydomek volatile,
żeby kompilator czasem nie optymalizował dostępu do tej zmiennej w funkcji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 9 mar 2017, o 22:48 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 331
Pomógł: 13

Będzie prościej znaleźć rozwiązanie problemu, jak kolega powie co zamierzał uzyskać, bo wstawiony kod działa jak najbardziej prawidłowo.

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 9 mar 2017, o 23:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1763
Pomógł: 194

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

brakuje &
Problem z C - fajny nagłówek

Pozdr.

Edit: Z tym operatorem oczywiście palnąłem bzdurę - cóż było późno a w pokoju ciemno ;)



Ostatnio edytowano 11 mar 2017, o 17:31 przez kicajek, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 10 mar 2017, o 11:43 
Offline
Nowy

Dołączył(a): 08 mar 2017
Posty: 6
Pomógł: 0

Dziękuję wszystkim za pomoc.
Daro69 ma rację z 'volatile' przed 'a'. Dzieki.
Programik działa też właściwie, gdy WYŁĄCZĘ optymalizację kodu.
Nie rozumiem tylko, dlaczego program nie działa z włączoną optymalizacją kodu bez 'volatile' przed zmienną 'a'. Program nie zawiera obsługi przerwań, czyli nie ma problemu ze współdzieleniem zasobów pamięci.??? Może ktoś to wytłumaczy?
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 10 mar 2017, o 12:04 
Offline
Użytkownik

Dołączył(a): 16 sty 2017
Posty: 112
Lokalizacja: Nr GG 31324
Pomógł: 7

Pomijając sprawę optymalizacji kodu (nie mam do tego dostępu)
to skupiłbym się na volatile.
Używasz zmiennej "a" w funkcji f1
bez volatile "a" nie będzie w niej widoczna.
Poczytaj o zakresie widoczności zmiennych.
Też miałem na początku z tym problem.
(na początku czyli całkiem niedawno)

Gdy to opanujesz to pojawi się extern
(bardzo przydatna rzecz)
i dalej to już poleci z górki do następnego problemu.

_________________
Nie z takimi rzeczami nie dawaliśmy sobie rady.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 10 mar 2017, o 13:24 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 316
Pomógł: 29

Przekaż a jako argument funkcji i po sprawie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 09:32 
Offline
Nowy

Dołączył(a): 11 mar 2017
Posty: 12
Pomógł: 1

To może być błąd kompilatora. W przypadku mikrokontrolerów 8-bitowych operacje, które wykonujesz są dość kosztowne. Po pierwsze używasz liczb 16-bitowych, po drugie przesunięć o wiele bitów. Optymalizator stara się zmniejszyć liczbę koniecznych instrukcji i jeśli wykona to źle, program chociaż napisany poprawnie, może działać błędnie. Niestety taka jest cena za wykorzystywanie archaicznych układów. Oczywiście kompilatory na układy 32-bitowe też mogą mieć błędy, ale wspomniany kod nie wymagałby karkołomnej optymalizacji.
Najlepiej byłoby sprawdzić, jaki kod maszynowy jest generowany przez kompilator. Testowałem na wersji 4.8.1 avr-gcc i program wynikowy wyglądał poprawnie, zarówno z volatile, jak i bez.
Kod:
// a = (a << 8);
  6e:   20 91 60 00     lds     r18, 0x0060
  72:   d2 2f           mov     r29, r18
  74:   80 e0           ldi     r24, 0x00       ; 0
  76:   c8 2f           mov     r28, r24
  78:   ce 01           movw    r24, r28
// a = (a >> 4);
7a:   24 e0           ldi     r18, 0x04       ; 4
  7c:   96 95           lsr     r25
  7e:   87 95           ror     r24
  80:   2a 95           dec     r18
  82:   e1 f7           brne    .-8             ; 0x7c <main+0x20>
  84:   90 93 61 00     sts     0x0061, r25
  88:   80 93 60 00     sts     0x0060, r24

Inne wersje kompilatora dają zupełnie inny kod. Przykładowo gcc 4.5.3 dostępne online w serwisie: https://godbolt.org używa bardzo ciekawej sztuczki do unikania przesunięć.
Napisz której wersji kompilatora używasz, sprawdź jak wygląda generowany kod. Poza tym przemyśl czy nie warto zmienić programu, może przesunięcia o 8 i 4 bity nie są niezbędne? O zmianie mikrokontrolera nawet nie wspomnę, ale może w przyszłości też warto.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 12:26 
Offline
Moderator
Avatar użytkownika

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

elvis napisał(a):
Po pierwsze używasz liczb 16-bitowych,

Ło matko - a to kolega jak rozumiem, na prockach 8-bitowych używa liczb tylko 8-bitowych? Na prockach 16-bitowych tylko liczb 16-bitowych, zaś na prockach 32-bitowych tylko liczb 32-bitowych ? ;) Sorki ale takie wrażenie można odnieść już po tej części wypowiedzi

elvis napisał(a):
po drugie przesunięć o wiele bitów.

Ło żesz w mordkę, czy mam rozumieć, że po wielu latach coś się zmieniło w zakresie programowania i lepiej jest używać przesunięć tylko o kilka bitów zamiast wielu bitów ? Poważnie ? to jest problem dla 8-bitowca ? ;)

Panie kochany - 4-bitowiec sobie by z tym świetnie poradził a nawet 1-bitowy mikrokontroler ;) a co dopiero 8-bitowy ...

elvis napisał(a):
Optymalizator stara się zmniejszyć liczbę koniecznych instrukcji i jeśli wykona to źle, program chociaż napisany poprawnie, może działać błędnie.

No no - to blady strach powinien paść na wszystkich którzy używają 8-bitowców - co to też te optymalizatory wyprawiają ? No włosy dęba stają na głowie ! ... nie do wiary .... eeeeeh takie błędy - i cóż my programiści mamy począć ? a szczególnie na 8-bitowchach ...

elvis napisał(a):
Oczywiście kompilatory na układy 32-bitowe też mogą mieć błędy, ale wspomniany kod nie wymagałby karkołomnej optymalizacji.

Qurczę - jeszcze lepiej - no to nawet nie ma co się przesiadać na 32-bitowe procki - skoro też wszystkie kompilatory przy TAK POWAŻNYCH jak kolega twierdzi i BARDZO SKOMPLIKOWANYCH operacjach żeby nie powiedzieć KARKOŁOMNYCH - mylą się .... no to chyba trza porzucić w ogóle programowanie - toż to zgroza - same błędy kompilatorów ... ojo jooooj .... ło la boga !

Teraz już na poważnie
elvis napisał(a):
Najlepiej byłoby sprawdzić, jaki kod maszynowy jest generowany przez kompilator. Testowałem na wersji 4.8.1 avr-gcc i program wynikowy wyglądał poprawnie, zarówno z volatile, jak i bez.

I od tego warto zaczynać - zamiast wypisywać takie steki bzdur jak wcześniej ;) Sorki ale już dawno nie widziałem tak karkołomnych wyjaśnień problemu - żeby jak się czegoś nie wie - to zwalać już nie tylko na kompilator ale i na 8-bitowce a do tego - jeszcze i 32-bitowe kompilatory batem przejechać ;)

Gdyby kompilatory miały się mylić w TAK PODSTAWOWYCH - zaznaczam TAK PODSTAWOWYCH operacjach .... to lepiej byłoby wyrzucić je wszystkie do kosza i pisać w ogóle od razu w kodach HEX nawet bez używania asemblera ;) wtedy byłoby najpewniej ? ;)

elvis napisał(a):
O zmianie mikrokontrolera nawet nie wspomnę, ale może w przyszłości też warto.

Panie Panie no ale po co ? skoro 32-bitowe kompilatory też zawierają błędy ;) ... wszędzie błędy, same błędy ... błąd błędem pogania - wszyscy robią dokoła źle tylko nie ja ;)

No istny popis (przepraszam kolegę za określenie) ignorancji

zamiast próbować wyjaśnić problem to popisówka o tym, że biedny czarny, słaby, wątły chudy 8-bituś ze spierniczonym kompilatorem, nie potrafi nawet byle przesunięć bitowych zrobić - więc wyrzucić trzeba go do kosza na śmieci i wziąć 32-bitowca - wtedy też będzie spierniczony kompilator ale może dzięki 32-bitom zdarzy się kompilatorowi mniej błędów przecież ... no ba! ...

Sory za ten ton - ale na tym forum będę piętnował i pokazywał kompletny NONSENS takiego podejścia a szczególnie brednie o wyższości jednych mikrokontrolerów nad drugimi i nie ważne o jakie rodziny chodzi czy 8bit vs 32-bit, czy Microchip vs Atmel chociaż teraz to już jedno ;) czy STM vs coś tam coś tam. Od takich dywagacji masz pan inne fora ok ? i tam zapraszam do dyskusji na takie tematy jeśli tolerują.

---------------------------------------------------------

do autora wątku - OCZYWIŚCIE że musi działać bez volatile dla zmiennej a, bo nawet tak jak czarnowidz kompilatorów wyżej powiedział - kod się kompiluje poprawnie ;) bez volatile i działa poprawnie

dlatego szukałbym dalej rozwiązania tej zagadki bo pewnie gdzieś popełniasz błąd - ale jaki ? któż to wie ?

nie wiemy właśnie ani z jakiej wersji kompilatora korzystasz, ani z jakich w nim przełączników kompilacji, ustawień - choćby ustawień samej optymalizacji - czy np -Os ?

_________________
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  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 12:47 
Offline
Nowy

Dołączył(a): 11 mar 2017
Posty: 12
Pomógł: 1

To przygadał jeden ignorant drugiemu :) Jak rozumiem trafiłem w czuły punkt właściciela forum. Nie chciałem nikogo urazić, a przeprosiny przyjmuję - więc może nie bawmy się w uszczypliwości, tylko spróbujmy wyjaśnić - poniekąd ciekawe zachowanie programu.
Wspomniałem o 8-bitowcach nie ze względu na ignorancję, czy chęć wykazanie wyższości jednych układów nad innymi. Po prostu mały avr nie posiada niektórych instrukcji i kompilator musi wygenerować dłuższy program, żeby zrealizować to co 32-bitowcowi zajmuje jedną operację. To wcale nie jest zaleta, ani wada - po prostu kompilator ma więcej pracy, więc i większe ryzyko uzyskania błędnego kodu wynikowego. Oczywiście na ogół kompilatory działają poprawnie, dlatego ich używamy.
Kod wynikowy działa identycznie z wpisanym, ale zawiera inne operacje. Przykładowo zamiast przesunięcia o 8 bitów w lewo, mamy kopiowanie dolnego bajtu do górnego oraz zerowanie dolnego. Natomiast przesuwanie o 4 bity realizowane jest jako pętla i przesunięcia o 1 bit w lewo - a w innych wersjach kompilatora jako bardzo ciekawa sekwencja operacji bitowych, ale nie przesunięć.
Tak jak napisałem, może zamiast skomplikowanych przesunięć lepiej byłoby uprościć program? Ale na początek warto byłoby ustalić dlaczego dodanie / usunięcie volatile ma wpływ na działanie programu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 13:43 
Offline
Moderator
Avatar użytkownika

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

elvis napisał(a):
Jak rozumiem trafiłem w czuły punkt właściciela forum.

Nie w czuły punkt tylko w bezsensowne podejście, że jak tylko coś się stanie czego początkujący nie rozumie, to od razu część z nich podobnie jak kolega krzyczy w niebo głosy o winie kompilatora, procesora, tranzystora ... wszystkiego tylko nie tego że błąd można robić gdzieś samemu. Z takimi zachowaniami walczę od początku i uczę ludzi innego podejście - stąd cały ten wywód określiłem jako bzdurny ... to tyle. Mało ma to wspólnego z jakimś czułym punktem właściciela ;)

Zamiast tego tak jak mówisz - teraz sporo rozsądniej - warto dopytać, i ew pomóc szukać problemu lub rozwiązania - bo przypadek na tyle ciekawy że aż sam chciałbym poznać rozwiązanie ... ale nie po to aby udowadniać swoje racje, tylko po to aby w przyszłości w podobnej sytuacji móc szybciej pomóc innym - to jest moją ideą panie kolego.

_________________
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  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 14:11 
Offline
Nowy

Dołączył(a): 11 mar 2017
Posty: 12
Pomógł: 1

Jeśli dodanie lub usunięcie słówka volatile ma wpływ na poprawność programu, istnieje duża szansa że jest to problem z kompilatorem, albo raczej z optymalizatorem. Oczywiście może być zupełnie inny powód, ale jeśli tylko ta zmiana daje opisywane rezultaty, moim zdaniem uzasadnione jest poszukiwanie problemu po stronie kompilatora.
Ten problem na tyle mnie zaciekawił, że postanowiłem założyć konto na tym portalu. Tym bardziej było mi przykro, że na dzień dobry usłyszałem tak długą i niewiele wnoszącą wypowiedź Szefa tego przybytku. Nie wiem o kim mowa odnośnie początkujących, ale obawiam się że nie zaliczam się do tej grupy. Tego co napisałem proszę nie traktować jako komentarz nawiedzonego amatora, ale raczej skrót myślowy. Optymalizator na avr ma pełne ręce roboty próbując zoptymalizować kod pracujący na liczbach 16- czy 32- bitowych. Ponieważ optymalizacja wbrew pozorom często prowadzi do wprowadzania błędów, więc to może być przyczyna. W przypadku innych układów tak drastyczna optymalizacja nie byłaby po prostu konieczna.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 14:49 
Offline
Moderator
Avatar użytkownika

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

elvis napisał(a):
Jeśli dodanie lub usunięcie słówka volatile ma wpływ na poprawność programu, istnieje duża szansa że jest to problem z kompilatorem, albo raczej z optymalizatorem

Ale widzisz - to jest CAŁKIEM inne podejście - niż to co zaprezentowałeś wcześniej

elvis napisał(a):
Ten problem na tyle mnie zaciekawił,

Mnie też zawsze ciekawią takie rzeczy choćby dla samej zasady - lubię dochodzić sedna sprawy wtedy, ale tu potrzeba więcej informacji i jeśli masz wiedzę na temat asemblera a widać, że masz i to nie małą - to wręcz fajnie mogłoby być próbować wspólnie rozwikłać taką zagadkę - ja tak to traktuję

elvis napisał(a):
Tym bardziej było mi przykro, że na dzień dobry usłyszałem tak długą i niewiele wnoszącą wypowiedź Szefa tego przybytku.

Wiele wnoszącą, tylko skoro się dopiero zarejestrowałeś na tym forum to pewnie nie znasz zasad, że pomagamy i nie wykłócamy się o to który procesor jest lepszy a który gorszy bo to zawsze prowadzi do kompletnie bzdurnych kłótni na każdym forum ... już nie mówiąc że KOMPLETNIE nic nie wnosi do dyskusji na forum ... Liczę na to, że jeśli poznasz i zgodzisz się z takimi prostymi i niepisanymi zasadami to być może zacumujesz na dłużej z nami ....

elvis napisał(a):
Nie wiem o kim mowa odnośnie początkujących, ale obawiam się że nie zaliczam się do tej grupy.

Z ogółu twojej pierwszej wypowiedzi właśnie tylko taki wniosek można było wyciągnąć, chociaż nie ukrywam, że też widać, na pierwszy rzut oka po twoich wypowiedziach że raczej dobrze znasz asembler więc nie jesteś na początku tej drogi i ja tego nie oceniam. Jeśli tobie to pomoże to proszę zapamiętaj, że ja jestem jak najbardziej początkujący i dopiero wszystkiego się uczę - i nie przeszkadza mi ta świadomość w niczym, że jestem początkujący - ok? Jeśli tobie to przeszkadza i czujesz się urażony moją wypowiedzią to przepraszam cię najmocniej.

wracając do meritum
elvis napisał(a):
Optymalizator na avr ma pełne ręce roboty próbując zoptymalizować kod pracujący na liczbach 16- czy 32- bitowych.

To jest jasne jak słońce, że ma pełne ręce roboty - toż to tylko 8-bitowa jednostka i co w tym dziwnego, ale nie zgodzę się z twoim podejściem, że TAK, jeszcze raz PODKREŚLAM mega proste operacje należy zaraz podejrzewać o błędy kompilatora. Nawet jestem w stanie się założyć o dobry "sok jabłkowy" (jeśli wiesz o jakim soku mówię), że to nie wina kompilatora - ale oczywiście mam tę świadomość, że gdzieś na końcu dochodzenia do sedna tej zagadki mogę przegrać ... co z tego? Jej wyjaśnienie pozwoli zapewne i mnie się wiele nauczyć nowych rzeczy albo dowiedzieć się co jeszcze może początkująca osoba (mówię ew o autorze wątku i mam nadzieję, że on się za to nie obrazi) może wymyśleć czy jaki błąd popełnić.

elvis napisał(a):
W przypadku innych układów tak drastyczna optymalizacja nie byłaby po prostu konieczna.

A czy wziąłeś pod uwagę fakt, że kolega autor mógł chociażby przez jakiś przypadek włączyć sobie inny stopień optymalizacji w C ? albo też nie wiemy z jakimi argumentami leci u niego w ogóle kompilacja. Gdybym był pewien, że kompiluje to pod Eclipse to więcej mógłbym się domyślić ale nie wiem. Może robi to pod Atmel Studio ?

I właśnie zasadne jest jedno z twoich wcześniejszych pytań do autora wątku - jaką ma wersję kompilatora, bo pierwsze co bym zrobił to zaraz bym go sobie pobrał i zajrzał również podobnie jak ty do pliku *.lss po kompilacji

Póki co sprawdziłem na chyba 5 wersjach kompilatora które mam pod ręką i za każdym razem wszystko jest dobrze ;) i oczywiście zgodnie z tym co wszem i wobec wiadomo - nie trzeba w przypadku takiego kodu stosować volatile

Podsumowując - elvis - zamiast wciąż się boczyć na właściciela czy tam szefa przybytku, postaraj się zrozumieć jak mówiłem proste zasady i uważam, że może być fajnie .... ja niczego więcej nie oczekuję na tym forum

------------------------ [ Dodano po: 1 minucie ]

Jazio napisał(a):
Kol. Mirek ma taki charakter w wypowiedziach, że czasami "może w pięty wchodzić" , trzeba przywyknąć

Kol. Mirek ma pewne zasady - bardzo proste, których broniłem, bronię i będę bronił i już ...

Ale jeśli czasem coś mnie poniesie i popełnię błąd to potrafię też przeprosić i to oficjalnie i nie raz to robiłem ... więc nie jest chyba tak źle

_________________
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  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 14:59 
Offline
Nowy

Dołączył(a): 11 mar 2017
Posty: 12
Pomógł: 1

Więc wracając do problemu - potrzebujemy "zreprodukować" błąd (nie wiem jak to się po polsku poprawnie mówi/pisze). Do tego przydałoby się wiedzieć jaka dokładnie jest wersja kompilatora oraz ustawienia. Plik wynikowy też byłoby fajnie zobaczyć - hbtomek mógłbyś udostępnić odpowiednie informacje?

PS. Eclipse to edytor (IDE) nie kompilator. Przepraszam, ale nie mogłem nie sprostować...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 15:16 
Offline
Moderator
Avatar użytkownika

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

elvis napisał(a):
PS. Eclipse to edytor (IDE) nie kompilator. Przepraszam, ale nie mogłem nie sprostować...

Oczywiście że IDE ale jeśli ja wiem jakie IDE stosuje początkujący to wiem czego mogę się spodziewać po domyślnych ustawieniach kompilatora ... i o to mi chodziło, a nie o próbę twierdzenia, że od edytora może zależeć wynik kompilacji

------------------------ [ Dodano po: kilkunastu sekundach ]

Jazio napisał(a):
Ja testowałem u siebie na AT v.3.5.1.1671 na wszytskich stopniach optymalizacji i za każdym razem, mimo różnic w kodzie wynikowym, działanie finalne było prawidłowe.

No ja podobnie - wprawdzie pod Eclipsem albo MkClipsem ale z pięcioma różnymi wersjami kompilatora

------------------------ [ Dodano po: 3 minutach ]

Myślę, że dlatego co najmniej kilka osób zaintrygowała ta zagadka ;) bo albo ..... albo się okaże, jakiś mega banalny błąd , czeska literówka itp ... ja obstawiam to drugie jak mówiłem - ale z pewnym dreszczykiem emocji - ciekawości ;)

_________________
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  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 15:21 
Offline
Nowy

Dołączył(a): 11 mar 2017
Posty: 12
Pomógł: 1

Ja tam bym nie wiedział... Używałem Eclipse z gcc, kilkoma wersjami kompilatorów skrośnych, VC++. Teraz używam, chociaż nie lubię Eclipse z gcc, ale do budowania scons. Samo wykorzystanie IDE nic nie ma wspólnego z kompilatorem, ani tym bardziej jego ustawieniami... Stąd było moje sprostowanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 15:32 
Offline
Moderator
Avatar użytkownika

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

elvis napisał(a):
Ja tam bym nie wiedział.

No i tym się różnimy i też dlatego ja właśnie preferuję dla początkujących Eclipse bo jest mi najłatwiej i najszybciej pomagać - bo znam na pamięć wiele rzeczy.

elvis napisał(a):
Samo wykorzystanie IDE nic nie ma wspólnego z kompilatorem, ani tym bardziej jego ustawieniami...

Ma wspólnego - na dzień dobry świeżo zainstalowane Atmel Studio 7 najnowsze różni się kilkoma drobiazgami domyślnej konfiguracji od (hmmm może nie od Eclipsa) ile od plugina AVR który dodawany jest do Eclipsa - więc proszę, nie opowiadaj że nie ma nic wspólnego jeśli być może nie masz takiego porównania ...

elvis napisał(a):
Używałem Eclipse z gcc, kilkoma wersjami kompilatorów skrośnych,

to właśnie nie ma dużego znaczenia w tym przypadku

_________________
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  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 15:34 
Offline
Nowy

Dołączył(a): 11 mar 2017
Posty: 12
Pomógł: 1

Nie ma sensu ciągnąć tej dyskusji. Wróćmy do oryginalnego problemu - chyba mamy inne wyobrażenia na temat wykorzystywanych narzędzi i lepiej niech tak zostanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 16:59 
Offline
Moderator
Avatar użytkownika

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

elvis napisał(a):
Nie ma sensu ciągnąć tej dyskusji. Wróćmy do oryginalnego problemu - chyba mamy inne wyobrażenia na temat wykorzystywanych narzędzi i lepiej niech tak zostanie.

Też tak myślę, ja nie mam na siłę zamiaru przekonywać do swoich racji ... więc proszę o tolerancję w drugą stronę a wszystko będzie dobrze ;)

Teraz niech coś podpowie autor wątku w końcu ;)

_________________
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  
 Tytuł: Re: Problem z C
PostNapisane: 11 mar 2017, o 23:55 
Offline
Nowy

Dołączył(a): 08 mar 2017
Posty: 6
Pomógł: 0

Witam
Na początku dziękuję za tak żywe zaangażowanie i za, mam nadzieję, pozytywne emocje..
Do rzeczy.
Pracuję na:
" AVR Studio
GUI Version 4, 19, 0, 730
AVR Simulator 1, 0, 2, 1
ATmega32 232

Operating System
Major 6
Minor 2
PlatformID 2
Build 9200


Plugins:

AvrPluginAvrAsmObject 1, 0, 0, 48
AvrPluginavrgccplugin 1, 0, 0, 11
Stk500Dll 1, 0, 1, 16 "

- to jest kopia całości z "wersja AVR STUDIO".
Kompilator: AVRGCC z pakietu WinAVR-20100110.



Do odpowiedzi dołączam zrzuty ekranów z oknami konfiguracji oraz plik .lss z zamieszczonego programiku.

Jeszcze jedno spostrzeżenie odnośnie niedziałania/działania programiku.
Gdy umieszczam instrukcję _delay_us(1) po instrukcji a = (a << 8); (linia 18) , to program działa poprawnie(???).
Odnośnie możliwości błędów w połączeniach układu - raczej wykluczam. Działanie sprawdzałem na dwóch różnych układach.
Literówki - też raczej nie.
Pozdrawiam

ObrazekObrazekObrazek

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 14 mar 2017, o 19:49 
Offline
Nowy

Dołączył(a): 11 mar 2017
Posty: 12
Pomógł: 1

Nie jestem ekspertem w asemblerze avr, ale moim zdaniem mamy przykład błędu kompilatora.
Niejako analizujac od końca:
Kod:
                PORTB = ~a;                     //negacja bitowa zmiennej a = 0b 1111 1111 1110 1111
  be:   80 95           com     r24
  c0:   88 bb           out     0x18, r24       ; 24

Czyli wynik (zmienna a) jest w rejestrze r24. Patrzymy trochę wyżej:
Kod:
                a = (a >> 4);           //a = 0b 0000 0000 0001 0000
  b2:   ce 01           movw    r24, r28
  b4:   24 e0           ldi     r18, 0x04       ; 4
  b6:   96 95           lsr     r25
  b8:   87 95           ror     r24
  ba:   2a 95           dec     r18
  bc:   e1 f7           brne    .-8             ; 0xb6 <main+0x26>

Przesunięcie o 4 w prawo wygląda ok, wartość zmiennej na początku była w parze rejestrów r28:r29
Kod:
  ae:   a0 e0           ldi     r26, 0x00       ; 0
  b0:   ed 01           movw    r28, r26

Tutaj jest ciekawie. Do r28 wstawiamy 0, to jest w porządku, ale co jest w r29? Chyba coś kompilatorowi uciekło...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 15 mar 2017, o 00:58 
Offline
Moderator
Avatar użytkownika

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

hbtomek napisał(a):
Nie jestem ekspertem w asemblerze avr, ale moim zdaniem mamy przykład błędu kompilatora.

Żadne tam błędy kompilatora ;)

Po pierwsze, jestem w szoku, że mamy rok 2017 a tymczasem autor wątku nie dość, że odkopuje jakieś wykopaliska z górnej kredy z czasów dinozaurów - czyli WinAVR 2010 rok !!! - Le MASAKRA ! ;) no ale ok - załóżmy że ma zamiłowanie do wykopalisk - no trudno

to jeszcze zamiast testować na ŻYWYM, podkreślam ŻYWYM układzie czyli kawałku procka z diodami LED to wpuszcza się w "KANAŁ" symulatora i to na dobitkę z MEGA STAREGO AVR Studio 4 ;)

sorki panie autor wątku (to tak żartobliwie mówię a nie prześmiewczo) ale trzeba być MASOCHISTĄ informatycznym ;) no poważnie - mamy przecież 2017 rok. Czy kolega zatrzymał się w czasie ? :lol:

----------------------------------

ale ok wróćmy do meritum - z wielkiej ciekawości - zabawiłem się w archeologa i zainstalowałem jakiś stary toolchain WinAVR2010 rok !!!

zrozumiałbym jeszcze gdyby autor wziął jak mówiłem - kawałek fizycznego procka, podłączył sobie diody LED, jakiś wyświetlacz LCD i robił próby i testy

ale ..... SYMU-kurczę-LATOR i to archaiczny ? .... bleeee ;) (zaznaczam mówię pół żartem pół serio żeby zaraz ktoś się nie obraził tragicznie) ....

i nawet nie zadał sobie trudu sprawdzenia w praktyce ?

No dla mnie to nie do pomyślenia .... Dlatego ciekaw byłem czy możliwe żeby w tamtych czasach był aż TAK MOCNO spierdzielony (sorry za wyrażenie kompilator) - a wątpię bo w tamtych czasach używałem już mocno kompilatora C i gdyby na takim poziomie PODSTAWOWYCH przesunięć bitowych miał RYPAĆ takie błędy to nie wiem co bym zrobił ..... a sporo projektów się robiło ;)

Na myśl mi nie przeszło nawet w tamtych zamierzchłych czasach żeby rypać się z symulgatorem :lol:

-----------------------

no dobra wziąłem sobie dzisiaj maszynkę wirtualną ze starym jak świat Windows XP, nie dość że odpaliłem staruszka z brodą WinAVR2010 to jeszcze wziąłem stare jak świat Eclipse LUNA - żeby poczuć klimat tamtych lat ;)

No i skompilowałem cały KOD na żywca z pierwszego postu na zestawie ATB podłączając sobie pod cały PORTB 8 diod LED

i co ?

I DZIAŁA TAK JAK NATURA CHCIAŁA - żadnych problemów !!!

poniżej zawartość pliku *.lss

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


------------------------ [ Dodano po: 2 minutach ]

Nie chce mi się nawet rozpatrywać dlaczego stary symulgator robi taką kichę - szkoda wręcz pary na analizę takich wykopalisk ;)

no ale zagadka poniekąd się rozwiązała - czyli jeśli symulgator robi takiego babola to ok elvis miał rację ;)

ale ja nie przypuszczałbym nawet że można to próbować robić w symulgatorze ;) ... nie wiem - czochra mnie symulgator

-------------------

autorowi wątku polecam

1. korzystanie z najnowszych narzędzi
2. aktualizacje
3. wywalenie symulgatorów i zabawę w prawdziwe procki i programowanie

bo zabawa na symulatorach to jak lizanie lizaka ale w papierku ;)

_________________
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  
 Tytuł: Re: Problem z C
PostNapisane: 15 mar 2017, o 09:22 
Offline
Nowy

Dołączył(a): 08 mar 2017
Posty: 6
Pomógł: 0

Witam
Dla pokazania jakiego środowiska programistycznego używam, skopiowałem zawartość okna "wersja AVR STUDIO", gdzie jest coś o symulatorze. Używam zestawu uruchomieniowego GOTRONIC z bogatym zestawem układów peryferyjnych (http://www.gotronik.pl/modul-uruchomien ... p-572.html) z, jak najbardziej "żywym," ATMEGA32 - nie symulatora. Jeżeli tym wprowadziłem w błąd, to przepraszam.
Z zaleceń skorzystam, chociaż uważam, że nawet "archaiczny, wykopaliskowy" zestaw powinien działać właściwie z tak banalnym kodem.
Dziękuję wszystkim za zaangażowanie i pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 15 mar 2017, o 09:58 
Offline
Nowy

Dołączył(a): 11 mar 2017
Posty: 12
Pomógł: 1

Ja tam zauważyłem, żeby hbtomek używał symulatora. Pewnie jest zainstalowany wraz z AVR Studio i tyle, a autor podał jego wersję wraz z informacjami o środowisku - i to się chwali.
Przyznam, że również spróbowałem zainstalować WinAVR20100110, ale w moim przypadku kod wynikowy wygląda inaczej. Warto podkreślić, że plik .lss nie ma nic wspólnego z symulatorem, czy uruchamianiem na prawdziwym mikrokontrolerze. To po prostu listing programu, czyli wynik działania kompilatora w nico bardziej czytelnej wersji niż czysta binarka. Możemy program uruchamiać na symulatorze, fizycznym układzie, czy też w głowie analizować jego działanie - ale samego kodu to nie zmieni.
Powstaje więc pytanie, dlaczego hbtomek uzyskuje tak dziwny wynik działania kompilatora? Chyba przydałoby się więcej informacji o parametrach wywołania gcc. Czy AVR studio pozwala na wklejenie faktycznie wywoływanych poleceń? Coś jak konsola, czy log powinno być dostępne.

A co do wykopalisk, to naprawdę 2010 rok był tak dawno? Jak ten czas szybko leci. Kompilator niby stary, ale AVR to w całości niemłoda architektura. W sumie czym jest 7 lat dla kompilatora, skoro mówimy o 20 letnim procesorze...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 15 mar 2017, o 10:24 
Offline
Moderator
Avatar użytkownika

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

tak masz rację elvis - ja może popłynąłem z tym symulgatorem ;) ale tylko z marszu i na szybko sprawdziłem

i tak jak widzisz potwierdza się że i w mojej próbie i w twojej kod generuje się poprawnie

tylko z mega czystej ciekawości chciałbym gdzieś złapać - co tu się działo ;) ... ale tak jak piszesz być może trzeba więcej informacji

chociaż z drugiej strony - może wystarczy wgrać i użyć nowych narzędzi

Jeśli chodzi o rok 2010 .... to dla mnie z uwagi na ogromny ciągły postęp i progress w rozwoju technologii i oprogramowania to już plasuje się na dalszym miejscu niż średniowiecze ;)

_________________
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  
 Tytuł: Re: Problem z C
PostNapisane: 15 mar 2017, o 10:43 
Offline
Nowy

Dołączył(a): 11 mar 2017
Posty: 12
Pomógł: 1

Też jestem bardzo ciekaw, co było przyczyną tak dziwnego działania kompilatora - chociażby po to, żeby ustrzec się takich niespodzianek w przyszłości.
Jak chodzi o kompilatory, to niestety widziałem już podobne przypadki. Mój ulubiony błąd był na MSP430 - układ 16-bitowy, więc przy używaniu długich liczb miał więcej pracy. Optymlizator był bardzo efektywny, niestety czasem aż za bardzo - podczas inicjalizacji zmiennej 32-bitowej wartością mieszczącą się w 16 bitach nie zerował wyższej połowy słowa... Najlepiej widać wady kompilatorów kompilując Linuxa, ale to zupełnie inna historia.
Ciekawe jak każdy inaczej postrzega czas - mnie się wydaje jakby 2010 był wczoraj.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Problem z C
PostNapisane: 16 mar 2017, o 16:55 
Offline
Nowy

Dołączył(a): 08 mar 2017
Posty: 6
Pomógł: 0

Odinstalowałem dotychczasowe środowisko prog. AVR STUDIO4. Będę instalował Atmel Studio 7.
Szkoda czasu na dalsze drążenie problemu (3 tygodnie "stania w miejscu" z pisaniem programu). Do mnie przemawia wyjaśnienie kol. elvis'a o błędach kompilatora (analiza pliku .lss) Mam tylko nadzieję, że "świeże" Atmel Studio będzie pozbawione podobnych utrudnień.
Pozdrawiam.



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: 33 ]  Przejdź na stronę 1, 2  Następna strona

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