Forum: Mikrocontroller und Digitale Elektronik Coocox Compiler Probleme


von Johnny S. (sgt_johnny)


Lesenswert?

Hallo zusammen

Ich habe heute probiert eine Arduino Library in Coocox für STM32 zu 
bearbeiten. Hierzu habe ich unter "app" im Ordnerbaum auf "Add Files" 
geklickt und die .h und .cpp ausgewählt. Hierzu habe ich die TimeLib 
benutzt.

Grundsätzlich funktioniert der Compiler, da er sofort die Fehler 
erkannte welche ich dann behob.  Eigentlich musste ich nur "millis();" 
fixen, da es dies nur bei Arduino gibt.

Ich habe nun aber folgendes Problem.

Wenn man das main.c builden will, erscheint folgender Fehler
1
RTC3\app/main.c:144: undefined reference to `setTime'
2
RTC3\app/main.c:161: undefined reference to `second'

bezieht sich auf diese Zeilen
1
  setTime(1514570944);
2
  int ssecond = second();

Die beiden Funktionen sind in der TimeLib.h und TimeLib.cpp enthalten...

TimeLib.h habe ich in der main.h Datei des STM32 Projekts angegeben.


Wo mache ich hier den Fehler?

von Jens D. (jens) Benutzerseite


Lesenswert?

Ist SetTime als static angegeben?
Die TimeLib.h kannst du auch in deiner main.c(pp) per include holen.

TimeLib.cpp wird auch sicher kompiliert? Vielleicht musst du wenn 
vorhanden dein makefile anpassen.

Alternativ provoziere mal in der TimeLib einen compile Fehler oder 
warning.

von Johnny S. (sgt_johnny)


Lesenswert?

Jens D. schrieb:
> Ist SetTime als static angegeben?

im TimeLib.h als "void setTime();"

> Die TimeLib.h kannst du auch in deiner main.c(pp) per include holen.
>
> TimeLib.cpp wird auch sicher kompiliert? Vielleicht musst du wenn
> vorhanden dein makefile anpassen.
>
> Alternativ provoziere mal in der TimeLib einen compile Fehler oder
> warning.

Ja, als ich das erste mal importiert habe endeckte der Compiler ja die 
"millis()" Funktion als fehler, nach dem ich millis() in STM32 
nachgebaut hab ging es.

von Nebel Stocher (Gast)


Lesenswert?

Johnny S. schrieb:
> Wo mache ich hier den Fehler?

Du wirst schon angeben müssen um welche Lib es sich handelt.

Grunsätzlich bauen viele Arduino Libs auf das existerende
Arduino Basis-Gerüst auf, lassen sich also nicht ohne weiteres
standalone benutzen.

Aber wenn du schon anfängst

Johnny S. schrieb:
> Grundsätzlich funktioniert der Compiler

den Compiler in Zweifel zu ziehen, wo doch Coocox keinen
Compiler hat, dann ist der Weg weit ....

von Johnny S. (sgt_johnny)


Angehängte Dateien:

Lesenswert?

Nebel Stocher schrieb:
> Johnny S. schrieb:
>> Wo mache ich hier den Fehler?
>
> Du wirst schon angeben müssen um welche Lib es sich handelt.
>
> Grunsätzlich bauen viele Arduino Libs auf das existerende
> Arduino Basis-Gerüst auf, lassen sich also nicht ohne weiteres
> standalone benutzen.
>
> Aber wenn du schon anfängst
>
> Johnny S. schrieb:
>> Grundsätzlich funktioniert der Compiler
>
> den Compiler in Zweifel zu ziehen, wo doch Coocox keinen
> Compiler hat, dann ist der Weg weit ....

Es handelt sich um die Lib "TimeLib"

In dieser Library gibt es etwa 10 Zeilen welche arduino-spezifisch sind, 
der Rest ist eigentlich nur Rechnerei :)

Anbei mein Projekt inkl modifizierter Lib falls es jemand ansehen 
möchte.

von Nebel Stocher (Gast)


Lesenswert?

Johnny S. schrieb:
> In dieser Library gibt es etwa 10 Zeilen welche arduino-spezifisch sind,
> der Rest ist eigentlich nur Rechnerei :)

Aha!

//#if ARDUINO >= 100
//#include <Arduino.h>
//#else
//#include <WProgram.h>
//#endif

Du meinst also wenn man Includes einfach weglässt dann wird's
schon irgendwie funktionieren?

Nebel Stocher schrieb:
> Grunsätzlich bauen viele Arduino Libs auf das existerende
> Arduino Basis-Gerüst auf, lassen sich also nicht ohne weiteres
> standalone benutzen.

von Johnny S. (sgt_johnny)


Lesenswert?

Nebel Stocher schrieb:
> Johnny S. schrieb:
>> In dieser Library gibt es etwa 10 Zeilen welche arduino-spezifisch sind,
>> der Rest ist eigentlich nur Rechnerei :)
>
> Aha!
>
> //#if ARDUINO >= 100
> //#include <Arduino.h>
> //#else
> //#include <WProgram.h>
> //#endif
>
> Du meinst also wenn man Includes einfach weglässt dann wird's
> schon irgendwie funktionieren?
>
> Nebel Stocher schrieb:
>> Grunsätzlich bauen viele Arduino Libs auf das existerende
>> Arduino Basis-Gerüst auf, lassen sich also nicht ohne weiteres
>> standalone benutzen.

Arduino.h wird nur benötigt um die Funktion "Millis()" aufzurufen, 
welche Arduino spezifisch ist. Wie bereits geschrieben habe diese auch 
nachgebildet.
Dar Problem ist doch ganz ein anderes!

Das STM32 Programm sieht die funktion "int second()" nicht!

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.