www.mikrocontroller.net

Forum: Compiler & IDEs Problem beim debuggen auf LPC2387 mit Zylin Plugin


Autor: Steffen H. (mcst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich hoff mal wieder auf euch als Hilfe:

Ich nutze Eclipse mit openOCD und Zylin Plugin (GDB Debugger) um mein 
Programm über einen ARM-USB-TINY auf ein LPC2378 Entwicklungsboard zu 
übertragen (beides von Olimex).

Mein Problem ist nun, dass nur jeder zweite Start des Debuggers glückt.
Wenn der Debugger startet, reagiert er auf Breakpoints und ich kann 
beobachten wie sich der Wert von Variablen ändert oder Registerinhalte 
gesetzt werden.

Theoretisch also alles sehr schön aber am Entwicklungsboard tut sich 
nix. Genauer: ich setze Register damit eine LED blinkt und lese einen 
Taster ein -> beides geht nicht mit Debugger.
Dem Zylin Plugin habe ich folgende die Komandos mitgegeben:
target remote localhost:3333
monitor reset
monitor sleep 500
monitor poll
monitor soft_reset_halt
monitor arm7_9 force_hw_bkpts enable
monitor flash erase_sector 0 0 0
monitor flash write_image Debug\\test1.hex 0x0
break main
load
continue

Übertragen wird mein Test Programm korrekt in den Flash, wenn ich es 
ohne Debugger laufen lasse funktioniert es.
Muss ich fürs debuggen vll. was am Programm ändern? Z.B. im startup-File 
ändern?

vvl. noch hilfreich: ich erhalte die Meldung
Warning: arm7_9_common.c:1950 arm7_9_read_memory(): memory read caused data abort (address: 0xffffffff, size: 0x1, count: 0x1)
wenn er mit dem Speicher interagiert.

Hoffe sehr auf euch, da mir kein Fehler auffällt.

LG Steffen

Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht denn dein Linker Skript aus?
Wie sieht der Startupcode aus?

Eventuell läuft der Resetvektor im Kreis?

Autor: Steffen H. (mcst)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
mhm, muss zugeben das ich mich damit nich so richtig auskenne. Hab 
einfach ein mit einem Beispeil Programm für meinen µC augefangen und 
bissel erweitert.

Ich häng das Linker-Skript und mein Startup-File mal an.

Autor: Steffen H. (mcst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch eine Frage:
ist es grundsätzlich überhaupt möglich mein Programm über JTAG im Flash 
zu debuggen oder muss ich das im RAM machen?
Habe das Gefühl, das die Registerinhalte einfach nicht aktualisiert 
werden.

ggf. würde ich es auch anders als mit dem Zylin Plugin versuchen.

Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar kann im im Flash debuggen. Allerdings sind dann max. 2 Breakpoints 
möglich.

Ansonsten konnte ich nichts erkennen. Wäre es nicht sinnvoll, den "PC" 
auf Adresse 0x0 zu setzen, bevor das Programm mit "continue" weiter 
ausgeführt wird?

Im Moment machst du folgendes:
Reset -> Programm wird an Adresse 0x0 ausgeführt
Halt -> Das laufende Programm wird irgend wo angehalten
Flash -> Neues Programm wird in den Flash geladen
Continue -> Das neue Programm wird an der Stelle ausgeführt, an der 
vorher das alte Programm beendet wurde.

Füge mal vor dem break:
monitor reg pc 0x0
ein.

Autor: Steffen H. (mcst)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hey erstmal großen dank für die hilfe!!!!

so hab monitor reg pc 0x0 mit reingenommen, denk mal so ist es logisch 
sinnvoller

mein problem hat sich aber nicht verändert, OpenOCD giebt bei jedem step 
denn ich mache die folgendes aus:
Warning: arm7_9_common.c:1950 arm7_9_read_memory(): memory read caused data abort (address: 0xffffffff, size: 0x1, count: 0x1)

kann es an der konfiguration von OpenOCD scheitern?
Hab sie auch mal angehangen. als argumente ünergen ich OCD nur:
-f armusbocd_tiny.cfg

find keinen Grund warum sonst mein entwicklungsboard nicht beim debuggen 
reagiert

Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ganze ist nur eine Warning.

Das Problem ist, dass irgend wo in deinem Code steht, dass auf die 
höchst mögliche Adresse zugreifen will. Da dort nichts existiert, 
beschwert sich der MCU und geht in den DAbt Mode. Da wirst du dich 
schrittweise durchkämpfen müssen.

Autor: Steffen H. (mcst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, hab jetzt geschaut ob ich im code was finde wo er auf die höchste 
adresse zugreifen will...hab bis jetzt nix gefunden. hast du einen 
vorschlag wo ich explitit suchen sollte?

hab grad noch festgestellt, das die erste warnung für eine niedrine 
adresse ausgegeben wird und dann nur noch hohe folgen:
Warning: arm7_9_common.c:2120 arm7_9_write_memory(): memory write caused data abort (address: 0x00000000, size: 0x4, count: 0x60)
Warning: arm7_9_common.c:1950 arm7_9_read_memory(): memory read caused data abort (address: 0xffffffff, size: 0x1, count: 0x1)

denk das problem liegt beim OpenOCD, oder?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.