XBYTE Makro?

#3368691
Lesenswert?

Hallo zusammen

kleine Frage,
bei Keil gibt es das XBYTE, das dem Compiler sagt, dass ein
externer Speicherzugriff erfolgt.

Kann man für den AVR dazu ein Makro schreiben? Dann muß ich den 
Quellcode
nicht ändern.



Beispiel


Keil: Lesezugriff,schreibzugriff

myuint8_tvar = XBYTE[ 0x8001];
XBYTE[ 0x8001] = myuint8_tvar;


wie kann ich das im GCC implementieren?

sag schonmal Danke für jede Hilfe
#3368799
Lesenswert?

Christian O. schrieb:
> Ok, dann muss ich das in 2 Funktionen
> read und write auslagern

Wieso das denn jetzt? Ich habe nicht gesagt, dass es grundsätzlich nicht 
per Makro geht. Es geht nur nicht, wenn der Code komplett unverändert 
bleiben soll (mit dem Array würde das aber gehen). Wenn du den Code eh 
ändern willst, dann mache einfach aus den eckigen Klammern runde, und 
schon geht es per simplen Makro.
#3370033
Lesenswert?

Christian O. schrieb:
> bei Keil gibt es das XBYTE, das dem Compiler sagt, dass ein
> externer Speicherzugriff erfolgt.
>
> Kann man für den AVR dazu ein Makro schreiben?

Wozu?
Beim AVR gibt es keine unterschiedlichen Zugriffe dafür.

Willst Du MMIO ansprechen, mach ne Struct und setze sie auf die Adresse 
des Interfaces.

Christian O. schrieb:
> Dann muß ich den
> Quellcode
> nicht ändern.

einfach durch nichts ersetzen:
1
#define XBYTE
#3370343
Lesenswert?

Johann L. schrieb:
> Kaum, denn XRAM fängt kaum an physikalischer Adresse 0 an.

Das hat ja auch niemand verlangt.

Das Beispiel des TO compiliert jedenfalls so wie gewünscht:
1
int main()
2
{
3
  uint8_t myuint8_tvar;
4

5
  myuint8_tvar = XBYTE[ 0x8001];
6
  22:   80 91 01 80     lds     r24, 0x8001
7
  XBYTE[ 0x8001] = myuint8_tvar;
8
  26:   80 93 01 80     sts     0x8001, r24
9
  2a:   ff cf           rjmp    .-2             ; 0x2a <main+0x8>

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren