Forum: Compiler & IDEs Wert in externen Speicher an bestimmter Adresse


von Frischling (Gast)


Lesenswert?

Hi,

ich möchte den Wert 'zahl' (DEF1 und DEF2) in den externen Speicher an 
einer vorher definierten bestimmter Adresse (DEF1 und DEF2)schreiben.
Also Wert 'zahl' bei 0x123A und 0x123B reinschreiben. So wie unten 
überschreibe ich ja nur den Pointer, wie mache ich es aber richtig?

#define  DEF1   0x123A
#define  DEF2   0x123B

...

void set_zahl(uint16_t zahl)
{
  uint8_t  *ptr1  =  DEF1;
  uint8_t *ptr2  =  DEF2;

  ptr1  =  zahl;
   ptr2  =  (zahl>>8);
}

von Bla (Gast)


Lesenswert?

*ptr = zahl

von Ralf (Gast)


Lesenswert?

Grob so:
1
*ptr1  =  zahl;
2
   *ptr2  =  (zahl>>8);

von Frischling (Gast)


Lesenswert?

Hi,

vielen Dank für die flinken Antworten. Genau das hatte ich auch schon 
gemacht, allerdings bleibt beim Durchsteppen der Wert an dieser Adresse 
unverändert und enthählt nicht 'zahl'. :-S

von Karl H. (kbuchegg)


Lesenswert?

Frischling schrieb:
> Hi,
>
> vielen Dank für die flinken Antworten. Genau das hatte ich auch schon
> gemacht, allerdings bleibt beim Durchsteppen der Wert an dieser Adresse
> unverändert und enthählt nicht 'zahl'. :-S

Dann schau dir den Assemblercode an, ob der Optimizer die eigentliche 
Zuweisung an eine etwas andere Stelle geschoben hat.

Wenn es vital ist, dass die Zuweisung exakt an dieser Stelle passiert, 
dann eben als
1
volatile uint8_t * Ptr1 = (volatile uint8_t*)DEF1;
2
...
3
4
  *Ptr1 = 0x30;

von Frischling (Gast)


Lesenswert?

Fehler gefunden:

das SRE Bit von XMRA Register des 2561 war nicht gesetzt -.-... wie 
gesagt: Frischling. Danke an alle!

von Frischling (Gast)


Lesenswert?

XMCRA

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.