AVR-GCC: Generische Zeiger?

Gast #4475131
Lesenswert?

- Im AVR-GCC C gibt es keine Zeiger, die wahlweise ins RAM oder ins 
ROM(Flash) zeigen.

- Wenn man Zeiger ins RAM und Zeiger ins ROM hat, dann müssen 
entsprechende Funktionen (z. B. Ausgabe) doppelt geschrieben werden.

Liege ich mit den beiden Aussagen richtig?

Wie kann ich vorgehen? Zu allen Zeigern eine Struktur kreieren, in der 
notiert wird, ob es sich um einen RAM- oder ROM-Zeiger handelt?
#4475146
Lesenswert?

@Kabeljau (Gast)

>- Im AVR-GCC C gibt es keine Zeiger, die wahlweise ins RAM oder ins
>ROM(Flash) zeigen.

Falsch, die gibt es schon eine ganze Weile.

https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Jenseits_von_flash

_memx ist das Zauberwort

>- Wenn man Zeiger ins RAM und Zeiger ins ROM hat, dann müssen
>entsprechende Funktionen (z. B. Ausgabe) doppelt geschrieben werden.

Ja, das war bisher bei den meisten Funktionen so, die Flash-ROM 
VErsionen haben die Endung _P

>Wie kann ich vorgehen? Zu allen Zeigern eine Struktur kreieren, in der
>notiert wird, ob es sich um einen RAM- oder ROM-Zeiger handelt?

Siehe oben.
#4475812
Lesenswert?

@ Johann L. (gjlayde) Benutzerseite


>Wenn jemand nicht rafft, dass ein 16-Bit Zeiger etwas anderes ist als
>ein 24-Bit Zeiger dann hilft es wohl auch nix, das extra zu erwähnen...

Naja, die Formulierung

"Ausserdem ist zu beachten, dass __memx-Zeiger zwar 24-Bit Zeiger sind, 
die zugrundeliegende Adress-Arithmetik jedoch gemäß dem C-Standard 
erfolgt, also als 16-Bit Arithmetik."

könnte zu einem Irrtum verleiten.

>Wenn du meinst der Artikel gewinne dadurch dann mach eben.

Ich war mal so frei.
Persönliche Seite #4475881
Lesenswert?

Falk B. schrieb:
> "Ausserdem ist zu beachten, dass __memx-Zeiger zwar 24-Bit Zeiger sind,
> die zugrundeliegende Adress-Arithmetik jedoch gemäß dem C-Standard
> erfolgt, also als 16-Bit Arithmetik."
>
> könnte zu einem Irrtum verleiten.

Das bezieht sich aber auf etwas ganz anderes, nämlich dass es nicht 
möglich ist, Objekte > size_t zu haben.  Selbst wenn du solche Dinge, 
die > 32 KiB sind, etwa per Assembler anlegt, wird man auch mit __memx 
nicht gescheit darauf zugreifen können.

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