mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [GCC, ASM] Zugriff auf eine Struktur im Assembler-Modul


Autor: henne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe eine Funktion, bei der es wirklich einmal auf den letzten Takt 
ankommt. Diese wird als Assembler-Modul geschrieben.

In diesem Modul muss ich nun auf Einträge in einer globalen Struktur 
zugreifen. Wie gelingt das?

Beispiel:

in global.h ist definiert:

struct test{
  uint8_t    Array[3];
         uint16_t   Word;
  }tst;


in my_funct möchte ich:

extern tst.Array

lds   temp, tst.Array
lds   tempB, tst.Array +1


Momentan befürchte ich, dass der Compiler die Position nicht ermitteln 
kann - obwohl sie eigentlich bekannt sein sollte...

Momentan bin ich etwas ratlos.

Viele Grüße,
Hendrik

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
henne schrieb:
> Hallo zusammen,
>
> ich habe eine Funktion, bei der es wirklich einmal auf den letzten Takt
> ankommt. Diese wird als Assembler-Modul geschrieben.
>
> In diesem Modul muss ich nun auf Einträge in einer globalen Struktur
> zugreifen. Wie gelingt das?
>
> Beispiel:
>
> in global.h ist definiert:
>
> struct test{
>   uint8_t    Array[3];
>          uint16_t   Word;
>   }tst;
>
> Momentan befürchte ich, dass der Compiler die Position nicht ermitteln
> kann - obwohl sie eigentlich bekannt sein sollte...

Der Compiler kann das auch nicht bestimmen ;-) Ist aber garnicht nötig

Der Zugriff geht einfach per
lds   r25, tst+3 ; low-byte von .Word

Allerdings musst du sicherstellen, daß nicht vielleicht Füllbytes in der 
Struktur erzeugt werden:
struct test
{
    uint8_t    Array[3];
    uint16_t   Word;
} __attribute__((packed)) tst;

oder genau wissen, wo diese evtl. sitzen und das im Asm berücksichtigen. 
Als Anhaltspunkt kannst du einfach in die Assembler-Ausgabe des 
Compilers schauen, zB mit -save-temps bei GCC (s-File).

Johann

Autor: henne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, Johann!

Das hatte ich so auch schon gemacht - nur darf dabei die Struktur von 
keinem nachträglich geändert und das asm-Modul vergessen werden...

Deshalb hatte ich noch Hoffnung, dass es an mir liegt ;-)

VG,
Hendrik

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.