www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zugriff auf 97 Byte reservierten Speicherplatz


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe im Assemblercode folgende Anweisung:
VAR1: .BYTE 97
Nun will ich die Adresse von VAR1 in meinem C code nutzen.
So, wie ich das verstanden habe müsste ich bei einer 2 Byte reservierung
extern volatile uint16_t VAR1;
benutzen, um an den Inhalt zu kommen, und dann wäre ja &VAR1 die 
adresse.

Aber wie ist das bei dem 97Byte langem Speicher?
Kann ich da, da ich eh nur die Adresse brauch auch einfach nur
extern volatile uint8_t VAR1;
// &VAR1 == Adresse von VAR1
nehmen?

Vielen Dank,
Florian

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob das "so einfach" ist weiß ich nicht (wieso überhaupt ASM+C auf diese 
weise mixen?), aber allgemein kann man den Zugriff auf größere Blöcke in 
C als ein Array von uint8 realisieren.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Direktive „.byte“ erzeugt nur 1 Byte pro Argument, in Deinem Fall 
also ein einziges Byte mit dem Wert 97 (dezimal).

EDIT: gcc/gas angenommen.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich Danke dir, dann werd ich das so machen.
Ich dachte mir ich experimentier einfach mal ein wenig damit, das zu 
mischen, man weiß ja nie, ob man das vllt noch mal gebrauchen kann.

Nochmals Danke,
Florian

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann hab ich das aus dem tutorial falsch verstanden :D
Wie kann ich denn 97 Bytes erzeigen?

Muss ich dann das
.comm VAR1, 97
benutzen?

Gruß Florian

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klären wir erst mal: Da Du mit C mischen möchtest, geht es um die 
AVR-gcc-Toolchain, also avr-as ist der Assembler?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian schrieb:
> Ich dachte mir ich experimentier einfach mal ein wenig damit, das zu
> mischen, man weiß ja nie, ob man das vllt noch mal gebrauchen kann.


Ich habs noch nie gebraucht.
Entweder pure Assembler (bis max 2kB Code) oder pure C.
Ich hab hier auch noch kein Projekt gesehen, wo das Mixen wirklich 
notwendig war.


Peter

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jop, so ist es

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann suchst Du „.space“.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und um Deine erste Frage zu beantworten:  Du definierst die Variable mit
      .bss
      .global  var1
var1: .space 97
      .text
und referenzierst sie mit
extern uint8_t var1[97];
oder welcher Typ immer am besten passt (struct wäre manchmal noch ganz 
praktisch).

(EDIT: sections hinzugefügt)

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, vielen Dank, dann werde ich das so machen :D

Gruüße,
Florian

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe da noch eine Korrektur an meinem Vorschlag anzubringen:  Beim 
GNU Assembler dürfte es statt
   .bss
richtig
   .section .bss
heißen, analog dann beim abschließenden „.text“.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum willst Du unbedingt die Variable in Assembler anlegen?
Machs in C, das ist einfacher.
Und es erzeugt kein Byte mehr Code.


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.