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
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.
@tastendrücker
>Wenn Du mit ROM den Programmspeicher meinst (meist EEPROM), dann sollte
Heutzutage meist FLASH, kein EEPROM. Kleiner, aber wichtiger
Unterschied.
MFg
Falk
@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
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...
@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
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.
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
... 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 ;-)
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 :-)
@ 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
@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.
>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
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}