PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variableninhalt (unter Verwendung eines Zeigers) ausgeben



HF SHOOTER
28.12.2010, 13:06
Hallo,

ich hab da wiedermal ein kleines Problem.

Problemstellung:
Ich möchte mir den Inhalt einer Variable als Debuginfo ausgeben. Dabei möchte ich zur Laufzeit selbst bestimmen welche Variableninhalt ich sehen möchte.
Ich habe mir nun gedacht, dass ich die Speicheradresse der Variable (im RAM) über die RS232 eingebe. Die Adresse bekomme ich aus dem Mapfile.

Ich lese dazu 4 Stellen (Hexadezimal) über die RS232 in einen ATmega88 ein und Konvertiere diesen String dann in Zahl, die ich einem Zeiger zuweise.


uint16_t addr;
uint8_t value;

str_temp[0] = rs232_buffer[1];
str_temp[1] = rs232_buffer[2];
str_temp[2] = rs232_buffer[3];
str_temp[3] = rs232_buffer[4];

addr = strtoul(str_temp, NULL, 16);

// Ausgabe der eingelesenen Adresse (zur Kontrolle)
uart_puts("\n\rADDR: 0x");
uart_debug_8bit( (uint8_t)(addr>>8) ,16);
uart_debug_8bit( (uint8_t)addr ,16);

// Ausgabe des Speicherinhaltes an dieser Adresse
// DAS FOLGENDE FUNKTIONIERT NICHT!
uart_puts("\tVALUE: 0x");
value = *addr;
uart_debug_8bit( (uint8_t)value ,10);

In der vorletzten Zeile value = *addr; kommt die Fehlermeldung "error: invalid type argument of 'unary *' (have 'uint16_t')" mit der ich nichts anfangen kann.
Es tut auch nichts zur Sache wenn ich die ganze Zeile ändere auf value = (uint8_t)*addr;

Zur Info:

void uart_debug_8bit (uint8_t nr, uint8_t base)
{
char Buffer[10];
itoa(nr, Buffer, base);
uart_puts(Buffer);
}

Ich bedanke mich!

mfg
Benny

TobiKa
28.12.2010, 13:12
Wenn du an die Adresse einer Variable willst, schreib mal ein & statt einem * davor.

HF SHOOTER
28.12.2010, 13:19
Ich möchte mir den Wert einer Speicherzelle, die sich im RAM befindet und deren Adresse ich vorher per RS232 festgelgt habe ausgeben.

mfg
Benny

sast
28.12.2010, 13:29
uint16_t* addr;

sast

HF SHOOTER
30.12.2010, 15:58
Merci!

mfg
Benny