www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7S256 / Codesegment zu klein (IAR)


Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.