Forum: Mikrocontroller und Digitale Elektronik Eclipse Debugging Möglichkeiten (STM32)


von Klaus (Gast)


Lesenswert?

Hallo zusammen,

ich habe eine neue Funktion in ein bestehendes System implementiert.
Es geht um ein Array[4][255] in das 5 Teilnehmer mit jeweils 256 
Fehlercodes hineinschreiben.

Nun ist es nachweislich so dass in diesem Array ein bestimmter Eintrag 
von 0 auf 1 gesetzt wird. Richtig!
Greife ich später allerdings wieder auf genau diesen Eintrag zu, ist er 
zurückgesetzt. Minütliche Abfrage der Fehler.

Ich bin den Code (die Rücksetzfunktionen) usw. schon komplett 
durchgegangen um herauszufinden wo dieser Eintrag zurückgesetzt wird, 
nichts gefunden.

Nun würde ich mir gerne im Ram die Speicherzelle beim Schreiben des 
Eintrags ansehen um später zu überwachen wann die Zelle wieder auf 0 
gesetzt wird.

Wie könnte ich hier vorgehen um herauszufinden und durch wen die Zelle 
fälschlicherweise zurückgesetzt wird? Wie kann ich mir den RAM anzeigen 
lassen?

Viele Grüße

von Klaus Skibowski (Gast)


Lesenswert?

Hallo Klaus,
das Array sollte bei 5 Teilnehmern und 256 Fehlercodesdann mit 
"Array[5][256]" definiert werden...

Gruß, ebenfalls Klaus

von chris (Gast)


Lesenswert?

Kann es sein, daß die Variable oder die Indexe falsch declariert sind ?

von Klaus (Gast)


Lesenswert?

So, mein Bug habe ich gefunden ... leider immer erst nachdem ich einen 
Thread erstelle... trotzdem würde mich interessieren wie ich im Eclipse 
die Speicherzellen des Rams ansehe, bzw. ob die Möglichkeit besteht beim 
schreiben einer bestimmten Speicherzelle quasi einen Breakpoint zu 
setzen.

Die Definition der Variable ist schon richtig, 5 Teilnehmer (0-4) mit 
256 (0-255) codes. War nur falsch ausgedrückt.

von reqd field (Gast)


Lesenswert?

>Möglichkeit besteht beim
>schreiben einer bestimmten Speicherzelle quasi einen Breakpoint zu

--> Watchpoint. Lies' das Manual Deines Debuggers.

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank für das Stichwort ;)

Allerdings bleibt mir noch ein Problem dass ich trotz div. Anleitungen 
im Netz nicht lösen kann:

Was funktioniert:
Ich kann an einer Speicheradresse direkt einen Watchpoint setzen.

Was nicht funktioniert:
Es ist nicht möglich anhand einer Variable den Watchpoint zu setzen, das 
ist immer ausgegraut. Außerdem sehe ich zumindest schon Inhalte in den 
Speicherzellen. Leider aber kann ich keine Veränderung der Inhalte 
feststellen, immer wenn also der µC läuft (debug, run) und ich später 
das debuggen pausiere zeigt es den exakten Inhalt der Speicherzellen an. 
Was ist hier noch zu beachten?

Dadurch dass bei einer Variable es nicht funktioniert den Watchpoint zu 
setzen fehlt mir zusätzlich natürlich die Verbindung zwischen Variable 
und Speicherzelle, weiß also nicht in welcher Zelle ich den Watchpoint 
setzen muss.
... zusätzlich kommt natürlich dazu dass sich die Memoryeinträge, warum 
auch immer, nicht verändern.

Könnte mir hierbei jemand helfen?

von Mike (Gast)


Lesenswert?

>>Es geht um ein Array[4][255] in das 5 Teilnehmer mit jeweils 256
>>Fehlercodes hineinschreiben.
>Die Definition der Variable ist schon richtig, 5 Teilnehmer (0-4) mit
>256 (0-255) codes. War nur falsch ausgedrückt.

Ich fürchte NEIN! Mit Array[4][255] deklarierst Du ein 
Array[0..3][0..254]

von Klaus (Gast)


Lesenswert?

Och Leute... bitte... was soll das.

Es geht hier nicht um eine Variablendeklaration, die Deklaration ist 
richtig!

Ich habe in meinem erst Post nie geschrieben dass
"Array[4][255]" eine Deklaration ist, es kann doch genauso der Zugriff 
darauf sein.

Außerdem habe ich doch schon gesagt dass ich mich diesbezüglich falsch 
ausgedrückt habe. Außerdem habe ich doch gesagt dass ich meinen Bug 
gefunden habe ...

Es geht aktuell, deswegen macht es nicht unbedingt Sinn seine Antwort 
aus nicht mehr (!) relevanten Aussagen aufzubauen, um das Debuggen einer 
Variable per Watchpoint :)

von Udo S. (urschmitt)


Lesenswert?

Klaus schrieb:
> Ich habe in meinem erst Post nie geschrieben dass
> "Array[4][255]" eine Deklaration ist,

das IST eine Deklaration.

Klaus schrieb:
> Es geht aktuell, deswegen macht es nicht unbedingt Sinn seine Antwort
> aus nicht mehr (!) relevanten Aussagen aufzubauen

Wenn hier nur exakt die Fragen beantwortet würden die der TO stellt, 
würden maximal 1/3 der Fälle gelöst, die so gelöst werden.
Wenn du hier fragst dann musst du damit rechnen, daß die Helfenden dir 
auch alle anderen Fehler um die Ohren hauen und das ist auch gut so.

Und das:
Klaus schrieb:
> Es geht um ein Array[4][255]

Beschreibt eindeutig ein Array in den Bereichen [0..3][0..254]
Nimm es einfach zum Anlass dich das nächste Mal präziser auszudrücken 
und beschwer dich nicht :-)

von Klaus (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Wenn hier nur exakt die Fragen beantwortet würden die der TO stellt,
> würden maximal 1/3 der Fälle gelöst, die so gelöst werden.
> Wenn du hier fragst dann musst du damit rechnen, daß die Helfenden dir
> auch alle anderen Fehler um die Ohren hauen und das ist auch gut so.

Na gut ... das ist richtig!

Der erste Hinweis auf die Variable ist ja völlig ok.

Aber wenn ich doch schon schreibe:
"habe den bug gefunden" und bestätige dass ich mich falsch ausgedrückt 
habe und die Variable passt .... warum muss ich dann noch mal auf der 
Ausdrucksweise herumhacken.

Ich habe meine Angabe [4][255] schlicht als letzten Eintrag des Arrays 
gesehen...

Vielleicht könnten wir unsere Fragen jetzt auf das Problem das 
Watchpoints konzentrieren ... mit "debug möglichkeiten" habe ich genau 
danach im Thread ja gefragt :)

Danke trotzdem für reges Interesse!

von Mike (Gast)


Lesenswert?

@Klaus (Gast)
>Och Leute... bitte... was soll das.
Du wärst nicht der Erste, der den Fehler an der falschen Stelle sucht.
Nimm Dich lieber selber an Der Nase, wenn Du nicht mal in der Lage bist 
Deine Problemfall korrekt zu formulieren!

von Klaus (Gast)


Lesenswert?

Klaus schrieb:
> So, mein Bug habe ich gefunden ... leider immer erst nachdem ich einen
> Thread erstelle... trotzdem würde mich interessieren wie ich im Eclipse
> die Speicherzellen des Rams ansehe, bzw. ob die Möglichkeit besteht beim
> schreiben einer bestimmten Speicherzelle quasi einen Breakpoint zu
> setzen.

noch klarer?!

Darauf kam doch schon die richtige Antwort:
--> Watchpoint

Darauf meine Frage/Probleme ZUM Watchpoint.



Warum kommt man also wieder auf den Array-kram zurück?!

So, der Thread führt leider zu nichts mehr, vielleicht hat ja doch noch 
jemand Vorschläge zu (echten) Problemen.

Schönen Tag noch zusammen :)

von Klaus (Gast)


Lesenswert?

So, also falls jemand ähnliche Probleme hat hier mal ein Update:

Wenn ich eine Variable markiere und unter "Run" versuche einen 
Watchpoint zu setzen ist dieser Button nach wie vor ausgegraut.
Allerdings wenn ich im Memory Fenster rechts klicke ist es möglich auf 
eine markierte Speicherzelle einen Watchpoint zu setzen.
Füge ich dann im Dialog unter "Expression to watch" anstatt der 
Speicheradresse den Variablennamen ein, funktioniert der Mechanismus 
immer dass je nach Aktion (Schreiben/Lesen) an den Punkt gesprungen wird 
wo das auftritt. (auch nur bei manchen Variablen obwohl alle global sind 
mit denen ich das getestet hab)

Leider werden im Memory Fenster die Einträge immer noch nicht 
aktualisiert, sprich, es werden zu Anfang Daten geladen aber nicht mehr 
"aktualisiert"

Ein genaues Betrachten wann eine spezielle Speicherzelle verwendet wird 
ist also immer noch nicht möglich

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.