www.mikrocontroller.net

Forum: Compiler & IDEs Offsetangabe im SRAM


Autor: Boris (Gast)
Datum:

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

Autor: eugen D (Gast)
Datum:

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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"aba das würd ich
lieber dem compiler überlassen"

Wieso denn das? Bei vielen Sachen unpraktisch und erzeugt unnötigen
Overhead.

Autor: eugen D (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich dachte an ein globales datenfeld
mfg eugen

Autor: Martin Weber (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

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.