Forum: Compiler & IDEs msp430 gcc: Auf externe C Variable zugreifen


von zhg (Gast)


Lesenswert?

Hallo!

Ich habe ein C Projekt und möchte zusätzlich eine Funktion in Assembler 
ausprogrammieren. Dazu muss ich auf mehrere Variablen, die im C Code 
deklariert sind zugreifen.

Jetzt habe ich diese als ".extern my_var" im Assemblercode definiert. 
Jedoch scheitert jeder Versuch, auf diese zuzugreifen mit einem 
"undefined reference to `my_var'".

So mache ich das:
1
#include <msp430.h>
2
3
.section .data
4
.extern my_var
5
6
.section    .text
7
8
.global my_func
9
.type my_func, @function
10
my_func:
11
CLR &my_var

Kann mir jemand weiterhelfen? Danke!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Oft werden die Symbolnamen von C-Compilern mit einem vorangestellten 
Unterstrich versehen, so daß Deine Variable "my_var" für den Linker 
"_my_var" heißt.

Mit dem Tool nm (Bestandteil der binutils) kannst Du Dir u.a. die 
Namen der Symbole in einer Objektdatei (*.o) ansehen.

Lass' das auf das *.o-File los, das aus Deinem C-Sourcefile erzeugt 
wird, in dem Du die Variable definiert hast.

https://sourceware.org/binutils/docs/binutils/nm.html

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

zhg schrieb:
> Jetzt habe ich diese als ".extern my_var" im Assemblercode definiert.

Das ist nur eine Deklaration, keine Definition. Schau einfach, wie's der 
Compiler macht, z.B. mit -save-temps und s-File.
1
.data
2
.global my_var
3
.type my_var,@object
4
.balign 2
5
my_var:
6
    .word 1234

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.