C51 - In xdata schreiben (XC888)

Gast #3063920
Lesenswert?

Hey,

Habe hier ein kleines Programm, welches unter anderem einen Buffer in 
den externen Speicher schreiben und lesen soll. Das ganze sieht 
vereinfacht so aus (hab das unwesentliche mal weggeleassen):

Header.h:
1
extern ubyte xdata rec_buffer[32];

Function.c:
1
ubyte xdata rec_buffer[32] = {0};
2

3
void foo()
4
{
5
    //Option 1
6
    rec_buffer[0] = 0xFF;    // Geht nicht
7

8
    //Option 2
9
    ubyte xdata *ptr_buf = rec_buffer;
10
    ptr_buf[0] = 0xFF        // Geht nicht
11
}

Mein Problem ist, dass ich in beiden Fällen zwar keine Compilerfehler 
bekomme, wenn ich es teste wird nichts in den Speicher geschrieben. Beim 
Debuggen sehe ich zwar dass die Pointer korrekterweise auf den externen 
Speicher zeigen (X:0x0000000), aber es wird nie was dorthin geschrieben 
und die Werte bleiben immer 0.
Was veregsse ich da bzw. mache ich falsch?

Viele Grüße

Flipp
Gast #3063947
Lesenswert?

Entscheidend ist das Speichermodell mit dem du den Compiler sagst, dass 
er externen Speicher hat, und wo der liegt.

Da solltest Du dein Problem suchen....

Allerdings fehlen uns solche Angaben wie Address-Space , Compiler und so 
weiter....
Gruß T.
Gast #3064037
Lesenswert?

Abdul K. schrieb:
> Es geht um Keil C51 sicherlich.
>
> Ist schon lange her, aber man mußte früher dem Linker noch sagen, auf
> welcher Adresse XDATA liegt.


Danke, genau das war das Problem gewesen! Musste in den 
Projekteinstellungen für den Linker einstellen, wo der Adressraum für 
den externen Speicher beginnt (beim XC888 ist das ab 0x0F000).

Vielen Dank, jetzt funktioniert es!!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren