Forum: Mikrocontroller und Digitale Elektronik eine speicheradresse auslesen.


von Thorsten H. (imonkey)


Lesenswert?

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ß

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was für ein Controller ist das? Harvard- oder von-Neumann-Architektur?

In welcher Programmiersprache versuchst Du Dich?

von Falk B. (falk)


Lesenswert?

@ 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

von Thorsten H. (imonkey)


Lesenswert?

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!)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

WELCHER Controller ist das?

WELCHE Programmiersprache verwendest Du?

(Das erinnert mich irgendwie an Haare und Nasen)

von Thorsten H. (imonkey)


Lesenswert?

ein lpc 2294 den ich mit C programmiere, die entwicklungsumgebung ist 
keil µVision..

von Oliver (Gast)


Lesenswert?

>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

von Thorsten H. (imonkey)


Lesenswert?

@ 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...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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ä?

von Thorsten H. (imonkey)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Thorsten H. (imonkey)


Lesenswert?

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!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Thorsten H. (imonkey)


Lesenswert?

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
Noch kein Account? Hier anmelden.