Forum: Compiler & IDEs Adresse statt variablen Namen übergeben?


von tobiTob (Gast)


Lesenswert?

Hallo!

Ich suche ein Möglichkeit wo ich direkt eine Adresse übergeben kann, ich 
habe eine Zeichenkette die immer an Adresse 0x002000 begint.

Nun habe ich mir eine Funtion geschrieben die mir die Zeichen aus dem 
Programmemory list...
1
void send_pgmstr_uart(const char *text)
2
{
3
  char chrin;
4
5
    while ((chrin=pgm_read_byte(text))) {
6
    if (chrin == 0xFF) {break;}
7
    send_char_uart(chrin);
8
    text++;
9
    }
10
}

Nun möchte ich direkt die Adresse übergeben,

void send_pgmstr_uart(0x002000);

Liefert nicht das erwartete Ergebniss. Geht das überhaupt?

Gruß Tobi...

von Andreas K. (a-k)


Lesenswert?

Liegt die Zeichenkette an der Wortadresse 0x2000 (Atmel-Notation) oder 
an der Byteadresse 0x2000 (GNU tools Notation)?

Ausserdem gibt das hoffentlich gleich 2 Fehlermeldungen vom Compiler. 
Die eine für das unsinnige Statement
  void send_pgmstr_uart(...);
die andere für den falschen Parametertyp. Wenn schon dann bitte
  send_pgmstr_uart((char *)0x002000)

von Ralf (Gast)


Lesenswert?

Hm... Bin mir nicht sicher, aber müsste es nicht

while ((chrin=pgm_read_byte(*text)))

heissen? Also *text?

Ralf

von Thomas B. (yahp) Benutzerseite


Lesenswert?

Thou shalt not...

Warum willst du das tun? Arbeite mit symbolischen Namen und gut ist. 
"Ich weiß besser wo es steht, als der Compiler" ist der sichere Weg ins 
Verderben.

von Andreas K. (a-k)


Lesenswert?

Ralf wrote:

> Hm... Bin mir nicht sicher, aber müsste es nicht
> while ((chrin=pgm_read_byte(*text)))
> heissen? Also *text?

Nein.

von tobiTob (Gast)


Lesenswert?

Hallo,

ok hab ja übersehen das der Program memory 16bit breit ist...

send_pgmstr_uart(0x002000*2);

dann klappt's auch mit dem AVR Nachbarn. ;-)

Danke und Gruß, Tobi...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.