Forum: Mikrocontroller und Digitale Elektronik Xmega AVR AddressOperator nur für 16 Bit?


von Jasson (Gast)


Lesenswert?

Hallo zusammen,

kann es sein, dass das Kaufmanns UND zur Ermittlung von Adressen nur 16 
Bit Werte liefern kann? Gibt es eine Möglichkeit, dass zu erweitern? Ich 
habe da gaaanz wage etwas mit HIGH und LOW in Erinnerung, was sich nicht 
auf die letzten 6 Register X,Y,Z bezog. Mir fallen keine passenden 
Keywörter zum suchen ein...

viele Grüße!

von Georg G. (df2au)


Lesenswert?

Wenn du mehr als die 16Bit Genauigkeit möchtest, dann musst du das 
deinem Compiler sagen. Er rechnet sonst als Standard immer mit Integer. 
Das steht so in jeden Handbuch über C.

von Falk B. (falk)


Lesenswert?

@ Jasson (Gast)

>kann es sein, dass das Kaufmanns UND zur Ermittlung von Adressen nur 16
>Bit Werte liefern kann?

Beim avv-gcc ist das so.

> Gibt es eine Möglichkeit, dass zu erweitern?

Ja.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

Abschnitt "Variablenzugriff >64kB"

von Jasson (Gast)


Lesenswert?

aus der pgmspace.h guckst du (also ich) hier:

#define pgm_get_far_address(var)                          \
({                                                    \
  uint_farptr_t tmp;                                \
                                                      \
  _asm_ __volatile__(                             \
                                                      \
      "ldi  %A0, lo8(%1)"           "\n\t"    \
      "ldi  %B0, hi8(%1)"           "\n\t"    \
      "ldi  %C0, hh8(%1)"           "\n\t"    \
      "clr  %D0"                    "\n\t"    \
    :                                             \
      "=d" (tmp)                                \
    :                                             \
      "p"  (&(var))                             \
  );                                                \
  tmp;                                              \
})

Da gabs schon sowas. Nur wenn ich es verwende, kann ich über den 
Debugger sehen, dass der Flash leer ist.

von Jasson (Gast)


Lesenswert?

Das die Operation
#define pgm_get_far_address(var)
nicht funktioniert hat, hatte was mit dem Optimierungsgrad zu tun. Den 
hatte ich mal auf -O3 umgestellt, weil ich auf -Os im Debugger bei 
Funktionszeigerübergaben beobachten konnte.

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.