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.
Code:
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:
Code:
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
Lesezeichen