INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Eclipse ".ino.cpp"
25.09.2016, 21:39
Beitrag #17
RE: Eclipse ".ino.cpp"
(25.09.2016 21:29)Mathias schrieb:  Aber das Problem mit den Classen, wie beim ersten Post, in der Hauptdatei tritt nur bei Sloeber auf.

Das kann ich jetzt hier so nicht nachvollziehen.

Ich habe die Klassendeklaration (mit den private und public Members) immer in der Headerdatei stehen, die ich in der cpp einbinde.

Ich kann evtl. morgen mal Dein Beispiel aus #1 in die Arduino-IDE nehmen.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.09.2016, 17:04 (Dieser Beitrag wurde zuletzt bearbeitet: 26.09.2016 17:08 von Mathias.)
Beitrag #18
RE: Eclipse ".ino.cpp"
Zitat:Das ist aber keine Sache der IDE, sondern des Compilers. Evtl. kann die IDE bei dessen Aufruf das Verhalten etwas beeinflussen. In der Arduino-IDE tritt das aber auch auf.

In der Arduino-IDE 1.6.12, wird folgender Code fehlerfrei übersetzt, obwohl kein struct bei test steht, somit muss es doch irgendwie mit Sloeber und der .ini.cpp zusammenhängen

Code:
struct Key {
    int a, b, c;
};

bool test(Key k)   // ohne struct
{
    return true;
}

Key k;

void setup() {
}

void loop() {
  if (test(k)){
    digitalWrite(13, true);
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.09.2016, 18:05
Beitrag #19
RE: Eclipse ".ino.cpp"
(26.09.2016 17:04)Mathias schrieb:  
Zitat:Das ist aber keine Sache der IDE, sondern des Compilers. Evtl. kann die IDE bei dessen Aufruf das Verhalten etwas beeinflussen. In der Arduino-IDE tritt das aber auch auf.

In der Arduino-IDE 1.6.12, wird folgender Code fehlerfrei übersetzt, obwohl kein struct bei test steht, somit muss es doch irgendwie mit Sloeber und der .ini.cpp zusammenhängen

Code:
struct Key {
    int a, b, c;
};

bool test(Key k)   // ohne struct
{
    return true;
}

Key k;

void setup() {
}

void loop() {
  if (test(k)){
    digitalWrite(13, true);
  }
}

Denn wird es wohl mit dem Aufruf des Compilers oder der Compilerversion zusammen hängen. Die 1.6.5 will struct.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 16:28 (Dieser Beitrag wurde zuletzt bearbeitet: 27.09.2016 16:31 von Mathias.)
Beitrag #20
RE: Eclipse ".ino.cpp"
Am Compiler selbst kann es nicht liegen.

Lösche ich in der .ino.cpp die Zeile mit "bool test(Key k);", dann wird anstandslos kompiliert.
Nur leider erzeugt Sloeber bei jeder Änderung zB. in der test.ino die .ino.cpp neu und in der steht natürlich wieder die fehlerhafte Zeile.

Dasselbe war bei den Classen auch der Fall.

Wen man Sloeber irgendwie beibringen könnte, da man keine .ino.cpp will, könnte ich mir vorstellen, das alles anstandslos kompiliert wird.
Irgendwie sehe ich auch keinen Sinn der .ini.cpp .

Ich habe noch etwas festgestellt. Wen man die Zeile mit #include "test.ino", nach weiter oben verschiebt, dann wird auch ohne Fehler kompiliert, aber auch dies bleibt nur bis zur nächsten Änderung.

Code:
#ifdef __IN_ECLIPSE__
//This is a automatic generated file
//Please do not modify this file
//If you touch this file your change will be overwritten during the next build
//This file has been generated on 2016-09-27 17:29:22

#include "Arduino.h"
#include "test.ino"  // einfügen
bool test(Key k)    ;
void setup() ;
void loop() ;

#include "test.ino"  // entfernen


#endif
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 17:33
Beitrag #21
RE: Eclipse ".ino.cpp"
(27.09.2016 16:28)Mathias schrieb:  Am Compiler selbst kann es nicht liegen.

Lösche ich in der .ino.cpp die Zeile mit "bool test(Key k);", dann wird anstandslos kompiliert.
Nur leider erzeugt Sloeber bei jeder Änderung zB. in der test.ino die .ino.cpp neu und in der steht natürlich wieder die fehlerhafte Zeile.

Dasselbe war bei den Classen auch der Fall.

Wen man Sloeber irgendwie beibringen könnte, da man keine .ino.cpp will, könnte ich mir vorstellen, das alles anstandslos kompiliert wird.
Irgendwie sehe ich auch keinen Sinn der .ini.cpp .

Ich habe noch etwas festgestellt. Wen man die Zeile mit #include "test.ino", nach weiter oben verschiebt, dann wird auch ohne Fehler kompiliert, aber auch dies bleibt nur bis zur nächsten Änderung.

Code:
#ifdef __IN_ECLIPSE__
//This is a automatic generated file
//Please do not modify this file
//If you touch this file your change will be overwritten during the next build
//This file has been generated on 2016-09-27 17:29:22

#include "Arduino.h"
#include "test.ino"  // einfügen
bool test(Key k)    ;
void setup() ;
void loop() ;

#include "test.ino"  // entfernen


#endif
Dann scheint es so, dass das Teil mit der Erzeugung der Deklarationen (test,setup,loop) sich selbst im Weg steht, weil das Struct erst hinterher in der test.ino steht und es davor noch nicht bekannt ist.

Probiere mal folgendes:

Schreibe die Deklaration des Struct Key in eine extra "test.h" Datei im gleichen Verzeichnis wie die "test.ino" und includiere die oben in die test.ino mit

#include "test.h"

In der "test.ino" die Deklaration des Struct löschen / auskommentieren.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 18:49 (Dieser Beitrag wurde zuletzt bearbeitet: 27.09.2016 18:49 von Mathias.)
Beitrag #22
RE: Eclipse ".ino.cpp"
Dies scheint zu klappen, aber übersichtlicher wird es dadurch nicht.
Code:
#ifndef TEST_H_
#define TEST_H_

struct Key {
    int a, b, c;
};

#endif /* TEST_H_ */
Code:
#include "test.h"

bool test(Key k)  
{
    return true;
}

Key k;

void setup() {
}

void loop() {
  if (test(k)){
    digitalWrite(13, true);
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 18:58
Beitrag #23
RE: Eclipse ".ino.cpp"
(27.09.2016 18:49)Mathias schrieb:  Dies scheint zu klappen, aber übersichtlicher wird es dadurch nicht.

Das scheint nur bei diesem einfachen Beispiel so.
Es ist eigentlich üblich, alle eigenen Datentypen, Konstanten, globale Festlegungen usw. in einer Headerdatei zu führen.

Bei Bibliotheken ist sie Pflicht und manche Sachen (z.B. Templates) müssen in die Headerdatei.

Es wird damit eigentlich übersichtlicher, da Du eine Datei mit allen Definitionen, Festlegungen usw. hast und davon getrennt die Implementierung.

Das kann auch der Grund bei den Klassen gewesen sein.
Einfach mal die Klassendeklaration mit den Membervariablen und den public und private Methoden in eine Headerdatei schreiben.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 21:30
Beitrag #24
RE: Eclipse ".ino.cpp"
Zitat:Das scheint nur bei diesem einfachen Beispiel so.
Viel komplexeres wird es bei einem Atmega kaum geben, die 32KB sind da recht schnell voll.
Aber für eine grosse C++-Anwendung sind Bibliotheken sicher ein grosser Vorteil.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Question Arduino mit Java ( Eclipse ) steuern SirKomex 0 501 28.01.2016 08:48
Letzter Beitrag: SirKomex

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste