Absolte addressing mit SDCC

Gast #477362
Lesenswert?

Hallo,
ich verwende den SDCC und einen 8051 von Silabs. Wegen Schreibschutz etc 
muss ich ein Datenarray auf eine feste Adresse im Code-Segment legen. 
Versucht habe ich es mit:

code __at (0xC000) unsigned char INI[INI_LEN*2]={ 10,12,37,...

Das Programm versucht zwar auf dieser Adresse das Array zu lesen, aber 
dort steht nichts. Wie kann ich den SDCC dazu bringen, mir dieses Array 
genau dort auch abzulegen?

Danke.
Gast #477689
Lesenswert?

Saug dir mal 20061030-4444, klar funktioniert das ich kann es ja im 
INTEL.HEX sehen.

Das mußt du mir dann schon glauben, welche Compiler Optionen verwendest 
du ?

--code-loc 0x0000  --model-small --std-sdcc99 --vc

Anbei meine Einstellungen.
#477693
Lesenswert?

Getestet mit sdcc 2.6.1 #4497 (Dec  2 2006):
1
code at 0xCCCC int test[]={1,2,3};
2

3
void main() {
4

5
}

Erzeugt im .asm file:
...
        .org 0xCCCC
_test:
        .byte #0x01,#0x00
        .byte #0x02,#0x00
        .byte #0x03,#0x00

und der Asembler packt entspechend die Daten an 0xCCCC.
Im .lst file:

   CCCC                     130         .org 0xCCCC
   CCCC                     131 _test:
   CCCC 01 00               132         .byte #0x01,#0x00
   CCCE 02 00               133         .byte #0x02,#0x00
   CCD0 03 00               134         .byte #0x03,#0x00

Schliesslich landet im .hex/.ihx File folgende Zeile:

:06CCCC000100020003005C

Passt also alles.
Gast #477701
Lesenswert?

Nicht falsch verstehen. Ich habs Dir durchaus geglaubt. Allerdings meine 
ich, daß der Compiler das erst dann falsch macht, wenn es außerhalb des 
Programm-Adressbereichs liegt.

Wo bekomme ich denn diese neuere Version her? Eine neuere kann ich für 
Windows nicht finden...

Hier meine Einstellungen

sdcc -c --model-large --int-long-reent init.c
sdcc -c --model-large --int-long-reent --no-peep-comments x.c
sdcc --model-large x.rel init.rel
Gast #477714
Lesenswert?

So, es funktioniert nun. Wusste nicht, daß es auch quasi inoffizielle 
Versionen gibt, die man nutzen kann. Ich dachte immer, von sowas läßt 
man besser die Finger, wenns sicher sein soll.

Aber es funktioniert jetzt.

Vielen Dank an Euch!!

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