__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
ja, grundsätzlich richtig!
------v
..\sonstwas\
sonstwas.ino
Entprellung.h
Entprellung.cpp
noch_mal_bib.h
noch_mal_bib.cpp
usw.h
usw.cpp
etc.h
etc.cpp
ist aber umständlich, wenn du dein ino mal irgendwann unter einem neuen Namen speicherst.
guck dir mal in einer "professionellen" lib an, wie .h und .cpp sich gegenseitig #includen, inkl #ifdef oder #pragma once.
wenn es dann erstmal läuft, verrate ich dir noch nen zusätzlichen Trick - das verwirrrt aber momentan noch...![]()
...da sind wir wieder bei meinem Urproblem -> der Sketch lässt sich immer noch nicht comp.
"Fehler beim Kompilieren für das Board Teensy 3.2 / 3.1."
Hat das mit den Referenzen "&" in Entprellung.h, Entprellung.cpp zu tun?
- - - Aktualisiert - - -HTML-Code:int Entprellung(int KontaktPin, unsigned long &StartZeit, int &KontaktZustandAlt, int &EntprellStatus);
PS:
Es wird noch komplizierter für mich;
Habe im x.ino eine "const int Entprellzeit;", die in y.cpp verwendet werden soll.
Hier meckert der Compiler aber...
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Vielleicht kannst du hieraus Nutzen ziehen:
Tutorial-Erstellen-einer-Arduino-Bibliothek
Kenne ich - steht leider nichts von &Referenzen.
Klassen wäre mein nächster Schritt, nachdem Bibliothek sauber läuft.
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Du brauchst für den Minicode keine "&Referenzen" (dieser Ausdruck existiert in der Form noch nicht einmal). Du benötigst hier gar keine Referenzen oder gar explizite Zeiger. Wenn Du der Meinung bist, hast Du eine Menge falsch gemacht.
MfG
- - - Aktualisiert - - -
Bei einem Objekt werden die Variablen in bestimmten Abschnitten deklariert.
Somit sind sie methodenübergreifend erreichbar.
Wenn Variablen in einer Methode deklariert und definiert werden, dann sollte
man dies nur tun, wenn die Variable nur innerhalb dieser Methode gebraucht wird.
Variablen, die ausschließlich nur in einer einzigen Methode benötigt werden:
Deklaration + Definition innerhalb dieser Methode.
Nicht öffentliche Variablen, die methodenübergreifend benötigt werden,
aber nicht außerhalb des Objektes:
Deklaration, innerhalb "class ...", wie ich schon am Beispiel zeigte, unter "privat"
Öffentliche Variablen, auf die auch außerhalb des Objektes zugegriffen werden soll:
Deklaration, innerhalb "class ...", wie ich schon am Beispiel zeigte, unter "public"
Zum schlechten Programmierstil gehört z.B.:
Variablen, die methodenübergreifend benötigt werden,
in einer Methode deklarieren und mit Referenz oder anderen Tricks an andere Methoden übergeben.
Nicht alles, was irgendwie möglich ist, ist auch sinnvoll, geschweige denn notwendig.
Was bestimmte Sonderfälle nicht einschließt. Davon kann hier aber keine Rede sein.
"Objekte" sind Instanzen von "Klassen", und die haben eine vorgeschriebene Struktur in C++,welche Var gehören in den Global-Bereich, in die Funktion als static und in die Objekte?
"normale" prozedurale Funktionen kennen oder haben keine Objekte, C kennt überhaupt keine Objekte.
Betr. Klassen und davon instantiierte Objekte:
Alles, was an die Klassen und ihre dann instantiierte Objekte an Werten übergeben wird und was sie als (veränderte, berechnete) Werte zurückgeben, ist "public",
alles was nur intern für Umrechnungen benötigt wird, ohne dass von außen darauf zugegriffen werden soll, ist "private".
"static" in Klassen sind Werte, die auch zwischen den Objekt-Instanzen ausgetauscht werden.
ich bin mir daher nicht sicher, ob du wirklich überhaupt von "Objekten" sprichst, oder ob du etwas ganz anderes meinst.
ich würde alle Einzel-Variablen in einen struct type packen,
dann mehrere Variablen von dem struct type davon im aktuellen Sketch erzeugen,
und dann eine beliebige dieser struct-Variablen an eine spezielle Funktion aus der Lib by reference übergeben, die die Einzelwerte ändert,
zB so
Code:#include "structlib.h" // das folgende steht in der structlib.h /* #pragma once typedef struct { // struct type int var1=0; int var2=0; int var3=0; } myBtnStruct; void modifyStruct(myBtnStruct & Btn) { // erhält eine Variable vom struct type by reference und gibt deren Werte geändert zurück Btn.var1=1; Btn.var2=2; Btn.var3=3; } */ void setup() { Serial.begin(115200); delay(1000); Serial.println(); Serial.println("Serial() started"); myBtnStruct btn1, btn2, btn3; // erzeuge mehrere Variablen vom struct type // vor Funktionsaufruf Serial.println(); Serial.println(btn1.var1); Serial.println(btn1.var2); Serial.println(btn1.var3); Serial.println(); // nach Funktionsaufruf modifyStruct(btn1); Serial.println(); Serial.println(btn1.var1); Serial.println(btn1.var2); Serial.println(btn1.var3); Serial.println(); } void loop() { }
Geändert von HaWe (06.05.2020 um 17:42 Uhr) Grund: vereinfacht
OhMann - irgendwie komme ich nicht weiter mit dem Verständniss um Bib.
Um den Sketch klein zu halten, möchte erste einmal alle Funktionen aus einem Sketch in jeweilige Bib verteilen.
Nun bekomme ich dauernd Fehlermeldungen, wenn ich aus einer Bib eine Sketch-Funktion aufrufen möchte.
Geht das gar nicht?
Später wollte ich von einer Bib aus eine andere Bib aufrufen usw.
Ist eine Bib überhaupt dafür gedacht?
Wie bereits geschrieben, steht im Netz leider nur sehr oberflächliches zu Bibliothken.
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Lesezeichen