Forum: Mikrocontroller und Digitale Elektronik .S in Atmel Studio 7 einbinden funktioniert nicht


von Brathahn (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich versuche die i2c library von Peter Fleury auf einem attiny26 zum 
laufen zu bekommen.
Da der tiny keinen uart sondern nur ein usi hat, muss ich die 
assemblervariante nehmen.
Allerdings habe ich probleme wenn ich die "i2cmaster.S" datei in AS7 
einfüge.

Eingefügt habe ich diese mit "add existing item". Wenn ich das mit 
normalen .cpp dateien mache, funktioniert das normalerweise auch.

Hier der Code der main.cpp
1
#include <avr/io.h>
2
#include "i2cmaster.h"
3
int main(void)
4
{
5
  i2c_init();
6
    while (1) 
7
    {
8
    }
9
}

als fehler bekomme ich nun:
1
undefined reference to `i2c_init()'

Der output von AS7 sagt folgendes:
https://pastebin.com/euf8RjYu

Vermutlich mache ich irgendetwas falsch.. aber anscheinend habe ich 
Google nicht mit den richtigen Suchwörtern gefüttert...

Hat jemand eine Idee was ich falsch mache?
Vielen Dank schonmal im vorraus!

von c-hater (Gast)


Lesenswert?

Brathahn schrieb:

> Eingefügt habe ich diese mit "add existing item". Wenn ich das mit
> normalen .cpp dateien mache, funktioniert das normalerweise auch.

Wenn du einen Rechtsklick auf die Assemblerdatei machst und dann 
"Properties" wählst, was steht dann im Eigenschaftsfenster unter 
"Advanced->Build action"?

Wenn nicht "Compile" (vermutlich ist das so), dann einfach "Compile" 
wählen.

von pegel (Gast)


Lesenswert?

Brathahn schrieb:
> Eingefügt habe ich diese mit "add existing item".

Habe ich eben getestet.
Danach in der:

i2cmaster.S

PB0 und PB2 definiert, übersetzt Fehlerfrei.

von Brathahn (Gast)


Angehängte Dateien:

Lesenswert?

Hallo c-hater,
bei den Properties steht bereits compile.

von c-hater (Gast)


Lesenswert?

Brathahn schrieb:

> bei den Properties steht bereits compile.

Tja, dann wirst du wohl herausfinden müssen, warum's nicht compiliert 
(bzw. in diesem Fall: assembliert).

Sollte irgendwelche Fehlermeldungen produzieren, da assembliert werden 
soll, aber offensichtlich nicht erfolgreich assembliert wird. Sowas 
hinterläßt gewöhnlich eindeutige Spuren im Log.

von pegel (Gast)


Lesenswert?

Entschuldigung.
Ich hatte kein cpp sondern ein c Projekt erzeugt.

Bei einem cpp Projekt habe ich auch Fehler.

Ist wieder so ein extern "C" Ding.

von Brathahn (Gast)


Lesenswert?

Hallo pegel,

hast du auch i2c_init() in der main aufgerufen?
wenn ich das ohne den aufruf mache, kompiliert das auch ohne probleme.
(vermutlich wird das dann wegoptimiert)

Wenn ja, was hast Du anders gemacht als ich? Braucht eine .S datei 
vielleicht irgendein bestimmtes Compiler Flag?

von pegel (Gast)


Lesenswert?

Brathahn schrieb:
> hast du auch i2c_init() in der main aufgerufen?

Ja, sonst wird die i2c Lib nicht benutzt.

Warum nutzt Du cpp?
Willst Du bei dem kleinen wirklich cpp Funktionen einsetzen?

von pegel (Gast)


Lesenswert?

Wenn es wirklich cpp sein muss:
main.c:
1
#ifdef __cplusplus
2
extern "C" {
3
#endif
4
5
#include <avr/io.h>
6
#include "i2cmaster.h"
7
8
int main(void)
9
{
10
    /* Replace with your application code */
11
  i2c_init();
12
    while (1) 
13
    {
14
    }
15
}
16
17
#ifdef __cplusplus
18
}
19
#endif

von pegel (Gast)


Lesenswert?

Nicht main.c, sondern main.cpp natürlich.

von Brathahn (Gast)


Lesenswert?

pegel schrieb:
> Warum nutzt Du cpp?

Gute Frage.. Kann ich dir aber auch nicht beantworten :D Vermutlich was 
in Richtung: Hab ich bisher immer so gemacht.


Aber spass beiseite.. C funktioniert tatsächlich. Komisch nur das es mit 
cpp nicht funktioniert.

von c-hater (Gast)


Lesenswert?

pegel schrieb:

> #ifdef __cplusplus
> extern "C" {
> #endif

> #ifdef __cplusplus
> }
> #endif

Das gehört aber dann eigentlich in die i2c_master.h, oder?

von pegel (Gast)


Lesenswert?

c-hater schrieb:
> Das gehört aber dann eigentlich in die i2c_master.h, oder?

Schon, dann muss man es allerdings bei allen importierten Libs machen.

von c-hater (Gast)


Lesenswert?

Brathahn schrieb:

> Aber spass beiseite.. C funktioniert tatsächlich. Komisch nur das es mit
> cpp nicht funktioniert.

Nö komisch ist nur, dass immer wieder Leute Sprachen benutzen, von denen 
sie eigentlich überhaupt keine Ahnung haben...

von Brathahn (Gast)


Lesenswert?

Danke pegel für die schnelle Lösung!



c-hater schrieb:
> Nö komisch ist nur, dass immer wieder Leute Sprachen benutzen, von denen
> sie eigentlich überhaupt keine Ahnung haben...

Dann erklär mir doch bitte, warum es nicht funktioniert.
Ich weiss es nämlich tatsächlich nicht.

Ausserdem finde ich das man eine Programmiersprache nicht zu 100% 
verinnerlicht haben muss, nur um mit ihr zu Arbeiten. Auch wenn es 
selbiges sehr erleichtert.

Aber wenn das der fall wäre, würden Seiten wie diese hier oder 
stackoverflow nicht existieren.

von Bleibtreu (Gast)


Lesenswert?

Brathahn schrieb:

>> Nö komisch ist nur, dass immer wieder Leute Sprachen benutzen, von denen
>> sie eigentlich überhaupt keine Ahnung haben...
>
> Dann erklär mir doch bitte, warum es nicht funktioniert.
> Ich weiss es nämlich tatsächlich nicht.
>
> Ausserdem finde ich das man eine Programmiersprache nicht zu 100%
> verinnerlicht haben muss, nur um mit ihr zu Arbeiten. Auch wenn es
> selbiges sehr erleichtert.
>
> Aber wenn das der fall wäre, würden Seiten wie diese hier oder
> stackoverflow nicht existieren.

Du solltest dich von diesem Stänkerer nicht in Defensive drängen lassen. 
Es gehört zum guten Ton im Forum den zu ignorieren.

von leo (Gast)


Lesenswert?

Brathahn schrieb:
> Dann erklär mir doch bitte, warum es nicht funktioniert.

Stichwort "name mangling". Sollte man schon wissen.

leo

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.