Forum: Mikrocontroller und Digitale Elektronik Problem mit x-Pointer und Tabelle im dseg


von nick01 (Gast)


Lesenswert?

Hi,

ich versuche jetzt schon ne Ewigkeit mit einem Mega8 eine Tabelle aus
dem dseg auszulesen. Der Teil des Programms sieht in etwa so aus:

...
ldi  xl,low(tabelle)
ldi  xh,high(tabelle)
...
main:
ld  r1,x+
out portb,r1
rjmp main
...
...
.dseg
tabelle: .db 0,1,2,3,4,5,6,7
...

Wenn ich in der main auslese wird das r1 nur mit FFh gefüllt. In der
Memory-Anzeige von AVRStudio werden die entsprechenden Bereiche ab $60
in der die Tabelle ja stehen sollte eben nur mit FFh angezeigt.

Ich habe im gleichen Programm im .cseg eine Tabelle welche ich mit dem
z-Pointer per lpm auslese - das klappt ohne Probleme..

Was ist im dseg anders??

Bin für jeden Tipp dankbar!!

Grüße, Nick01

von Christoph Kessler (Gast)


Lesenswert?

beim Z-Register und lpm muß man doch erst noch ein Bit links schieben
wegen der 16Bit-Adressierung, das fehlt hier offensichtlich, ist das
der Fehler?

von nick01 (Gast)


Lesenswert?

Die Sache mit dem z-Pointer klappt ja wie gesagt. Probleme habe ich mit
dem x und y-Pointer, da die ja auf Teile im dseg zugreifen.

von D. W. (dave) Benutzerseite


Lesenswert?

Nur weil du im Quellcode .dseg machst, heißt das nicht, dass die nacher
im RAM stehen.

Du musst am Anfang vom Programm die Daten da auch hinladen!

von nick01 (Gast)


Lesenswert?

d.h. ich muss die ganzen einträge einzeln über die store-befehle in den
dseg laden??

von Hannes L. (hannes)


Lesenswert?

Oder du schreibst sie mit .db ins Flash (cseg) und liest sie mit LPM
über den Z-Pointer aus. Für Tabellen mit zur Entwurfszeit bekannten
Konstanten würde ich sowiso kein SRAM verschwenden (cseg=Flash,
dseg=SRAM, eseg=EEPROM).

...

von GaryB (Gast)


Lesenswert?

Hallo Leute,
also diese Foren sind schon Klasse ich habe gerade genau das Problem
von nick01. Ich habe auch gerade verstanden das was ich da vor hatte
gar nicht gehen kann >> Daten/Konstanten im SRAM zu "programmieren".
Aber im Moment habe ich nun den Hänger - wozu kann ich den dann
bitte die .dseg-Anweisung des Assemblers nehmen... nur um
Speicherzellen zu reservieren bzw. symbolisch zu addressieren?

Hilft mir da mal jemand aus dem Loch raus?

Vielen Dank,
Gary

von Hannes L. (hannes)


Lesenswert?

> wozu kann ich den dann
> bitte die .dseg-Anweisung des Assemblers nehmen... nur um
> Speicherzellen zu reservieren bzw. symbolisch zu addressieren?

So ist es...

...

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
Noch kein Account? Hier anmelden.