Forum: Mikrocontroller und Digitale Elektronik Coocox Compiler Probleme


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Johnny S. (sgt_johnny)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.