Forum: Mikrocontroller und Digitale Elektronik Arduino PROGMEM Array Problem


von Lothar (Gast)


Lesenswert?

Habe hier ein grosses Array für CRC und hätte gerne RAM gespart.

So funktioniert CRC korrekt: "const unsigned char"

Aber damit kommt ein falsches CRC raus: "const PROGMEM unsigned char"

Am Array Inhalt sollte sich doch durch PROGMEM nichts ändern??

Bin aber kein AVR Experte.

Habe es parallel noch mit 8051 getestet. Hier gibt es erwartungsgemäss 
keinen Unterschied zwischen Array mit "const unsigned char" oder "code 
const unsigned char"

von Einer K. (Gast)


Lesenswert?

Ich glaube dir nicht.
Oder du machst was falsch!

von Loddahr (Gast)


Lesenswert?

Lothar schrieb:
> Aber damit kommt ein falsches CRC raus: "const PROGMEM unsigned char"

Aber nicht wenn du die Daten aus dem Array mit

pgm_read_byte (..)

herausliest. Einfache Zugriffe aus dem Array schlagen fehl.

von Lothar (Gast)


Lesenswert?

Das pgm_read_byte muss man auch bei Arduino nutzen? Der Arduino Compiler 
erkennt nicht den Unterschied zwischen RAM und ROM Zugriff und erzeugt 
die unterschiedlichen Assembler Befehle dafür? Der 8051 Compiler kann 
das schliesslich auch.

Gibt es dann irgendeine Möglichkeit den Zugriff so zu machen dass man 
ohne überall pgm_read_byte rein oder raus zu machen von RAM nach ROM und 
zurück wechseln kann z.B. durch Überladen?

von Harry L. (mysth)


Lesenswert?

Lothar schrieb:
> Gibt es dann irgendeine Möglichkeit den Zugriff so zu machen dass man
> ohne überall pgm_read_byte rein oder raus zu machen von RAM nach ROM und
> zurück wechseln kann z.B. durch Überladen?

Nein!

Dr AVR hat eine Harvard Architektur
https://de.wikipedia.org/wiki/Harvard-Architektur

: Bearbeitet durch User
von Nico W. (nico_w)


Lesenswert?

Der AVR GCC hat da ein Schlüsselwort __flash. Hier im Wiki findest du 
auch was dazu. Gibt es aber nur für C. Nicht C++ (Arduino IDE).

: Bearbeitet durch User
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.