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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.