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
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.
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?
>>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]
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 :)
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 :-)
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!
@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!
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 :)
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