Forum: Mikrocontroller und Digitale Elektronik SAME70 i2c / twihs, Single Step / Step Over Debugger Problem


von Burak S. (buraks)


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.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

: Bearbeitet durch Moderator
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.