logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

tiny87 - problem z przerwaniami w symulatorze AVR Studio 4.19

tomeeh 14 Mar 2017 18:49 981 12
  • #1 16345558
    tomeeh
    Poziom 24  
    Witam,

    mam problem z obsługą przerwań zewnętrznych INT0 oraz INT1 w symulatorze (Simulator). Piszę w AVR Studio 4.19, gdyż Atmel Studio nie ma symulatora dla ATtiny87. Popatrzcie na ten banalny kod (okroiłem pierwotny kod do absolutnego minimum):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Gdy symuluję stan wysoki na porcie PB6 (czyli zaznaczam kwadracik oznaczony PINB6 w symulatorze), to.... program startuje od początku (od fragmentu i = 0; ). Czyli zachowanie takie, jakby nastąpił reset. Jeśli z kolei symuluję stan wysoki na porcie PA3 (PINA3), to... ląduję w obsłudze przerwania, ale INT0, a nie INT1.
    Wygląda to na jakiś offset przerwań, tzn, zamiast INT0 (vector 1) dostaję RESET (vector 0) a zamiast INT1 (vector 2) dostaję INT0 (vector 1).
    Zrezygnowany zajrzałem do definicji wektorów przerwań w pliku iotn87.h, ale wydaje mi się, że tutaj wszystko gra:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    No to gdzie jest błąd? W symulatorze? Przejrzałem sekcję "known issues" i niczego w sprawie ATtiny87 i przerwań nie znalazłem. Macie jakiś pomysł?
    Na razie programuję "na sucho" i nie mam możliwości sprawdzenia na fizycznym tiny87, ale praktyka zazwyczaj pokazuje, że symulator się jednak nie myli...
    Czy mógłby ktoś przesymulować ten fragment u siebie? U mnie najpłynniej poszło z wyłączoną optymalizacją.
  • #2 16346244
    Konto nie istnieje
    Konto nie istnieje  
  • #3 16346610
    tomeeh
    Poziom 24  
    piotrva napisał:

    Komentujemy to, że używasz przestarzałego kompilatora i środowiska.

    Piotrus_999 napisał:
    Po prostu zainstaluj coś co ma mniej lat niż moje dzieci :). Skąd takie coś żeś wytrzasnął?


    Koledzy piotrva i Piotrus_999, ja was proszę, przeczytajcie pierwszy post w temacie, ale ZE ZROZUMIENIEM, zanim klikniecie na przycisk "odpowiedz". Szczególnej uwadze polecam drugie zdanie w pierwszym poście.
    W czterech postach kpicie ze mnie, piszecie komiczne komentarze zaniżając poziom forum, zamiast starać się zrozumieć problem autora. Myślicie zapewnie, że macie do czynienia z lemingiem, który przeleżał kilka lat pod lodem...

    AVR Studio jest niewiele starszy od wieku mojej najstarzej pociechy, ale mam powody, by go używać (pomijam te sentymenalne). Skąd takie coś wytrzasnąłem - pytasz Piotrus_999 - otóż mam taką zasadę, że trzymam pliki instalacyjne od każdego programu, którego używałem. Zbyt często nowe wersje zawodzą.

    Jeśli nadal tego nie widzicie, to wyjaśniam łopatologicznie:
    ani Atmel Studio 6, ani Atmel Studio 7 nie posiadają symulatora do ATtiny87, czego dowiedziałem się kilka dni temu z dokumentacji programu.
    Jeśli nie wierzycie, oto link do specyfikacji obsługiwanych mikrokontrolerów ATtiny: Link



    A teraz wracamy do sedna:

    @tmf - dzięki za zrozumienie.
    @majeranek53 - dzięki za pierwsze konstruktywne komentarze w dyskusji. Oto wyniki prób:
    1. volatile nic nie zmieniło, nadal PC ląduje w złych miejscach, jest offset wektorów przerwań - tak bym to określił.
    2. zmiana wyzwalania ze zbocza narastającego na poziom (L) nie pomaga - tzn. symulator reaguje odpowiednio na poziomy, ale ląduje w złych miejscach z obsługą przerwań.
    3. dodatkowo wypróbowałem zbocza opadające - to samo co wcześniej: zbocze wykryte odpowiednio, ale zły wektor przerwania.
    4. dodatkowo wypróbowałem czwartą konfigurację ISCn1 / ISCn0 - wyzwlanie jakąkolwiek zmianą stanu (zbocze rosnące oraz opadające) - to też nie pomaga.
  • #4 16346654
    Konto nie istnieje
    Konto nie istnieje  
  • #5 16346655
    Konto nie istnieje
    Konto nie istnieje  
  • #6 16346676
    Konto nie istnieje
    Konto nie istnieje  
  • #7 16346774
    tomeeh
    Poziom 24  
    @Piotrus_999:
    Przeprosiny przyjęte, dzięki za miły gest z Twojej strony! >>szacun<<
    Czy mógłbyś rozszyfrować dla mnie skrót DS, którego użyłeś w poście? Nie przesadzajmy z moim doświadczeniem w programowaniu :-) - jestem hardware'owcem.

    @majeranek53
    Około 2 lata temu symulowałem ATtiny84 na tym samym AVR Studio 4.19 - nie było najmniejszych problemów z wektorem INT0. Dlatego dotychczas zawsze ufałem symulatorowi. Ale jeśli nikt z Was nie widzi tu błędu w moim kodzie i rozumowaniu, to może rzeczywiście jest błąd w symulatorze.

    Ciekawym dla mnie argumentem przemawiającym za tym jest też fakt, że Atmel wycofał się z symulatora dla tiny87 w późniejszych wersjach oprogramowania. Może mieli zbyt wiele problemów i porzucili to...
    Do tego jeszcze taki fakt: w AVR Studio 4.19 istnieje również "Simulator 2", który jest dostępny dla wielu kontrolerów, ale dla t87 - nie.
  • #8 16346794
    Konto nie istnieje
    Konto nie istnieje  
  • #10 16346925
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #11 16347008
    JarekC
    Poziom 32  
    Witam,

    Uruchomiłem podany przykład u mnie na AVR STUDIO 4.19 build 730.

    Zachowuje się również niepoprawnie ale inaczej:

    Zmiana PB6 powoduje skok pod adres 0x0002 (word) 0x0004 (byte)
    Zmiana PA3 powoduje skok pod Adres 0x0004 (word) 0x0008 (byte)

    Jeżeli zerkniemy w symulatorze do okienka dissasembly do zobaczymy że przerwania zostały podpięte poprawnie pod adresy INT0 0x0001 (word) 0x0002 (byte) i INT1 0x0002 (word) 0x0004 (byte). Kompilator więc zadziałał poprawnie.

    Wygląda że rzeczywiście jest błąd w symulatorze i można go stosunkowo łatwo wytłumaczyć.
    Wektory przerwań w ATTINT87 są dwubajtowe a symulator działa jakby były czterobajtowe.
    Można to łatwo sprawdzić zmieniając procesor na ATTINY167 który jest odpowednikiem ATTINY87 (maja wspólna kartę katalogową) z dwa razy większą pamięcią FLASH ale posiada już wektory czterobajtowe (patrz karta katalogowa strona 59).
    Po zmianie na ATTINY167 symulator działa poprawnie.
    Prawdopodobnie ktoś pisząc obsługę symulatora dla ATTINT87/167 nie zwrócił uwagi na ten szczegół.

    Można na etapie symulacji zmienić procesor na ATTINY167 lub skorygować błąd symulatora.
    To drugie okazało się stosunkowo proste wystarczy poprawić plik ATTINY87.XML w sekcji <SIMULATOR> gdzie zdefiniowane są między innymi adresy wektorów przerwań.
    Abyś nie musiał robić tego sam plik w załączeniu (spakowany zip-em). Po podmianie pliku u mnie symulator dla ATTINY87 zachowuje się poprawnie.

    Pozdrawiam
    JarekC

    <ciach>

    Moderowany przez dondu:

    Proszę nie prowokować utarczek słownych nawet wtedy, gdy kolega ma rację.
    Jeśli kolega chce, to może napisać PW do autora tematu, ale nie publicznie.

  • #12 16347758
    tomeeh
    Poziom 24  
    JarkuC,

    stokrotne dzięki za mega konstruktywne, wnikliwe i pragmatyczne podejście do tematu. Odpowiedź wzorcowa - zidentyfikowałeś problem, opisałeś go szczegółowo a na deser zamieściłeś jeszcze gotowe rozwiązanie. Rozwiązanie, które rzeczywiście działa - potwierdzam.

    Chwilowo straciłem wiarę w pomocną dłoń, ale Twa postawa pokazała, że są jeszcze ludzie, którzy potrafią i CHCĄ pomagać. Brawo. Jesteś moim mistrzem.

    Piotrus_999 napisał:

    Używany na elektrodzie powszechnie, tak samo jak RM np., tak że nie rozumiem gdzie u nas?

    (Komentuję na łamach forum, gdyż sygnatura wskazuje, że prawdopodobnie nie odbierasz PW)
    Sorry, wypowiedziałem się niezbyt precyzyjnie - pisząc "u nas". Tak na prawdę miałem na myśli ludzi po fachu u siebie w pracy.
  • #13 16348254
    piotrva
    VIP Zasłużony dla elektroda
    @tomeeh Z mojej strony tez przeprosiny - nie zauważyłem, że jest problem z brakiem symulacji tego scalaka w nowszych wersjach.
REKLAMA