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.