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.
Funktioniert einwandfrei. code at 0x0100 INI []={10,11,12,13,14,15,16,17}; Welche Version von SDCC verwendest du ?
Also bei mir funktioniert das nicht. Ich verwende Version 2.6.0 #4309. Bist Du Dir sicher, daß es funktioniert? Leg doch mal bitte die Adresse außerhalb Deines Programms, also z.B. auf 0xC000.
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.
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.
Ja, Version 2.5 weis ich nicht hatte einen BUG, der ist aber beseitigt.
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
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!!
Ne ne, die sind schon offiziell. Wenn du mal Support brauchst dann weist du das zu schätzen, in den nightly snapshots sind "schnellen" BUGfixes enthalten.
Ja, hab eben von den SDCC-lern auch eine Antwort bekommen. Allerdings leicht arrogant. Aber was solls, kostet ja nichts und ist gut.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.