SAME70 i2c / twihs, Single Step / Step Over Debugger Problem

OP #7412579
Lesenswert?
• ▲
▼

Hallo,

ich habe hier ein Custom Board mit einem ATMEL (Microchip) SAME70 Prozessor, bei dessen I2C / TWIHS Bus mit einer externen RTC und einem externen Sensor verbunden ist.

Als Debugger habe ich den ATMEL ICE Debugger, der mit SWD benutzt wird. Debugging funktioniert auch im Grunde, aber ich bin inzwischen der Meinung, dass Single Steps oder Step Over dafür sorgen, dass I2C Fehler verursachen. Entweder kommen Fehlercodes zurück oder das Programm bleibt in einer Dauerschleife hängen.

Als Beispiel habe ich eine RTC Test Funktion, abstrahiert sieht das ungefähr so aus:

1
err = rtc_probe();
2
date = my_new_date();
3
err = set_rtc_date_time(&date);
4
date = my_other_date();
5
err = get_rtc_date_time(&date);

rtc_probe() liest ein Register von der RTC aus, set und get setzt und liest Registerwerte mittels den i2c read und write Kommandos und erstellt es in mein date struct.

Angenommen, ich setze ein Breakpoint auf Zeile 1 und klicke nur durchgehend auf Continue. Der Wert von err ist durchgehend 0 und alles funktioniert. Sobald ich aber von Zeile 1 über Zeile 2 step over mache, dann kommt bei Zeile 5 z.B. err = 5 raus und. Ein Continue sorgt dann, dass wieder nur 0 raus kommt. Steppe ich mehrmals rüber als auch über 3 und 4 und mache dann Continue, dann entsteht eine Dauerschleife.

Ein Kollege meint, dass der Debugger vermutlich nicht mit den Timings vom gesamten Prozessor klar kommt bzw. der Prozessor das Debugging nicht mag. Kennt ihr solches Verhalten? Kann man da irgendetwas machen? Ich bin langsam am verzweifeln, weil ich weder richtig debuggen kann noch printf() nutzen kann.

Wäre über Tipps oder Ratschläge dankbar.

Moderator (Firma: Titel) Persönliche Seite #7412720
Lesenswert?
• ▲
▼

Burak S. schrieb:

Kennt ihr solches Verhalten?

Verwendest du eine I2C Engine/Hardware des Controllers?

Es gibt beim Debuggen immer wieder Überraschungen, wenn man Hardware im Einzelschritt "durchlaufen" will. Denn die Hardware der seriellen Schnitte (evtl. sogar mit DMA) hält ja am Breakponit nicht an, sondern läuft Vollgas weiter.

Kann man da irgendetwas machen?

  • erst dahinter einen Breakpoint setzen und die Ergebnisse der 3 Aufrufe in 3 Variablen speichern
  • sich den Transfer mit einem Logikanalyzer direkt auf dem I2C Bus ansehen

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.