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

Debugowanie w Atmel Studio 6.2

maczar 18 Lut 2015 08:40 660 4
  • #1 18 Lut 2015 08:40
    maczar
    Poziom 13  

    Czy można w Atmel studio ustawić watch na rejestr konfiguracyjny ?
    Np. chciałbym podejrzeć zawartość TCC0.CNT, i/lub ustawić brakepoint condition na TCC0.CNT=0xff.

    Drugie pytanie - czy można debugować kod krok po kroku z częstotliwością taktów zegara ?

    1 4
  • SterControl
  • #2 18 Lut 2015 08:52
    tmf
    Moderator Mikrokontrolery Projektowanie

    Podgląd rejestrów IO masz w IO View, wystarczy sobie włączyć i nie trzeba używać watch. Pamiętaj też, że rejestry IO występują w przestrzeni adresowej MCU, więc jeśli w watch włączysz podgląd komórki pamięci to zobaczysz ich zawartość. Sądząc z formatu piszesz dla XMEGA, ponieważ dla tego MCU IO są zdefiniowane w postaci struktur, więc wpisanie w watch np. TCC0.CNT jest poprawne i powinno wyświetlić zawartość tego pola struktury.
    Breakpoint możesz oczywiście ustawić z warunkiem, robisz w tym celu zwykłego warunkowego breakpointa dla adresu pamięci.
    Co do debugowania step by step z częstotliwością zegara to jest to niemożliwe - żaden interfejs nie przesłałby danych z wymaganą częstotliwością. Jeśli z jakiegoś powodu jest to niezbędne to można odpalić symulator i włączyć logowanie wybranych rejestrów - np. konfigurując plik stymulacji dla debugera. Robienie trace w czasie rzeczywistym na hardware wymaga odpowiedniego wsparcia ze strony MCU - AVR8 go nie mają, mają taką możliwość niektóre modele ARM.

    0
  • SterControl
  • #3 18 Lut 2015 09:01
    maczar
    Poziom 13  

    Niestety bezpośrednie wpisanie nazwy rejestru np RTC.CNT nie działa (Left of dot operand is an undefined composite object)

    Działa natomiast wpisanie wartości (*(RTC_t *) 0x0400) (czyli definicja makra RTC)

    Ale nie można w ten sposób odwołać się do rejestru np. PMIC_CTRL gdyż jego definicja wskazuje na _SFR_MEM8(0x00A2)

    Co do taktowania - chodzi mi o pracę krokową - czyli tak jak step into/out ale co jeden takt a nie co jedną instrukcję.

    0
  • #4 18 Lut 2015 09:23
    tmf
    Moderator Mikrokontrolery Projektowanie

    To zamiast RTC.CNT wpisz tylko RTC, wtedy pojawi ci się znacznik, że jest to struktura (taki plusik) i będziesz mógł ją rozwinąć, obserwując wartości jej pól. Niewykluczone, że zadziała też RTC_CNT.
    Co do pracy krokowej po jednym cyklu to się nie da, da się po jednej instrukcji (w większości przypadków w sumie po cyklu) - trzeba zrobić trace w oknie disasemblera.

    0
  • #5 18 Lut 2015 09:28
    maczar
    Poziom 13  

    tmf napisał:
    To zamiast RTC.CNT wpisz tylko RTC, wtedy pojawi ci się znacznik, że jest to struktura (taki plusik) i będziesz mógł ją rozwinąć, obserwując wartości jej pól. Niewykluczone, że zadziała też RTC_CNT.


    Właśnie niestety nie działa. Zarówno wpisanie RTC, RTC_CNT czy PMIC_CTRL w oknie watch zwraca: Unknown identifier
    Potrzebuje tej funkcjonalności gdyż chciałbym zatrzymać program np. przy konkretnej wartości licznika timera.

    tmf napisał:

    Co do pracy krokowej po jednym cyklu to się nie da, da się po jednej instrukcji (w większości przypadków w sumie po cyklu) - trzeba zrobić trace w oknie disasemblera.


    Rozumiem.


    EDIT:

    Udało mi się trochę obejść problem tj. utworzyłem takie coś:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    i teraz mogę podglądać zmienną *temp, ustawić brake condition itp.

    0