Hallo Newsgroup, zunächst mal entschuldigung, dass ich das hier 2x poste, aber ich habe leider vergessen, den Betreff richtig zu beschreiben... Ich bin gerade dabei, ein LCDisplay mit HD44780 anzusprechen (Assembler). Leider scheint in meiner Konfiguration ein Fehler zu sein, so dass folgende Fehlermeldung ausgegeben wird: (IAR Workbench 4.0) Error[e18]: Range error, Expression out of range Where $ = main + 0x104 [0x108] in module "main" (C:\Dokumente und Einstellungen\Peter\Desktop\LCD asm\binary ram\Obj\asm.r79), offset 0x104 in segment part 1, segment ICODE What: 0x160000 - ($ + 8) [0x15FEF0] Allowed range: 0xFFFFF001 - 0x1000 Wo muss ich denn da drehen, dass ich für meinen Code mehr Speicher habe, oder wie läuft das grundsätzlich mit dem Code-Segment? Mein Header im Programm: ------------------------ NAME main PUBLIC main COMMON INTVEC:CODE CODE32 B main RSEG ICODE:CODE CODE32 #define PIOA_BASE 0xFFFFF400 #define PIOA_SODR_OFFSET 0x30 #define PIOA_CODR_OFFSET 0x34 main: . . . Danke für jeden Tip ! Peter
Hallo Newsgroup, also jetzt habe ich meine Makros durch Unterprogramme abegelößt, die ich mit "BL" anspringe und mit MOV pc, r14 wieder verlasse. Wenn ich mit dieser Version viele Daten in mein ICODE-Segment einfüge z.B. 2000x: mov r8, #us50 bl warte meckert mein die Workbench nicht beim Assemblieren. Wenn ich jedoch mit Mkros arbeite klappt das nicht. Wobei mir klar ist, dass die Stelle wo das Makro aufgerufen wird dann der Quelltext vom Makro vom Assembler eingefügt wird (ist das so richtig?). Ich habe schon das eingangs erwähnte problem schon, wenn ich nur wenige Makros ver wende (also nicht wie beim Test 2000x irgendwas) Die Makros habe ich an dieser Stelle definiert: <CODE wie eingangs beschrieben> B main RSEG ICODE:CODE CODE32 // ------------------------------------------------------------ WARTE macro durchgaenge LOCAL warte1 // ------------------------------------------------------------ ldr r8, =durchgaenge warte1: subs r8,r8,#1 bne warte1 endm // ------------------------------------------------------------ main: <CODE> Sind die Makros vielleicht an einer falschen Stelle definiert. Oder hat die freie Version der Workbench eine begrenzung an Makros (kann ich mir aber wegen der Fehlermeldung nicht vorstellen)? Wäre echt nett, wenn jemand ein bischen Licht ins Dunkle bringen könnte. Mir wäre schon geholfen, wenn jemand den Zweck von Segmenten erklärt, und wo man Makros richtigerweise definiert. Es klappt zwar jetzt auch ohne Makros. Aber sie zu verwenden würde mir schon gefallen. Achja, was gibt es denn sonst noch für Möglichkeiten, Code sinnvoll zu gestalten (Makros, Unterprogramme, und ???) PS.: Wieder mal alles ohne C(++) :-) Danke und Viele Grüße Peter
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.