Skocz do zawartości

[C][Atmega16] Timer0 po raz setny...


mopsiok

Pomocna odpowiedź

Otóż mylisz się dondu w jednej podstawowej rzeczy. Jest dokładnie tak jak napisałem wcześniej, ale po kolei:

- po niezbędnych inicjalizacjach zmiennych i wskaźnika stosu wywoływana jest funkcja main:

+0000002C:   E5CF        LDI       R28,0x5F       Load immediate 
+0000002D:   E0D4        LDI       R29,0x04       Load immediate 
+0000002E:   BFDE        OUT       0x3E,R29       Out to I/O location 
+0000002F:   BFCD        OUT       0x3D,R28       Out to I/O location 
+00000030:   940E0036    CALL      0x00000036     Call subroutine        <---- skok do main() 

- po powrocie z funkcji main wykonywany jest skok do etykiety _exit

+00000032:   940C0039    JMP       0x00000039     Jump                    <---- skok do wyłączenia przerwań 

- a tam wykonuje się instrukcja wyłączenia przerwań:

+00000039:   94F8        CLI                      Global Interrupt Disable 

i na koniec skok do samego siebie a nie do wektora resetu procesora:

+0000003A:   CFFF        RJMP      PC-0x0000      Relative jump <----   skok do początku programu

Twój komentarz dodany w linii powyżej jest błędny ponieważ jest to instrukcja skoku względnego. Argument PC-0x0000 oznacza skok do samego siebie.

Nie ma tu mowy o skakaniu do adresu 0 i zaczynaniu programu od nowa - to byłoby głupie i niebezpieczne.

Reszta Twoich zapalczywych i wytłuszczonych wywodów o resetowaniu procesora itp jest konsekwencją tego błędu.

Nadal uważam, że procesor nie idzie w żadne maliny a jego zachowanie po wyjściu z main jest deterministyczne i niegroźne.

Czy słowo "przepraszam" przejdzie Ci przez klawiaturę?

EDIT: Brawo rezolut, dobrze Ci idzie w C 🙂 A ja.. muszę jeszcze szybciej pisać.

Link do komentarza
Share on other sites

Marek ma rację, że RJMP to skok relatywny względem jego adresu. Szybko pisałem program, odpaliłem symulator, sprawdziłem działanie napisałem ... zbyt szybko nie zwróciłem uwagi, że coś mój symulator dziwactwa wyprawia przy robieniu kroków za pomocą Step in (F11):

Hmm, wygląda na to tak, jakby problem leżał w obsłudze stosu w symulatorze.

Nie zmienia to jednak faktu, że źle opisałem instrukcje w kodzie powyżej.

Oczywiście Marek ma rację, że program powinien przejść do adresu 39h wyłączyć przerwania i kręcić się w pętli.

Reszta Twoich zapalczywych i wytłuszczonych wywodów o resetowaniu procesora itp jest konsekwencją tego błędu.

Nadal uważam, że procesor nie idzie w żadne maliny a jego zachowanie po wyjściu z main jest deterministyczne i niegroźne.

Tak zgadza się, ale tak jak wspomniałem w kompilatorze GCC. W innych trzeba to potwierdzić.

A ja muszę popracować nad problemem z symulatorem 🙁

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

@marek1707

Drobna, choć istotna uwaga - niepotrzebnie dodajesz agresywne przymiotniki - po co podgrzewasz dyskusję? Ja tego nie robię - w poprzednim poście przyznałem Ci rację:

Czyli robi dokładnie to co napisał marek1707

i polemizowałem z nią wytłuszczając informacje, które uznałem za istotne.

Ale czy to nie są właśnie maliny?

Ja uważam, że właśnie są to maliny ...

To było agresywne z mojej strony?

Nie dodałem zbędnych agresywnych przymiotników tak jak Ty:

Reszta Twoich zapalczywych i wytłuszczonych wywodów ...

Należę to tej grupy ludzi w "słusznym wieku", która nie boi się przyznać do błędu. Co więcej potrafię nawet zrobić z tego użytek dla innych pokazując na blogu, że ja także czasami palnę głupotę - patrz ostatnie zdanie z linkiem w stopniu nr 7 : http://mikrokontrolery.blogspot.com/2011/04/pieklo-poczatkujacych.html

na moim blogu.

Więcej wzajemnego szacunku 🙂

W miłej atmosferze łatwiej się dochodzi do istoty problemu, a agresywne przymiotniki są zbędne.

-----------

@rezolut

Brawo rezolut, dobrze Ci idzie w C 🙂

Ja także się do tego przyłączam i piwko ode mnie kol. rezolut za dokładność analizowania podpowiedzi - żeby wszyscy byli tacy dociekliwi.

Może zatrudnię Ciebie do wyszukiwania kawiatków na blogu? 🤣🤣🤣

Pewnie się jakieś znajdą ...

Link do komentarza
Share on other sites

Dzięki Panowie, za w końcu jednomyślne rozwiązanie zagadnienia problemowego 🙂

Ja się dopiero uczę C i mam z tym trochę kłód pod nogami (ale to już w moim wątku dot. C).

Link do komentarza
Share on other sites

... w końcu jednomyślne rozwiązanie zagadnienia problemowego 🙂

Jest jednomyślne dlatego, że tu nie ma alternatyw, kompromisów itp. jak w przypadku PWM vs silnik.

Powodzenia w dalszej nauce C! 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Na mnie wytłuszczenia działają jak krzyk. A Ty wykrzyczałeś mnóstwo nieprawdziwych rzeczy. Nie mówię, że tylko do mnie, do wszystkich nas jak to czytamy. Nie będę tu cytował, wystarczy, że zajrzysz wyżej. Post był zapalczywy, naszpikowany emocjami a co gorsza oparty na Twojej niewiedzy. I tym postronnym czytelnikom należy się zwykłe "Przepraszam", zamiast przydługich wywodów jak to Cię symulator zwiódł...

A taki cynizm jest po prostu ohydny:

...w poprzednim poście przyznałem Ci rację:

dondu napisał/a:

Czyli robi dokładnie to co napisał marek1707

i polemizowałem z nią..

To co, przyznałeś rację czy polemizowałeś z nią? Przyznałeś ale.. przez całą dalszą część jej zaprzeczałeś. Nie chce mi się już gadać...

Jedyna pociecha jest taka, że przez to całe zamieszanie użytkownicy AVRGCC przestali bać się mitów i zabobonów związanych z funkcją main() i jej kończeniem. Może też częściej będą zaglądać do plików wynikowych zamiast zastanawiać się "co tu nie działa". W listingu asmeblerowym wszystko widać jak na dłoni.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.