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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.