Pages: [1]   Go Down
Author Topic: SRAM direkt auslesen  (Read 489 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 7
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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-

Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20168
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wieso brauchst Du sowas?
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 7
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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. smiley-grin
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20168
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 7
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

....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
Logged

Germany
Offline Offline
Edison Member
*
Karma: 100
Posts: 1217
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
*(unsigned char *)123

Grüße,
Oliver
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2719
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

... und umgekehrt kriegt man die Adresse jeder Variablen im RAM auch raus:

Code:
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.
« Last Edit: January 09, 2013, 03:53:36 pm by michael_x » Logged

Offline Offline
Newbie
*
Karma: 7
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

damit werde ich was anfangen können. vielen Dank smiley
Logged

Pages: [1]   Go Up
Jump to: