Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

simulator w Atmel Studio pokazuje różne czasy

squelch 02 Kwi 2017 19:13 822 8
  • #1 02 Kwi 2017 19:13
    squelch
    Poziom 11  

    Witam uruchomiłem symulator w atmel studio i zaplikowałem taki kod:

    Kod: avrasm
    Zaloguj się, aby zobaczyć kod

    I kiedy wybieram opcje continue( ostatnia instrukcja ma pułapkę) to pokazuje mi czas ok 20ms.
    Natomiast dla step out 40ms.
    Jak to możliwe ?

    0 8
  • #4 03 Kwi 2017 14:01
    JarekC
    Poziom 27  

    Witam,

    Jeżeli to cały program to:
    - brakuje inicjalizacji wskaźnika stosu
    - brakuje wywołania funkcji (CALL) czekaj_ms
    - brakuje głównej pętli programu

    JarekC

    0
  • #5 03 Kwi 2017 15:19
    tmf
    Moderator Mikrokontrolery Projektowanie

    @JarekC To niekoniecznie musi być problemem, bo:
    - w większości AVR stos ustawiany jest podczas resetu na koniec SRAM, więc nie trzeba go inicjalizować (ale warto sprawdzić, czy w użytym w symulatorze modelu tak jest),
    - funkcja się wywoła, bo asembler umieści ją począwszy od adresu 0, czyli wektora resetu,
    - skoro to symulacja i na końcu jest breakpoint to pętla główna nie jest potrzebna.

    0
  • #6 03 Kwi 2017 15:49
    JarekC
    Poziom 27  

    @tmf
    - symulator w AVR Studio 4.19 nie ustawia automatycznie wskaźnika stosu
    - debugowanie z wykorzystaniem StepOut prawdopodobnie bazuje na analizie zachowania stosu dlatego:
    --- w AVR Studio 4.19 StepOut nie działa jeżeli nie było CALL (błąd: Cannot StepOut)
    --- w AVR Studio 4.19 StepOut nie działa jeżeli nie był zainicjowany stos (błąd: Uninitialized stack pointer)

    Powyższe wnioski na podstawie próby wykonanej przed chwilą na kodzie zamieszczonym przez autora.

    Autor nie podał w jakim środowisku przeprowadzał testy, możliwe że w nowszym ATMEL Studio, niemniej zgłoszony problem może wynikać z braku inicjalizacji stosu i rozkazu CALL.

    JarekC

    0
  • #7 03 Kwi 2017 16:06
    tmf
    Moderator Mikrokontrolery Projektowanie

    @JarekC Przecież autor podał w pierwszym poście, że używa Atmel Studio. Symulator nie może wymagać ustawienia stosu, jeśli symulowany MCU robi to automatycznie po resecie. Jak to działa w staruszku AVR Studio to nawet nie ma co roztrząsać, chyba, że wśród muzealników :)

    0
  • #8 03 Kwi 2017 16:20
    JarekC
    Poziom 27  

    @tmf
    - wpis w temacie o ATMEL Studio rzeczywiście przeoczyłem
    - nie mniej wykorzystywanie STEP OUT bez CALL jest bez sensu,
    Należy pamiętać że STEP OUT zatrzyma się przy wyjściu z bieżąco wykonywanej funkcji która może zawierać wiele innych wywołań więc nie może bazować tylko na samym rozkazie RET. Prawdopodobnie analizowana jest zawartość stosu. Przy braku CALL gdzie ma się zatrzymać STEP OUT?

    Nie wszystkie AVR automatycznie ustawiają stos na końcu pamięci RAM.
    Dla przykładu ATMEGA16A:
    simulator w Atmel Studio pokazuje różne czasy

    AVR Studio 4.19 może nie wspierany i stary ale cięgle bardzo użyteczny.

    JarekC

    0