Hey Leute,
ich versuche derzeit einen digitalen filter aufzubauen und bin dabei auf
folgende nützliche Webseite gestoßen:
http://t-filter.engineerjs.com/
In dieser kann einstellen welche Funktion der digitale Filter welchen
man aufbauen möchte haben soll und das Programm gibt dir die
Entsprechenden Filterkoeffizienten + Sourcecode.
Der Code den man bekommt sieht wie folgt aus:
-------------------SampleFilter.c--------------
ich muss zugeben, wie dieser Filter (habe einfach schnelle ein par werte
genommen also nicht auf die Koeffizienten achten) funktioniert weiß ich
noch nicht, aber leider auch nicht wie ich diesen in meinen Code
(programmiere ein Arduino) einbauen kann.
Wenn ich das richtig verstanden habe sind das doch die beiden Dateien
die ich für eine library brauche oder? Muss ich hier also eine eigene
Library erstellen?
Aber wie baue ich eine solche auf? einfach ein daraus eine .cpp und eine
.h "text" erstelle und ein #include Arduino.h einfüge?
Hab hier leider noch nicht sehr viel Ahnung und hoffe jemand kann sein
Wissen hier mit mir teilen...
LG
Hallo,
Mach Deinem Sketch auf.
Geh rechts auf die Tab-Auswahl -> neuer Tab
SampleFilter.h
Inhalt für die .h reinkopieren.
- neuer Tab
SampleFilter.ino
Inhalt für die .c reinkopieren.
Die .h in Deinen Sketch includen und benutzen...
Wenn die .ino lieber .c heißen soll:
So bennenen und die .h um die C++-Abfrage ergänzen:
#ifdef __cplusplus
extern "C"{
#endif
der Inhalt der .h Datei
#ifdef __cplusplus
}
#endif
Wenn die .c .ino heißt kümmert sich die IDE offenbar da selber.
Die Dateien sind in Deinem Projektordner und werden dann beim Öffnen
Deines Sketches automatisch in den Tabs mitgeladen und angezeigt und
mitcompiliert.
Gruß aus Berlin
Michael
Das bedeutet wenn ich diese beiden Dateien einfach hineinkopiere und die
.c in .ino umbenenne kann ich die drei methoden
void SampleFilter_init(SampleFilter* f);
void SampleFilter_put(SampleFilter* f, int input);
int SampleFilter_get(SampleFilter* f);
einfach in meinem scetch verwenden?
Bringt die erste Methode in der ich den Code erweitere einen Vorteil?
Danke im Voraus für die große Hilfe
Hallo,
ja, probier es doch einfach...
Einen Vorteil habe ich beim Einbau der C++-Abrage nicht bemerkt, bei
einigen C/C++-Programmierern mögen sich bei der .ino-Geschichte die
Fußnägel aufrollen ;) Ich habe das eher per Zufall entdeckt. Der
Preprozessor der Arduino-Geschichte hat da offenbar ein paat Abfragen
eingebaut, die durchaus praktisch und nützlich sind.
Gruß aus Berlin
Michael
Michael U. schrieb:> Die Dateien sind in Deinem Projektordner und werden dann beim Öffnen> Deines Sketches automatisch in den Tabs mitgeladen und angezeigt und> mitcompiliert.
Na ja, Library geht anders. Eine Library ist bereits compiliert und wird
beim Linken angegeben. Zu einer Library gehört immer min. ein Header,
der die öffentlichen Symbole deklariert, die die Library enthält: ihr
API.
So wie Du das beschrieben hast, wird von der "Library" immer alles mit
in den Sketch compiliert, unabhängig davon, ob es überhaupt verwendet
wird. Das bläht den Sketch unnötig auf.
Kann die Arduino-IDE überhaupt Libraries?
Markus L. schrieb:> Kann die Arduino-IDE überhaupt Libraries?
Ja, kann sie. Die sind allerdings tatsächlich im Quellcode vorhanden,
und nicht fertig kompiliert.
Halllo,
Markus L. schrieb:> Na ja, Library geht anders. Eine Library ist bereits compiliert und wird> beim Linken angegeben. Zu einer Library gehört immer min. ein Header,> der die öffentlichen Symbole deklariert, die die Library enthält: ihr> API.
wir sind aber immernoch beim AVR...
Wieviele compilierte Libs (nicht nur deren Source zum selber
compilieren) findest Du dazu so im Netz?
Gruß aus Berlin
Michael
Michael U. schrieb:> Wieviele compilierte Libs (nicht nur deren Source zum selber> compilieren) findest Du dazu so im Netz?
Es geht ja darum, selbst eine Library zu erstellen. Mit der Zeit kann
sich ja so einiges an Wiederverwertbarem ansammeln. Das dann alles immer
wieder neu zu compilieren und nicht dem Linker entscheiden zu lassen,
nur das verwendete auch tatsächlich dazu zu linken, finde ich recht
ungeschickt. Auch angesichts der begrenzten Resourcen eines µC.
Hallo,
die Entscheidung, aus der Sache eine lib zu bauen bleibt ihm ohnehin,
Beschreibungen dazu liegen im Netz.
Bist Du Dir sicher, das daß Arduino-Umfeld das Linkerscript entsprecehnd
modifiziert und wirklich nur Teile einbindet und kann die Kombi mit dem
GGC das in diesem Umfeld auch leisten?
Mein Hinweis zum Vorgehen bezog sich erstmal darauf, den Kram in Gang zu
bringen. Erst mühsam eine Lib bauen und dann feststellen, daß man es
eigentlich garnicht gebrauchen und nutzen kann, ist auch nicht so
motivierend.
Gruß aus Berlin
Michael
Hi,
daher ja mein Frage dannach, ob die Arduino-IDE Libraries überhaupt
unterstützt.
Die IDE macht ja grundsätzlich C++ und setzt noch was drauf (Sketch mit
seinen Automatismen), verfügt also über einen C++ Compiler. In C++ ist
es sehr üblich, gegen Libraries und deren API zu programmieren, die beim
Linken angegeben werden.
Eine Sammlung von Quelldateien stellt keine Library im Sinne eines C++
Compilers und seinem Linker dar.
Grüße, Markus
Markus L. schrieb:> Die IDE macht ja grundsätzlich C++ und setzt noch was drauf (Sketch mit> seinen Automatismen), verfügt also über einen C++ Compiler.
Die IDE ruft IMHO den AVR-GCC auf.
Hi,
gerade recherchiert:
Mit dem Atmel Studio baut sich eine Static Library so:
http://www.atmel.com/webdoc/atmelstudio/atmelstudio.Project.StaticLibrary.html
Mit der Arduino IDE geht das on-the-fly und es braucht keine eigens
erstellte Static Library für die eigenen wiederverwendbaren
Funktionen/Klassen:
.c/.cpp -> .o -> static library -> Link zum Main Sketch:
"Only the parts of the library needed for your sketch are included in
the final .hex file, reducing the size of most sketches.", siehe
https://www.arduino.cc/en/Hacking/BuildProcess .
Ich frag mich gerade, wie's dahingehend in Eclipse CDT + Arduino Plugin
aussieht.
Grüße, Markus