Forum: Compiler & IDEs Arduino unter Windows stellt sich dumm an


von Alexander (alecxs)


Lesenswert?

Hallo,
kann mal jemand testen ob das compiliert? Ich hab heute Arduino auf 
Windows installiert aber es spinnt rum. Ich vermute die #define werden 
nicht in der richtigen Reihenfolge abgearbeitet, so dass die Funktion 
(oder die ganze .cpp Datei?) nicht gefunden wird. Dasselbe Spiel hatte 
ich anfangs mit dem struct KINGMETER_t KM; er wollte partout die header 
Datei nicht einlesen. Erst als ich das #include weiter nach unten 
gesetzt habe ging's plötzlich weiter...
1
#include <Arduino.h>
2
#include <stdint.h>
3
4
#define HARDWARE_REV 22
5
#define DISPLAY_TYPE_KINGMETER_618U (1<<4)
6
#define DISPLAY_TYPE_KINGMETER_901U (1<<8)
7
#define DISPLAY_TYPE_KINGMETER (DISPLAY_TYPE_KINGMETER_618U|DISPLAY_TYPE_KINGMETER_901U)
8
#define DISPLAY_TYPE DISPLAY_TYPE_KINGMETER_901U
9
10
#define TX0 1
11
#define RX0 3
12
13
#include "display_kingmeter.h"
14
KINGMETER_t KM;
15
16
void setup() {
17
  // put your setup code here, to run once:
18
  Serial.begin(9600, SERIAL_8N1, RX0, TX0);
19
  delay(1000);
20
  KingMeter_Init (&KM, &Serial);
21
}
22
23
void loop() {
24
  // put your main code here, to run repeatedly:
25
  delay(1000);
26
27
//  KingMeter_Service(&KM);
28
}
Wenn ich die Funktion ohne Argumente aufrufe, dann sagt er mir welche 
Argumente fehlen, also hat er die Deklaration. Mit Argumenten heißt es 
dann undefined reference.
Die config.h fehlt bei mir, ich habe nur eine .h und eine .cpp Datei in 
den Sketch kopiert.
lib: https://github.com/jenkie/Arduino-Pedelec-Controller
log: https://www.mediafire.com/file/uffbfwqyfgxgxdw

von Wilhelm M. (wimalopaan)


Lesenswert?

Alexander schrieb:
> Ich vermute die #define werden
> nicht in der richtigen Reihenfolge abgearbeitet

soso

>, so dass die Funktion
> (oder die ganze .cpp Datei?) nicht gefunden wird.

Das wird es wohl sein, hat aber nicht mit den CPP-Macros zu tun.

> Dasselbe Spiel hatte
> ich anfangs mit dem struct KINGMETER_t KM; er wollte partout die header
> Datei nicht einlesen. Erst als ich das #include weiter nach unten
> gesetzt habe ging's plötzlich weiter...

Die Header-Datei braucht die CPP-Macros ...

> Wenn ich die Funktion ohne Argumente aufrufe, dann sagt er mir welche
> Argumente fehlen, also hat er die Deklaration. Mit Argumenten heißt es
> dann undefined reference.

D.h., die Definition in der Funktion fehlt.
Dann musst Du die .cpp-Datei suchen, in der diese Funktion definiert 
wird.

> Die config.h fehlt bei mir, ich habe nur eine .h und eine .cpp Datei in
> den Sketch kopiert.

C++-Programmieren nach nicht nach dem Zufallsprinzip.
In Summe würde ich sagen: kauf die ein C++-Buch mit den Grundlagen.

von Alexander (alecxs)


Lesenswert?

Schau doch bitte zuerst in das log. Es ist alles da. Bis auf die 
config.h - die will ich nicht. Ich habe die relevanten Zeilen daraus in 
die .ino kopiert.

von Wilhelm M. (wimalopaan)


Lesenswert?

Alexander schrieb:
> Schau doch bitte zuerst in das log.

Ich hole mir doch nicht diese merkwürdige Datei von diesem merkwürdigen 
Server !?!

Poste die Fehlermeldungen hier.

von Alexander (alecxs)


Lesenswert?

jemand anderes?

von Harald K. (kirnbichler)


Lesenswert?

Wilhelm M. schrieb:
> Ich hole mir doch nicht diese merkwürdige Datei von diesem merkwürdigen
> Server !?!

Da hast Du recht. Dateien kann man auch in diesem Forum anhängen.

von J. S. (jojos)


Lesenswert?

> Wenn ich die Funktion ohne Argumente aufrufe, dann sagt er mir welche
> Argumente fehlen, also hat er die Deklaration. Mit Argumenten heißt es
> dann undefined reference.
> Die config.h fehlt bei mir, ich habe nur eine .h und eine .cpp Datei in
> den Sketch kopiert.
> lib: https://github.com/jenkie/Arduino-Pedelec-Controller

Dann ist der Header vorhanden, aber der Quellcode wurde nicht 
dazugelinkt.

Das Projekt sieht auch sehr angestaubt aus. Es wird CMake verwendet, 
aber der Autor hat offensichtlich noch geübt.

Und über so eine Bild Schlagzeile als Threadtitel kann man nur den Kopf 
schütteln.

Beitrag #7523047 wurde vom Autor gelöscht.
von Alexander (alecxs)


Lesenswert?

Ich möchte nicht das gesamte Projekt, ich möchte nur diese beiden 
Dateien display_kingmeter.h und display_kingmeter.cpp in ein Sketch 
einbinden. Dazu habe ich diese von github heruntergeladen und in den 
Sketch Ordner kopiert. Aus dem Log geht hervor das diese auch compiliert 
werden.

Vielleicht liegt es am Windows. Oder an der Arduino IDE, da hatte ich 
schon mal ein anderes Problem.

Beitrag "Re: Typedef enum als Funktionsparameter (Arduino)"

Oder es liegt an zusätzlichen Fehlern im Code, die ich nicht verstehe.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

du kratzt ohne Plan Dateien aus einem komplexen Projekt, und wenn es 
nicht funktioniert liegt es an Windows. Unfassbar.
Dann benutze doch ein anderes OS.

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

J. S. schrieb:
> du kratzt ohne Plan Dateien aus einem komplexen Projekt

Ich weiß was ich benötige, und was nicht.

von J. S. (jojos)


Lesenswert?

Alexander schrieb:
> Ich weiß was ich benötige, und was nicht.

'undefined reference' sagt etwas anderes.

von Wilhelm M. (wimalopaan)


Lesenswert?

Alexander schrieb:
> Vielleicht liegt es am Windows. Oder an der Arduino IDE, da hatte ich
> schon mal ein anderes Problem.

Soso ... und die config.h "wolltest" Du nicht ;-)

von J. T. (chaoskind)


Lesenswert?

Alexander schrieb:
> Ich weiß was ich benötige, und was nicht.

Dann nutze doch einfach was du benötigst.

von Alexander (alecxs)


Lesenswert?

Wilhelm M. schrieb:
> Soso ... und die config.h "wolltest" Du nicht ;-)

Alexander schrieb:
> Ich habe die relevanten Zeilen daraus in
> die .ino kopiert.

Geht das so nicht? D.h. es muss zwingend in eine Header Datei kopiert 
werden?

von Wilhelm M. (wimalopaan)


Lesenswert?

Alexander schrieb:
> Wilhelm M. schrieb:
>> Soso ... und die config.h "wolltest" Du nicht ;-)
>
> Alexander schrieb:
>> Ich habe die relevanten Zeilen daraus in
>> die .ino kopiert.
>
> Geht das so nicht? D.h. es muss zwingend in eine Header Datei kopiert
> werden?

Genau das meinte ich mit: nimm ein Buch in die Hand.

Oh man, wenn Du Hilfe willst, dann pack Deine Dateien und die 
Fehlermeldungen zusammen und poste das hier.

: Bearbeitet durch User
von Roland F. (rhf)


Lesenswert?

Hallo,
Alexander schrieb:
> Geht das so nicht? D.h. es muss zwingend in eine Header Datei kopiert
> werden?

Geh mal davon aus, das eine Abhängigkeit besteht zwischen dem was da 
heraus kopiert hast und dem was du da nicht heraus kopiert hast.

rhf

von Rolf (rolf22)


Lesenswert?

J. S. schrieb:
> Dann ist der Header vorhanden, aber der Quellcode wurde nicht
> dazugelinkt.

Laut Log wurde die passende cpp-Datei problemlos compiliert. Dann müsste 
sie eigentlich auch mitgelinkt werden.

Wenn der Linker eine compilierte Funktion nicht findet, kann es daran 
liegen, dass bei ihrem Aufruf ein 'full qualified name' nötig gewesen 
wäre.

Vielleicht bezieht sich die Fehlermeldung aber auf einen der 
Aufruf-Parameter der Funktion und nicht auf die Funktion selbst?

von Helmut -. (dc3yc)


Lesenswert?

Alexander schrieb:
> Ich weiß was ich benötige, und was nicht.

Das Problem liegt sicher nicht an irgendeiner Datei; das Problem 
liegt/sitzt 50cm vor dem Monitor.

von Alexander (alecxs)


Lesenswert?

Wilhelm M. schrieb:
> Alexander schrieb:
>> Geht das so nicht? D.h. es muss zwingend in eine Header Datei kopiert
>> werden?
>
> Genau das meinte ich mit: nimm ein Buch in die Hand.

Ein einfaches Ja oder Nein ist nicht drin?

Wilhelm M. schrieb:
> Oh man, wenn Du Hilfe willst, dann pack Deine Dateien und die
> Fehlermeldungen zusammen und poste das hier.

habe ich gemacht, siehe OP.
Alexander schrieb:
> log: https://www.mediafire.com/file/uffbfwqyfgxgxdw

Roland F. schrieb:
> Geh mal davon aus, das eine Abhängigkeit besteht zwischen dem was da
> heraus kopiert hast und dem was du da nicht heraus kopiert hast.

Ich bin es Zeile für Zeile durchgegangen und alles was in der .h und der 
.cpp abgefragt wird, habe ich in der .ino definiert. Ich kann mir die 
Werte auch über Serial.print() anzeigen lassen, da stimmt alles. 
Allerdings weiß ich nicht ob die Reihenfolge der #define stimmt, oder 
wie ich die überprüfen könnte.

J. S. schrieb:
> Dann benutze doch ein anderes OS.

Das habe ich nun nachgeholt, war etwas spät gestern. Unter Linux kommt 
dieselbe Fehlermeldung, also liegt es schon mal nicht am Windows.
1
Arduino: 1.8.19 (Linux), Board: "DOIT ESP32 DEVKIT V1, 80MHz, 921600, None, Disabled"
2
/home/mint/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: sketch/sketch_oct25a.ino.cpp.o:(.literal._Z5setupv+0x14): undefined reference to `KingMeter_Init(KINGMETER_t*, HardwareSerial*)'
3
/home/mint/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: sketch/sketch_oct25a.ino.cpp.o: in function `setup()':
4
/home/mint/Arduino/sketch_oct25a/sketch_oct25a.ino:20: undefined reference to `KingMeter_Init(KINGMETER_t*, HardwareSerial*)'
5
collect2: error: ld returned 1 exit status
6
exit status 1
7
Error compiling for board DOIT ESP32 DEVKIT V1.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

Alexander schrieb:
> Geht das so nicht? D.h. es muss zwingend in eine Header Datei kopiert
> werden?

durch das #include wird die angegebene Datei in den Quelltext eingefügt. 
Die Datei kann auch Kai-Uwe.irgendwas heißen, das ist völlig egal für 
den Compiler. Insofern ist es ok wenn man den Inhalt per cut & paste in 
den Quelltext bringt.
Man muss aber alle Abhängigkeiten erfassen und verschachtelte Funktionen 
müssen als Quelltext in das Projekt übernommen werden. Und die wollen 
wieder irgendwelche defines haben.
Der Compiler liest alles Zeilenweise ein, da gibt es keine Magie und 
kein unterschiedliches Verhalten zwischen OS. Wenn irgendwo ein #ifdef 
steht dann kommt es darauf an ob das abgefragte define vorher gesetzt 
wurde oder nicht.
Alternativ kann das auch dem Compiler mitgegeben werden, aber das wird 
im einfachen Arduino Buildsystem nicht gut unterstützt, deshalb hat der 
Autor von dem github Projekt das wohl auch mit CMake angefangen. Oder 
platformIO verwenden, da kann man einfach mehrere Konfigurationen mit 
verschiedenen defines anlegen.

von Wilhelm M. (wimalopaan)


Lesenswert?

Alexander schrieb:
> Wilhelm M. schrieb:
>> Alexander schrieb:
>>> Geht das so nicht? D.h. es muss zwingend in eine Header Datei kopiert
>>> werden?
>>
>> Genau das meinte ich mit: nimm ein Buch in die Hand.
>
> Ein einfaches Ja oder Nein ist nicht drin?

Diese Frage zeigt schon, dass Du gar keine Ahnung hast. Daher ist es 
nicht zielführend, diese Frage zu beantworten, sondern an der Wurzel 
anzusetzen.

>
> Wilhelm M. schrieb:
>> Oh man, wenn Du Hilfe willst, dann pack Deine Dateien und die
>> Fehlermeldungen zusammen und poste das hier.
>
> habe ich gemacht, siehe OP.
> Alexander schrieb:
>> log: https://www.mediafire.com/file/uffbfwqyfgxgxdw

... und dazu habe was geschrieben.

>
> Roland F. schrieb:
>> Geh mal davon aus, das eine Abhängigkeit besteht zwischen dem was da
>> heraus kopiert hast und dem was du da nicht heraus kopiert hast.
>
> Ich bin es Zeile für Zeile durchgegangen und alles was in der .h und der
> .cpp abgefragt wird, habe ich in der .ino definiert. Ich kann mir die
> Werte auch über Serial.print() anzeigen lassen, da stimmt alles.
> Allerdings weiß ich nicht ob die Reihenfolge der #define stimmt, oder
> wie ich die überprüfen könnte.
>

>
1
> Arduino: 1.8.19 (Linux), Board: "DOIT ESP32 DEVKIT V1, 80MHz, 921600, 
2
> None, Disabled"
3
> /home/mint/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: 
4
> sketch/sketch_oct25a.ino.cpp.o:(.literal._Z5setupv+0x14): undefined 
5
> reference to `KingMeter_Init(KINGMETER_t*, HardwareSerial*)'
6
> /home/mint/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: 
7
> sketch/sketch_oct25a.ino.cpp.o: in function `setup()':
8
> /home/mint/Arduino/sketch_oct25a/sketch_oct25a.ino:20: undefined 
9
> reference to `KingMeter_Init(KINGMETER_t*, HardwareSerial*)'
10
> collect2: error: ld returned 1 exit status
11
> exit status 1
12
> Error compiling for board DOIT ESP32 DEVKIT V1.
13
>

Dem Linker fehlt einfach display_kingnmeter.o

von Sebastian W. (wangnick)


Lesenswert?

Alexander schrieb:
> Die config.h fehlt bei mir, ich habe nur eine .h und eine .cpp Datei in
> den Sketch kopiert.

display_kingmeter.h inkludiert aber config.h. Irgendetwas musst du getan 
haben, um dieses Problem zu umgehen. Und dabei hast du wahrscheinlich 
eine Inkonsistenz erzeugt, zum Beispiel display_kingmeter.o für 
SoftwareSerial übersetzt, das .ino aber mit HardwareSerial.

LG, Sebastian

von Alexander (alecxs)


Lesenswert?

Rolf schrieb:
> Laut Log wurde die passende cpp-Datei problemlos compiliert. Dann müsste
> sie eigentlich auch mitgelinkt werden.
>
> Wenn der Linker eine compilierte Funktion nicht findet, kann es daran
> liegen, dass bei ihrem Aufruf ein 'full qualified name' nötig gewesen
> wäre.
>
> Vielleicht bezieht sich die Fehlermeldung aber auf einen der
> Aufruf-Parameter der Funktion und nicht auf die Funktion selbst?

Ich habe nun mal alle unnötigen #if und #ifndef auskommentiert, nun 
bekomme ich andere Fehlermeldung. Sollte doch aber mit #include 
<Arduino.h> oder #include <stdint.h> erschlagen sein?
1
display_kingmeter.cpp:36:7: error: 'uint8_t' does not name a type

von Sebastian W. (wangnick)


Lesenswert?

Sebastian W. schrieb:
> Und dabei hast du wahrscheinlich eine Inkonsistenz erzeugt, zum Beispiel
> display_kingmeter.o für SoftwareSerial übersetzt, das .ino aber mit
> HardwareSerial.

Aber ohne alle Sketch-Dateien exakt zu sehen bleibt nur Spekulatius ...

LG, Sebastian

von Alexander (alecxs)


Lesenswert?

Mehr als im OP gepostet gibt's da nicht. Es muss auch niemand die zip 
herunterladen der keine Sandbox hat, die Datei ist auf github. Es ist 
ein leeres Sketch, ich wollte einfach nur die display_kingmeter.cpp auf 
dem ESP32 testen, bzw. wie man diese minimalistisch einbindet.

von Sebastian W. (wangnick)


Lesenswert?

Alexander schrieb:
> Mehr als im OP gepostet gibt's da nicht.

Das kann nicht sein. Wie gesagt,

Sebastian W. schrieb:
> display_kingmeter.h inkludiert aber config.h

LG, Sebastian

von J. S. (jojos)


Lesenswert?

Es kann sein das bei diesem ESP32 Board Serial die USBSerial ist, dann 
passt das nicht. Der Rest sollte schon ok sein.
Probiere mal Serial1 aus.

edit:
habe es mal q&d in platformIO geworfen, kompiliert. Einfach die 
originale config.h verwendet und den DisplayType gesetzt. Dann meckert 
der Compiler noch ein unbekanntes A2 an, habe ich durch A10 und A11 
ersetzt. Die Konstanten für TX und RX scheinen mir noch falsch zu sein, 
da müssen die Pinnummern rein.
Habe das auf github hochgeladen:
https://github.com/JojoS62/ESP32-serial

Serial ist da HardwareSerial, das kompiliert ohne Fehler.

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Danke. da es an der config.h liegen musste, bin ich die noch mal 
durchgegangen. Es fehlten fünf Parameter.

Kompilieren ließ es sich dann aber immer noch nicht. `'uint16_t' does 
not name a type` sowie `'HardwareSerial' does not name a type`. Gehirn 
angestrengt und die #include <stdint.h> #include <Arduino.h> aus der 
.ino rausgelöscht und in die display_kingmeter.h eingetragen.

Dann kam `error: 'name' was not declared in this scope` für die fünf 
Parameter. Diese aus der .ino rausgelöscht und in die 
display_kingmeter.cpp eingetragen, nun kompiliert es.

Ziel war es aber eigentlich die Dateien original zu belassen. Keine 
Chance?

Sebastian W. schrieb:
> Das kann nicht sein. Wie gesagt,

Arduino ignoriert die fehlende config.h einfach, hatte es mit und ohne 
Auskommentierung versucht und keinen Unterschied feststellen können. 
Daher habe ich die Dateien dann original belassen.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

Alexander schrieb:
> Arduino ignoriert die fehlende config.h einfach,

'Arduino' kann die nicht ignorieren. In config.h wird Arduino.h 
inkludiert und display_kingmeter.h braucht beide.
Es reicht nicht die includes nur in die .ino zu schreiben, das 
display_kingmeter.cpp kennt die ino nicht und muss für sich 
kompilierfähig sein.

Ich habe die Quellen ja original übernommen, nur den A2 kennt das ESP32 
Devkit nicht.
https://github.com/JojoS62/ESP32-serial/tree/main/src

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

J. S. schrieb:
> Es reicht nicht die includes nur in die .ino zu schreiben, das
> display_kingmeter.cpp kennt die ino nicht und muss für sich
> kompilierfähig sein.

Das war das ganze Problem. Aber warum reklamiert der Compiler nicht die 
fehlende config.h - ich hatte nie eine erstellt? Erst der Linker scheint 
ein Problem damit zu haben.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

wenn man #include "datei.xy" im Code hat und die Datei existiert nicht, 
dann meckert der Compiler definitiv. Und es gelten die Regeln des 
Dateisystems, d.h. unter Linux ist der Name auch case sensistive.
Du hattest das config.h aber nicht benutzt und ein paar defines selber 
gesetzt, aber im config.h sind noch mehr nötige Codezeilen für das 
Kingmeter drin.

Das Arduino.h fügt das Arduino Buildsystem in das .ino ein und es 
kopiert .ino und .pde Dateien zusammen, ein bisschen fummelt es an 
diesen Quellen schon rum. Aber das Arduino Buildsystem ist wieder 
gleich, egal ob Arduino IDE, PIO oder die Arduino CLI Tools.

von Alexander (alecxs)


Lesenswert?

J. S. schrieb:
> wenn man #include "datei.xy" im Code hat und die Datei existiert nicht,
> dann meckert der Compiler definitiv.

Welches Log Level braucht man um dieses Meckern auch zu sehen? In meinem 
Log war da nichts was config.h angemeckert hätte (siehe zip)

J. S. schrieb:
> Du hattest das config.h aber nicht benutzt und ein paar defines selber
> gesetzt,

in der .ino, was der .cpp ja nicht bekannt ist

J. S. schrieb:
> aber im config.h sind noch mehr nötige Codezeilen für das
> Kingmeter drin.

fünf Parameter aus den Config Options (Zeile 200) die ebenfalls nicht 
angemeckert wurden, da die Makros gar nicht erst funktionierten und die 
Funktion nicht bekannt war

: Bearbeitet durch User
von Sebastian W. (wangnick)


Angehängte Dateien:

Lesenswert?

Alexander schrieb:
> Welches Log Level braucht man um dieses Meckern auch zu sehen? In meinem
> Log war da nichts was config.h angemeckert hätte (siehe zip)

Bei mir meldet Arduino 1.8.19 beim Kompilieren des angefügten Beispiels 
folgendes:
1
C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\Hobbyraum\AppData\Local\Arduino15\packages -hardware C:\Users\Hobbyraum\Documents\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\Hobbyraum\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\Hobbyraum\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old -vid-pid=1A86_7523 -ide-version=10819 -build-path C:\Users\HOBBYR~1\AppData\Local\Temp\arduino_build_340529 -warnings=all -build-cache C:\Users\HOBBYR~1\AppData\Local\Temp\arduino_cache_143689 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Users\Hobbyraum\Documents\Arduino\sketch_oct26a\sketch_oct26a.ino
2
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\Hobbyraum\AppData\Local\Arduino15\packages -hardware C:\Users\Hobbyraum\Documents\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\Hobbyraum\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\Hobbyraum\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old -vid-pid=1A86_7523 -ide-version=10819 -build-path C:\Users\HOBBYR~1\AppData\Local\Temp\arduino_build_340529 -warnings=all -build-cache C:\Users\HOBBYR~1\AppData\Local\Temp\arduino_cache_143689 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\Hobbyraum\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Users\Hobbyraum\Documents\Arduino\sketch_oct26a\sketch_oct26a.ino
3
Using board 'nano' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
4
Using core 'arduino' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
5
Detecting libraries used...
6
"C:\\Users\\Hobbyraum\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Users\\HOBBYR~1\\AppData\\Local\\Temp\\arduino_build_340529\\sketch\\sketch_oct26a.ino.cpp" -o nul
7
Alternatives for config.h: []
8
ResolveLibrary(config.h)
9
  -> candidates: []
10
In file included from C:\Users\Hobbyraum\Documents\Arduino\sketch_oct26a\sketch_oct26a.ino:1:0:
11
test.h:1:10: fatal error: config.h: No such file or directory
12
 #include "config.h"
13
          ^~~~~~~~~~
14
compilation terminated.
15
exit status 1
16
config.h: No such file or directory

Es scheint also, dass die Arduino-Umgebung bei #include "config.h" trotz 
der Anführungszeichen (also nicht der spitzen Klammern) nach einer 
entsprechenden Bibliothek sucht? Das wäre allerdings eine Böse Falle!

LG, Sebastian

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

es wird irgendeine andere config.h finden, z.B. in mbedtls. Ein 
fehlendes include ist ein Fehler, da braucht es keinen Loglevel.
Könnte man testen durch umbenennen in "configxyz.h".

Also so wie es bei Sebastian passiert. AVR hat kein mbedtls, also wird 
die config.h da nicht gefunden.

Deshalb mag ich CMake, und nicht das file globbing benutzen. 
Ausschreiben was includiert werden soll, nicht von einem magischen 
Builder suchen lassen. Kenne ich auch von Mbed...

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Ein ResolveLibrary(config.h) -> candidates: [] sehe ich aber nicht in 
meinem Log, und auch keine config.h (nur mbedtls/esp_config.h)

Aber danke für's testen. Ich denke ich werde einfach meine "eigene" 
minimalistische Lib erstellen. Kann man ja machen, ich muss ja nur den 
GPL Copyright © 2015 Michael Fabry Disclaimer einfügen. Da behalte ich 
nur die display_kingmeter.h

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

das mbedtls ist ja im ESP SDK mit drin, dann reicht es wenn der Suchpfad 
da schon eingetragen ist.
..\ArduinoData\packages\esp32\hardware\esp32\1.0.4\tools\sdk\include\mbe 
dtls\mbedtls\config.h

von Alexander (alecxs)


Lesenswert?

die config.h gibt es tatsächlich
1
C:\Users\Name\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.14\tools\sdk\esp32\include\mbedtls\mbedtls\include\mbedtls\config.h

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Alexander schrieb:
> die config.h gibt es tatsächlich

Es ist auch sehr däml^H^H^H^Hunklug vom Kingmeter-Autor, die 
Konfigurationsdatei für die Kingmeter-Sources config.h zu nennen. Wenn 
schon display_kingmeter.h und display_kingmeter.cpp, dann sollte das 
config_kingmeter.h oder kingmeter_config.h heißen.

So mache ich das in meinen Paketen auch, z.B. irmpconfig.h usw.

: Bearbeitet durch Moderator
von J. S. (jojos)


Lesenswert?

da ist die komplette config für den Pedelec Controller drin, es können 
verschiedene Displays ausgewählt werden und die ganzen Parameter sind da 
drin.
Das wollte der TO ja nicht übernehmen, für den Fall wäre eine gestrippte 
Version als king_config natürlich besser.

von Wilhelm M. (wimalopaan)


Lesenswert?

Frank M. schrieb:
> Es ist auch sehr däml^H^H^H^Hunklug vom Kingmeter-Autor, die
> Konfigurationsdatei für die Kingmeter-Sources config.h zu nennen.

Der einzige, der hier recht "dämlich" war, war der TO.

Der hat nämlich die config.h nicht mit kopiert und hat sich dennoch 
nicht gewundert, dass es trotzdem compiliert bzw. "nur" ein 
Linker-Fehler auftaucht.

von Sebastian W. (wangnick)


Lesenswert?

Alexander schrieb:
> Wilhelm M. schrieb:
>> Soso ... und die config.h "wolltest" Du nicht ;-)
>
> Alexander schrieb:
>> Ich habe die relevanten Zeilen daraus in
>> die .ino kopiert.
>
> Geht das so nicht? D.h. es muss zwingend in eine Header Datei kopiert
> werden?

Um das noch zu beantworten: Nein, das geht so nicht. Zwar sind die 
"relevanten Zeilen" dann während der Übersetzung der .ino bekannt, aber 
nicht während der Übersetzung der .cpp.

Die einfachste Lösung wäre, display_kingmeter.h anzupassen. Dort muss ja 
eh die Zeile #include "config.h" entfernt werden. Und an genau dieser 
Stelle sollten stattdessen die "relevanten Zeilen" aus der ehemaligen 
config.h eingefügt werden.

Dann stehen sie sowohl der .cpp als auch der .ino beim Übersetzen zur 
Verfügung.

LG, Sebastian

von Alexander (alecxs)


Lesenswert?

Ich habe jetzt alles was ich wirklich brauche in einer einzigen Datei 
display_kingmeter.ino zusammengefasst. Die Funktionen waren nur zum 
Testen des Protokolls, mittels Jumper auf Rx+Tx.

: Bearbeitet durch User
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.