[GCC, ASM] Zugriff auf eine Struktur im Assembler-Modul

Gast #1311340
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
Persönliche Seite #1311349
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
1
lds   r25, tst+3 ; low-byte von .Word

Allerdings musst du sicherstellen, daß nicht vielleicht Füllbytes in der 
Struktur erzeugt werden:
1
struct test
2
{
3
    uint8_t    Array[3];
4
    uint16_t   Word;
5
} __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
Gast #1311363
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.