- 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?
@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.
__memx ist aber ein 24-Bit Zeiger. printf_P funktioniert damit ebensowenig wie printf! Wenn du __memx verwenden willst dann brauchst du dafür eigene Funktionen.
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... Wenn du meinst der Artikel gewinne dadurch dann mach eben.
@ 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.