mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arduino c datei einbinden


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: DS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und ich sehe nicht, was du falsch machst!

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

: Bearbeitet durch User
Autor: Jim M. (turboj)
Datum:

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

Autor: DS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arduino Fanboy D. (ufuf)
Datum:

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

: Bearbeitet durch User
Autor: DS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: M. K. (sylaina)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: DS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter F. (Gast)
Datum:

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

Manchmal hilft es, wenn man sich einliest :-)

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht 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

: Bearbeitet durch User
Autor: DS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.