Go Down

Topic: SRAM direkt auslesen (Read 717 times) previous topic - next topic

SBond

Hi Leute,

Ich suche nach einer Möglichkeit den RAM des verbauten ATmegas direkt auszulesen. So dass ich z.B. über eine Adresse den Wert auslesen kann. (etwa wie beim EEPROM).
Wenn es auch noch eine Möglichkeit gibt, die Werte direkt zu verändern, dann wäre es sogar noch besser.


hat man da Möglichkeiten?


lg
-SBond-


uwefed

Wieso brauchst Du sowas?
Grüße Uwe

SBond

Wie du ja schon gesehen hast, programmiere ich an einem Programm zur Überwachung und Steuerung des Arduinos. Es wäre ein cooles extra für den Debug-Bereich. So könnte man z.B. "live" beobachten, ob sich bestimmte Bereiche oder Variablen im RAM ändern. Den EEPROM kann ich z.B. leicht auslesen, beschreiben und auf Fehler überprüfen. :D

uwefed

Und woher weißt Du wo welche Variable im RAM abgespeichert ist?
Grüße Uwe

SBond

....das weiß man vorher nicht genau. Es gibt aber die Möglichkeit bestimmte Variablen oder Werte herauszufiltern, um diese anschließend bei bestimmten Ereignissen zu beobachten. Bei einem analogen Eingang wäre es z.B. relativ einfach. Besonders dann, wenn danch jedem Start des Arduinos die gleichen Variablen an der gleichen Adresse gespeichert werden. Dies ist die gleiche Methode, die man auch gut mit einem Hex-Editor bewerkstelligen kann um unbekannte Variablen herauszufinden. Programme wie z.B. CheatEngine sind genau daraus ausgelegt, um Werte von Programmen oder Spielen direkt im RAM zu manipulieren. Die gesuchte Variable wird dort auch von vielen Millionen Werten in wenigen Sekunden "herausgefiltert".

Variablen an sich kann ich auch so schon überwachen und am PC anzeigen. Aber so hätte man die Möglichkeit alles in einem Blick zu beobachten. Ich denke für die Fehlererkennung wäre es schon ein Vorteil. Natürlich ist es mehr etwas für die erfahrenen Benutzer.


lg
SBond

olikraus

Um mal auf die ursprüngliche Frage zurückzukommen.

Wenn man vermutet, dass an Speicherstelle 123 ein byte gespeichert ist, dann bekommt man den Wert mit
Code: [Select]

*(unsigned char *)123


Grüße,
Oliver

michael_x

#6
Jan 09, 2013, 11:59 am Last Edit: Jan 09, 2013, 09:53 pm by michael_x Reason: 1
... und umgekehrt kriegt man die Adresse jeder Variablen im RAM auch raus:

Code: [Select]

float myfloat[10];
byte xyz=123;
char array[100];

void setup() {
 serial.begin(9600);
 unsigned int xAddr = (int) &xyz;
 Serial.print("xyz liegt auf Adresse 0x");
 Serial.println (xAddr,HEX);
}

[Edit: vorzeichenlose Variable auch immer so deklarieren, auch wenn unsigned ein langes, schwer zu schreibendes Wort ist ]  


Diese Adresse ändert sich übrigens nicht bei Start, sondern frühestens nach Neukompilieren und Hochladen.

SBond

damit werde ich was anfangen können. vielen Dank :)

Go Up