mikrocontroller.net

Forum: Compiler & IDEs Text oberhalb 64k lesen


Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab Probleme mit dem Auslesen von Daten die in einer Tabelle liegen, 
wobei die Tabelle oberhalb der "berühmten" 64k liegt.

Die Tabelle liegt direkt hinter den Interruptvektoren im 
Bootloaderbereich eines XMega128A1, wobei ich hier einfach mal 
Ausschnitte aus dem Disassemly poste:
+000100FA:   0000        NOP                      No operation
+000100FB:   0000        NOP                      No operation
+000100FC:   0000        NOP                      No operation
+000100FD:   5F00        SUBI      R16,0xF0       Subtract immediate
+000100FE:   0000        NOP                      No operation
.
.
.

Jetzt versuche ich mit einer Schleife einfach alle Zeichen aus der 
Tabelle per RS232 auszugeben, allerdings lese ich immer 0xFF.

Vielleicht kann mir jemand helfen, wie ich die Daten auslesen, damit ich 
auch das, was in meiner Tabelle steht, zurück bekomme.
69:             sendchar(pgm_read_byte_far(&TABLE5[i]));
+000104CC:   01C8        MOVW      R24,R16        Copy register pair
+000104CD:   27AA        CLR       R26            Clear Register
+000104CE:   FD97        SBRC      R25,7          Skip if bit in register cleared
+000104CF:   95A0        LAT       R26            Load and Toggle
+000104D0:   2FBA        MOV       R27,R26        Copy register
+000104D1:   B60B        IN        R0,0x3B        In from I/O location
+000104D2:   BFAB        OUT       0x3B,R26       Out to I/O location
+000104D3:   01FC        MOVW      R30,R24        Copy register pair
+000104D4:   9187        ELPM      R24,Z+         Extended load program memory and postincrement
+000104D5:   BE0B        OUT       0x3B,R0        Out to I/O location
+000104D6:   940F067D    CALL      0x0001067D     Call subroutine
+000104D8:   5F0F        SUBI      R16,0xFF       Subtract immediate
+000104D9:   4F1F        SBCI      R17,0xFF       Subtract immediate with carry
68:          for(i=0; i< 240; i++)
+000104DA:   E022        LDI       R18,0x02       Load immediate
+000104DB:   3E04        CPI       R16,0xE4       Compare with immediate
+000104DC:   0712        CPC       R17,R18        Compare with carry
+000104DD:   F771        BRNE      PC-0x11        Branch if not equal

Ich hab hier zwar den Assembler Code, da ich verstehen möchte wie das 
lesen funktioniert, aber das Programm soll eigenlich in C geschrieben 
sein und bleiben.

Gruß Mike

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich habe Problem gefunden und konnte lösen.
Es waren die 16 Bit Pointer die C verwendet.

Beitrag "pgm_read_byte_far"

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.