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 |
|
2 |
|
3 |
|
4 |
|
5 |
|
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.