Offsetangabe im SRAM

Gast #76916
Lesenswert?
• ▲
▼
Hallo miteinander,
unter Assembler gibt es die Möglichkeit mittels ".org 0x0400" Daten
im Programmspeicher an einer bestimmten Stelle zu plazieren.
Wie kann ich dies im SRAM realieren?
Ein Zeiger soll ein Datenfeld durchlaufen. Wenn dieses Feld z.B. an der
o.g. Adresse beginnt ist der Zeiger leichter zu initalisieren und kann
ganze 255 Daten mit einem Byte ansprechen.
Danke!
Gruß Boris
Gast #76917
Lesenswert?
• ▲
▼
na du deklarierst dir nen pointer in den du die ardresse lädst und dann
auf die stelle speicherst auf die der pointer zeigt. aba das würd ich
lieber dem compiler überlassen (mit ne datenfeld )
mfg eugen
Gast #76920
Lesenswert?
• ▲
▼
Hallo Boris!

Dein Problem läßt sich glaub' ich ganz einfach lösen:

Es gibt ja in Assembler Compilerdirektiven, die angeben, in welchen
Speicher der Code geschrieben werden soll.
".CSEG" signalisiert, daß es sich um Programmcode handelt
".DSEG" , daß es sich um Daten für das SRAM handelt und
".ESEG" , daß es sich um Daten für das EEProm handelt.

".ORG" legt eine absolute Speicheradresse fest, in die die Daten
geschrieben werden sollen. ".ORG" kann beliebig oft, an beliebiger
Stelle und in jedem Speicherbereich angewandt werden.

.DSEG
.ORG 0x0400
Daten1...
.ORG 0x0500
Daten2...
.CSEG
.ORG 0x0000
Programcode...

Legt also fest, daß die Daten1 ab 0x0400 im SRAM plaziert werden, und
die Daten2 ab 0x0500 im SRAM. Der Programmcode wird ab Adresse 0x0000
des Codespeichers plaziert. Die ".ORG"-Adresse im ".DSEG" bezieht
sich dann natürlich auf den Speicherbereich des SRAM und die
".ORG"-Adresse im ".CSEG" auf den Programmspeicher!
Man sollte nur darauf achten, daß sich mehrere ".ORG" nicht ungewollt
überlappen.
Ich weis jetzt allerdings nicht, ob der Compiler bei einem Wechsel
zwischen den einzelnen Speicherbereichen sich die jeweiligen
".ORG"-Positionen merkt. Wenn man sichergehen will, dann lieber bei
einem Bereichswechsel (also z.B. nach einem ".DSEG" ein ".CSEG")
mit einem ".ORG" beginnen. Evtl. mal in einer Anleitung des Compilers
nachforschen.

Grüße, Martin.
Gast #76921
Lesenswert?
• ▲
▼
Hi

und wie sollen die Daten im SRAM landen? Das SRAM kann man nur zur
Laufzeit beschreiben. Wenn da bestimmte Daten liegen sollen muß man
diese beim Programmstart aus dem Flash oder dem EEPROM dorthin
buxieren. Und diese Arbeit wird einem vom Assembler nicht abgenommen.

Matthias
Gast #76922
Lesenswert?
• ▲
▼
Außerdem sind wir hier im GCC-Forum, und für den GNU assembler gibt's
weder .cseg/.dseg/.eseg (heißt dort anders, insgesamt flexibler) noch
ist es für verschiebliche Objektmodule in irgendeiner Form sinnvoll,
.org zu benutzen, da die endgültige Lage der Objekte erst vom Linker
festgelegt wird.  Folglich muß man Linkerdirektiven bemühen, wenn man
irgendwas auf irgendwelche festen Adressen binden will.

.org ist ein Relikt aus der Zeit der Absolutassembler.  Mit
Absolutassemblierung hat man aber eigentlich selbst unter CP/M auf dem
Z80 bereits nicht mehr gearbeitet...

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.