hallo, ich schreibe an die adressen 0x030050 bis 0x030060 werte, und möchte nun auf diese zugreifen, wie geht sowas ? mit pointern kann ich irgendwie nur die adressen von bereits vorhandenen variablen austauschen(im ram), die adressen die ausgelesen werden sollen stehen aber im flash.... gruß
Was für ein Controller ist das? Harvard- oder von-Neumann-Architektur? In welcher Programmiersprache versuchst Du Dich?
@ Thorsten Heimberg (imonkey) >ich schreibe an die adressen 0x030050 bis 0x030060 werte, und möchte nun >auf diese zugreifen, wie geht sowas ? mit pointern kann ich irgendwie Waum schreibst du auf absolute Adressen? Das hat in den meisten Fällen keinen Sinn. Ja das geht mit pointern. uint8_t * my_pointer = 0x300050; >die adressen die ausgelesen werden sollen stehen aber im flash.... Dann musst du sowieso die PGM_... Funktionen nutzen und die Pointer als pgm Pointer definieren. MFG Falk
also ich versuche daten die in den ram eingelesen wurden in den flsh zu schreiben, dazu verwende ich eine funktion die ich nem beispiel von keil entliehen habe, und die auch zu funktionieren scheint? jetzt möchte ich halt mal die adresse auslesen...PGM_ funktionen ? gruß (mach das auch erst seit 4 wochen, jeder schritt neuland!)
WELCHER Controller ist das? WELCHE Programmiersprache verwendest Du? (Das erinnert mich irgendwie an Haare und Nasen)
ein lpc 2294 den ich mit C programmiere, die entwicklungsumgebung ist keil µVision..
>also ich versuche daten die in den ram eingelesen wurden in den flsh zu >schreiben, >mach das auch erst seit 4 wochen, jeder schritt neuland!) Du brauchst keine Werte ins Flash zu schreiben, egal, mit welchem Controller, und welchem Compiler. Sag aber trotzdem, was du verwendest. Und dazu, was du eigentlich erreichen möchtest. Oliver
@ oliver ich baue im rahmen meiner diplomarbeit ein messgerät das den lpc2294 als auswerteeinheit benutzt, dazu möchte ich Referenzdaten über den com-port einlesen und diese dann (auch nach neuboot) zur auswertung von sensorsignalen heranziehen...alles geht nur nicht die ablage der ref.daten im eeprom oder im flash...eeprom geht gar nicht da über spi-interface azusteuern und da läuft überhauptnix... Controller: phillips lpc2294 compiler: schätz auch von keil...
Du verwendest also einen Controller mit von-Neumann-Architektur.
Daher ist der Lesezugriff auf das RAM exakt dasselbe wie der Lesezugriff
aufs Flash, beide liegen im gleichen Adressraum.
Du möchtest wohl Daten aus dem RAM ins Flash kopieren, dazu solltest Du
Dir die entsprechenden Appnotes von Philips/NXP ansehen, wie auf dem von
Dir verwendeten Controller das FlashROM zu beschreiben ist.
> eeprom geht gar nicht da über spi-interface azusteuern
Hä?
also ich verwende einen real-view-compiler... @rufus ram-adressraum 0x4000 0000 bis 0x4000 1FFF flash-adressraum 0x0002 0000 bis 0x0004 0000 und das ist dann der gleiche adressraum?
Ja, das ist der gleiche Adressraum, die Adress_bereiche_ unterscheiden sich. Mit ein und demselben Pointer kannst Du sowohl aufs RAM als auch aufs Flash zugreifen:
1 | int* p; |
2 | |
3 | p = (int *) 0x40000000; |
4 | |
5 | printf("Wert aus RAM %d\n", *p); |
6 | |
7 | p = (int *) 0x00020000; |
8 | |
9 | printf("Wert aus Flash %d\n", *p); |
Auf einer Harvard-Maschine wie dem AVR sieht das ganz anders aus, da sind Hilfskonstrukte wie "pgmspace.h" etc. erforderlich.
genau das habe ich gesucht!!! den richtigen syntax...klappt auch so weit, also die adressen werden richtig ausgegeben bei: printf("Wert aus Flash %x\n", &p); nur die werte stimmen noch nicht, da muss ich nochmal über der funktion brüten..bzw den code hier mal posten.. vielen dank rufus!
> printf("Wert aus Flash %x\n", &p);
Das ist auch falsch, hier gibst Du die Adresse aus, an der die Variable
p gespeichert ist.
Statt des & solltest Du schon ein * verwenden, wie ich es auch angegeben
habe.
rufus das stimmt schon, ich WILL ja die adresse ausgegeben bekommen, danach folgt dan der syntax für den wert...
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.