Forum: Mikrocontroller und Digitale Elektronik Variablen deklaration für den ROM Bereich ?


von Harry (Gast)


Lesenswert?

Hallo!
Könnte mir jemand dabei behilflich sein wie man Variablen so deklariert 
das sie im ROM abgelegt werden und nicht im RAM!
Ich benutze Fujitsu Controller schaue mir aber auch gerne die 
Vorgehensweise bei anderen Controllern an!
Beste Grüße Harry

von tastendrücker (Gast)


Lesenswert?

Variable und ROM schliesst sich doch gegenseitig aus, oder?

von tastendrücker (Gast)


Lesenswert?

Wenn Du mit ROM den Programmspeicher meinst (meist EEPROM), dann sollte 
die das Handbuch zum Assembler/Compiler sagen, wie dort Daten (z. B. 
Parameter) abgelegt werden könne.

Beim PIC kann man in Assembler z. B. mit "db" oder "dt" Daten im 
Programmspeicher ablegen.

von Falk (Gast)


Lesenswert?

@tastendrücker

>Wenn Du mit ROM den Programmspeicher meinst (meist EEPROM), dann sollte

Heutzutage meist FLASH, kein EEPROM. Kleiner, aber wichtiger 
Unterschied.

MFg
Falk

von tastendrücker (Gast)


Lesenswert?

Und nocheinmal: Ein FLASH ist auch ein EEPROM.

von Falk (Gast)


Lesenswert?

@tastendrücker

>Und nocheinmal: Ein FLASH ist auch ein EEPROM.

Aber nur fast! ;-)
Ausserdem spricht man nciht ganz umsonst bei sämtlichen Controllern von 
FLASH (Programmspeicher) und EEPROM (Datenspeicher).

MFG
Falk

von tastendrücker (Gast)


Lesenswert?

Nicht nur "fast"

EEPROM => Electrically Erasable Programmable Read Only Memory
          hierunter fallen auch Flash-Speicher

oder http://de.wikipedia.org/wiki/Flash_Speicher
     (jaja, ich weiss: Wikipedia ist nicht alles ;-)


Hilft Harry aber alles nicht wirklich...

von Falk (Gast)


Lesenswert?

@tastendrücker

>Nicht nur "fast"

Doch, nur fast.

>oder http://de.wikipedia.org/wiki/Flash_Speicher
>     (jaja, ich weiss: Wikipedia ist nicht alles ;-)

Richtig, aber DEIN Link liefert in der ersten Zeile den "kleinen 
Unterschied" ;-)

"Flash-Speicher sind digitale Speicherchips; die genaue Bezeichnung 
lautet Flash-EEPROM. Im Gegensatz zu „gewöhnlichem“ EEPROM-Speicher 
lassen sich beim Flash-EEPROM Bytes, die kleinsten adressierbaren 
Speichereinheiten, nicht einzeln löschen."

>Hilft Harry aber alles nicht wirklich...

Da müsst Har_fahr schon mal den Wagen vor_ry mal sagen was er benutzt.

- welcher Controller?
- welche Programmiersprache?
- welcher Compiler/Entwicklungsumgebung?

MfG
Falk


von Carsten S. (carsten)


Lesenswert?

Eine Variable im Flash abzulegen macht seltenst Sinn (wegen 
umständlicher Schreibroutinen).
Konstanten wiederum machen Sinn, da man diese ja nur liest.

Wenn du C nutzt, kann es sein, dass ein einfaches "const" vor der 
Variablendeklaration schon reicht (je nach Compiler).
z.B. const int Tabelle[5]=...

Bei den meisten Compiler gibt es aber noch Schlüsselwörter wie "code" 
etc.
z.B. code int Tabell[5]=...

oder irgendwelche Anpassungen des Linkers.

von Meister E. (edson)


Lesenswert?

tastendrücker wrote:

> Hilft Harry aber alles nicht wirklich...

Ist so richtig. Helfen könnte, wenn man die Bedingungen berücksichtigt. 
Wenn ein Wert über eine EEPROM-Zelle gemanagt werden soll, braucht man 
immer mindestens eine Variable, die den Wert übergibt. Auch wenn man 
'variable' Zustände mittels Tabelle ins oder aus dem ROM bringt, steht 
eine Variable im RAM, die den Zeiger stellt. Ausserdem bleibt der Inhalt 
bis er überschrieben wird faktisch konstant.

@Harry
> Könnte mir jemand dabei behilflich sein wie man Variablen so deklariert
> das sie im ROM abgelegt werden und nicht im RAM!

Möglicherweise versteh ich den Sinn nicht, kannst Du genauer 
beschreiben, was Du vorhast?

Gruss,
Edson

von tastendrücker (Gast)


Lesenswert?

@Falk
Flash-EEPROM ist kein EEPROM???

Dann sind Propeller-Flugzeuge auch keine Flugzeuge?

von tastendrücker (Gast)


Lesenswert?

... ich glaube, wir kennen den Unterschied zwischen "gewöhnlichem" 
EEPROM und Flash-EEPROM und sollten uns daher auf Lösung die 
eigentlichen Probleme dieser Welt konzentrieren ;-)

von Bastian (Gast)


Lesenswert?

also ich denke du meinst Konstanten.

Welchen Compiler verwendest Du?
SOFTUNE C COMPILER ? mit Softune Workbench?

8/16/31 Bit?   Also V3/V6 ?

Fujitsu stellt ein gutes Manual für ihre C-Compiler zur Verfügung, da 
steht (fast) alles drin.

Ich kann mich dunkel erinnern, dass ich mal const static "variablen" 
explizit ins RAM legen musste. Dafür waren dann die Parameter -ramconst 
-xramconst
oder so zuständig. Aber dann musste die statup angepasst werden...
grübel *grübel* die letzten Jahre sind wie ausgelöscht ..... :-)

Wenn Du nicht weiter kommst meld dich noch mal mit den o.g. Infos, dann 
versuche ich mich etwas genauer zu erinnern :-)

von holger (Gast)


Lesenswert?

@ tastendrücker
>Flash-EEPROM ist kein EEPROM???
>Dann sind Propeller-Flugzeuge auch keine Flugzeuge?

Wie schön das es immer noch einen anderen Besserwisser
gibt, und der bin jetzt ich ;)

Ich empfehle einfach mal Datenblätter zu lesen.
Bei PIC und AVR wird peinlichst vermieden den
Begriff Flash-EEPROM zu verwenden. Bei Flash ist es
meist Flash Memory oder Flash Program Memory.
Flash ist HEUTE für den Programmcode und konstante Daten vorgesehen.
EEPROM zum speichern/ändern von Daten während der Programmlaufzeit.
Obwohl, der alte PIC16C84 war tatsächlich ein uC der
seinen Code aus dem EEPROM ausführt. Der 16F84 führt
seinen Code aus dem Flash aus. Alte 8051 Schaltungen liefen
auch mit externen EEPROMs als Programmspeicher.

Wenn man dann von den uC weggeht und sich den
reinen Speicherbausteinen zuwendet sieht man
die Unterschiede. M28C64 ist ein EEPROM. Das steht
auch so im Datenblatt. M28F001 ist ein Flash. Im Datenblatt
ist nirgendwo der Begriff EEPROM zu lesen (es sei denn
beim EEPROM kompatiblen Pinout). Dort steht immer Flash Memory.
In den hunderten Datenblättern zu Flash die ich gelesen
habe wird das bei allen Herstellern so durchgezogen.

EEPROM's sind immer byte/wordweise programmierbar. Bei Flash
kann man zwar teilweise einzelne bytes/words programmieren,
aber man muss dann eine Page, einen Sektor oder sogar den ganzen
Chip vorher löschen. Bei EEPROMS braucht man das nicht zu tun.
Flash und EEPROM unterscheiden sich also darin wie die zu
beschreibenden Datenbereiche vorher gelöscht werden.

In der Wikipedia wurde der Begriff leichtfertig verwendet.
EEPROM trifft rein von der Übersetzung auf beides zu.
Da stimme ich dir zu. Es sind aber zwei unterschiedliche
Technologien.

Wenn man es genau nimmt stimmt schon der Begriff EEPROM nicht
mehr. ROM ist ein nur lesbarer Speicher. Ein EEPROM und einen
Flash kann man aber in der Schaltung beschreiben !

Ich hoffe ich habe mein bestes getan die allgemeine Verwirrung
noch zu vergrößern ;) schnell weg






von tastendrücker (Gast)


Lesenswert?

@holger

>EEPROM trifft rein von der Übersetzung auf beides zu.

Und exakt das ist der entscheidene Satz. Was irgendwann mal von 
irgendwelchen (oder allen) Herstellern/Entwicklern/Anwendern zur 
besseren Unterscheidung in den allgemeinen Sprachgebrauch überführt 
wurde ist hierfür unerheblich. Ein Flash (-EEPROM) ist nunmal elektrisch 
"lösch"bar und damit definitiv ein EEPROM.

Und selbstversändlich es ist auch ein ROM, da es im Betrieb eben nicht 
einfach mit einem Befehl beschrieben werden kann, so wie es gelesen 
werden kann. Stattdessen ist das Beschreiben hier ein Programmieren, das 
zwar im Betrieb, aber nur unter bestimmten Bedingungen durchgeführt 
werden kann, wie z. B. "warten bis fertig".

>Es sind aber zwei unterschiedliche Technologien.

Ich denke nicht. Elektrisches Löschen und Löschen mit UV-Licht sind zwei 
unterschiedliche Technologien.

Der noch Besserwissende ;-)

Jetzt wirds aber zu OT.

von holger (Gast)


Lesenswert?

>Stattdessen ist das Beschreiben hier ein Programmieren, das
>zwar im Betrieb, aber nur unter bestimmten Bedingungen durchgeführt
>werden kann, wie z. B. "warten bis fertig".

Das ist auch bei RAM so. Zuerst muss eine bestimmte
Adresse angelegt werden, dann kann ein Datenbyte geschrieben
werden. RAM ist also auch EEPROM :) jetzt aber ganz weg

von Harry (Gast)


Lesenswert?

Morgen!
@ Bastian:
Softtune Workbench mit Fujitsu Compiler
16Bit MB90350 Serie
Habe eine riesen Menge an Array's die mir den RAM.
Da diese sich nicht verändern wollte ich diese im ROM halten.
Ich kannte es vom KEIL das man so etwas wie folgt erledigen kann:
code unsigned char daten[100] = {1,2,3,....,99}

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.