Forum: Mikrocontroller und Digitale Elektronik Arduino c datei einbinden


von DS (Gast)


Lesenswert?

Hi,

ich habe jahrelang mit dem Studio gearbeitet und einen haufen c Dateien 
mit denen ich arbeite. Nun wollte ich mal dem Arduino eine Runde drehen.

Wie binde ich da eine c Datei ein. Ich habe 2 Dateien (timer.h und 
timer.c) mit der Funktion "Sketch/Datei Hinzufügen" hinzugefügt und den 
Header mit include im "hauptreiter" da wo die Setup und die Loop ist 
bekannt gegeben. in der h sind natürlich funktionsprototypen.

Es hagelt dennoch Beschwerden über nicht referenzierte Funktionen in 
Setup und main.

Ich werde nicht schlau aus dem Konzept arduino - Rrrrr

Danke Gruß
DS

von Einer K. (Gast)


Lesenswert?

Und ich sehe nicht, was du falsch machst!

Denn, vom Prinzip geht das.
http://www.cpp-tutor.de/cpp/le07/extern_c.html

von Jim M. (turboj)


Lesenswert?

Eventuell fehlt da ein extern "C" { ... }, denn C-Aufrufkonvention und 
C++ Aufrufkonvention (vom Arduino) unterscheiden sich deutlich.

von DS (Gast)


Lesenswert?

es dämmert, lange her - wo genau muss es hin?

Wie ist die genau Notation, ewig nicht eingesetzt... arbeite eigentlich 
nicht in cpp

Danke

Gruß
DS

von Einer K. (Gast)


Lesenswert?

An den Anfang der *.ino Datei.
extern "C"
{
  #include "timer.h" // wenn timer.c existiert
}

von DS (Gast)


Lesenswert?

...läuft, danke das war es... man man, wat ne Geburt.

Toller Tip, danke!

Zwei kurze Fragen noch:

ich bin etwas verwundert, zeit Management zählt doch zu den 
grundsätzlichsten aller Funktionen, gibt es wirklich keinen Standard 
Timer beim Arduino, alles andere ist doch auch in "Geschenkpapier" 
verpackt, nur timer nicht? Da muss man dann wieder auf den Registern 
rumrattern oder irgendeine lib hinzufügen?

Kein cli() und sei() sondern nun noInterrupts() und  interrupts()? echt?

Gruß
DS

von Einer K. (Gast)


Lesenswert?

DS schrieb:
> Kein cli() und sei() sondern nun noInterrupts() und  interrupts()? echt?
Unsinn...

DS schrieb:
> gibt es wirklich keinen Standard
> Timer beim Arduino,
millis(), delay() und ihre Verwandten

von M. K. (sylaina)


Lesenswert?

DS schrieb:
> ...läuft, danke das war es... man man, wat ne Geburt.

Ist aber völlig normal wenn man in C++ Libraries einbinden will, die in 
C geschrieben sind ;)

von DS (Gast)


Lesenswert?

>>millis(), delay()

wer damit arbeitet der frisst auch Kinder :-)

>>völlig normal

ich musste erstmal begreifen das dort mit C++ auf den uc geschossen 
wird...

Dennoch ist mir noch nicht ganz klar wie diese Umgebung funktioniert, 
ein include muss man schon noch machen, aber wenn ich eine c-Datei 
hinzufüge über die o.g. Funktion dann ist sie als Reiter dort - gehört 
die dann zum Projekt oder ist der Sketch das Projekt? Ist halt 
ungewohnt...vor allem kann man die Reiter nicht entfernen ohne die Datei 
zu löschen !? seltsam.

Dann gibt es unter den Beispielen ein fade mit einer Funktion 
analogWrite() - hat der atmel mittlerweile einen DA wandler - wo sieht 
man denn was dort getrieben wird, das wäre mal interessant - genau wie 
das eigentliche Main in dem Setup und Loop aufgerufen werden - wo ist 
das denn wohl? :-)

Viele Grüße und dank bis hierher.

DS

von Dieter F. (Gast)


Lesenswert?

DS schrieb:
> Dennoch ist mir noch nicht ganz klar wie diese Umgebung funktioniert,

Manchmal hilft es, wenn man sich einliest :-)

von Einer K. (Gast)


Lesenswert?

DS schrieb:
> Dennoch ist mir noch nicht ganz klar wie diese Umgebung funktioniert,
> ein include muss man schon noch machen, aber wenn ich eine c-Datei
> hinzufüge über die o.g. Funktion dann ist sie als Reiter dort - gehört
> die dann zum Projekt oder ist der Sketch das Projekt? Ist halt
> ungewohnt...vor allem kann man die Reiter nicht entfernen ohne die Datei
> zu löschen !? seltsam.

Alles in dem Ordner gehört zum "Projekt".
"Projekt" in Anführungsstrichen, weil es in der IDE nichts gibt, was 
Projekt genannt wird.

Wenn du deine *.h und *.c Dateien häufiger einsetzen möchtest, dann mach 
eine Lib draus.
In Librarys sind *.h *.c *.cpp und *.S verwendbar, bzw. werden 
kompiliert.
Ist alles kein Hexenwerk.
https://www.arduino.cc/en/Hacking/LibraryTutorial
https://www.arduino.cc/en/Reference/APIStyleGuide

von DS (Gast)


Lesenswert?

Hi,

danke, guter Link, sehr schön. Ich komme wohl schon klar... :-)

>>Manchmal hilft es, wenn man sich einliest :-)

Jap, hatte gedacht das es noch intuitiver ist ... unterschätzt...

Ich habe gerade in einem Forum GELESEN das man die Reiter nicht wieder 
entfernen kann...!?

DS

von Einer K. (Gast)


Lesenswert?

DS schrieb:
> Ich habe gerade in einem Forum GELESEN das man die Reiter nicht wieder
> entfernen kann...!?
Falsch...

Bei alten Arduino Versionen kann das Ärger machen.. z.B. bei 
Sonderzeichen im Dateinamen.

Aber alle male kann man die IDE zu machen und die Datei im Ordner 
löschen.
Bein nächsten öffnen ist der Reiter/Tab weg.
Genauso kann man einfach Dateien in den Ordner werfen.
Für jede *.h *.c *.cpp *.ino zeigt die IDE einen Reiter/Tab.

von Dieter F. (Gast)


Lesenswert?

DS schrieb:
> Ich habe gerade in einem Forum GELESEN das man die Reiter nicht wieder
> entfernen kann...!?

Nicht nur in Foren kann man Lesen - es gibt auch Bücher, ein Arduino 
home (in englischer Sprache) etc.

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.