Library in AS einbinden verursacht Fehler

OP #4631259
Lesenswert?
• ▲
▼
Hallo,

die Lib funktioniert mit einem Arduino und dessen IDE wunderbar. Ohne 
jede Warnung.

Jetzt programmiere ich in Atmel Studio 7 jedoch einen ATtiny841 direkt.
Dazu habe ich die Lib scheinbar schon erfolgreich einbinden können.
Ich weis aber nicht wirklich aus welchem Ordner er sie sich wirklich 
holt.
Aus dem übergeordneten Workspace Ordner oder darin aus dem Projekt 
Ordner.
Ich hatte viel probiert und war einfach nur erstmal glücklich das er sie 
überhaupt findet und nicht meckert das er sie nicht findet.

Jetzt erhalte ich allerdings einfach beim nackten kompilieren schon 
Fehlermeldungen die seltsam sind für mich.

Weil zum Bsp.

'NULL' was not declared in this scope

Null ist doch C Standard?

Was läuft schief? Was wie muß ich ändern?

Entfernt habe ich die Zeile
#include <Arduino.h>
und habe byte durch uint8_t ersetzt
Gast #4631277
Lesenswert?
• ▲
▼
Veit D. schrieb:
> 'NULL' was not declared in this scope
>
> Null ist doch C Standard?

Nö. Nur bei C++.
Ein #include <stdio.h> würde wiederum libio.h mit einbinden, in der NULL 
als Makro angelegt wäre...

Für size_t bräuchtest Du auch einen passenden Header oder Du machst 
einfach einen (unsigned) int oder char draus - je nachdem was Du lieber 
magst...

Weitere brauchbare Fehlermeldungen gehen aus Deinem Screenshot leider 
nicht hervor.


Veit D. schrieb:
> und habe byte durch uint8_t ersetzt

Dafür musst Du aber auch stdint.h inkludieren.
Gast #4631292
Lesenswert?
• ▲
▼
Arduino ist, wenn ich mich nicht irre, C++.

Mit dem AVRStudio kannst Du aber sowohl C als auch C++ schreiben.
Das musst Du erstmal entscheiden. Es hängt auch davon ab, ob die libm, 
die Du da hast, in C++ geschrieben ist oder in C. Hast Du die vielleicht 
von dem Arduino übernommen?

OK. So weit so gut.

Ich weiß nicht eigentlich wo man sinnvoll beginnt, aber als erstes würde 
ich das offensichtliche fixen.
1. Include "stdtypes.h" für uint8_t in C oder <cstdint> für C++
2. Dein Compiler geht irgendwie von C aus, denn NULL ist wie schon 
geschrieben in C++ schon "eingebaut".
3. Die Unklarheit wegen der Herkunft der libm würde ich wenigstens 
verringern, in dem ich nur an einer Stelle, entweder C oder C++ den Pfad 
angebe und dort auch nur einen Pfad.

Dann sieht man mal weiter. Ich vermute, da ist noch einiges zu tun bei 
der Benutzer-Migration. :-)
Gast #4631299
Lesenswert?
• ▲
▼
Wie ich gerade sehe, geht eine andere Fehlermeldung (die dritte von oben 
in dem ersten Bild) von C++ aus. Vermutlich wegen der Extension. 
Irgendwas ist da schief gelaufen.
Vielleicht nochmal ein neues Projekt anlegen.
Vor allem aber für eine C-Variante entscheiden. Nach dem vorhandenen 
Code wäre wohl C++ richtig. Für die Lernkurve aber C.
OP #4631309
Lesenswert?
• ▲
▼
Hallo,

okay, Danke erstmal.
Wäre es nicht schlau C++ zu nehmen?
C ist doch in C++ enthalten. Oder nicht?

Und ja Arduino unterstützt C++ 11. Ist in dessen Compilerkonfig 
standardmäßig so eingestellt. Der Compiler ist ja der gleiche wie in 
Atmel Studio. Das nebenbei.

Wenn ich ein neues C++ Projekt erstelle, ist die libm immer da im 
Solution Explorer. Ist nicht von mir eingefügt.
OP #4631332
Lesenswert?
• ▲
▼
Hallo,

habe nochmal ein neues C++ Projekt erstellt und

#include <stdio.h>

jeweils in der RS485.. .h geschrieben oder in den Programmcode.
Scheinbar egal wo das eingebunden wird.
Komiliere ich es erscheint erstmal kein Fehler.
Vielen Dank für den Hinweis.  :-)

Achso. Und ich habe den Lib Ordner in dem Toolchain jetzt nur beim C++ 
Compiler als absoluten Pfad angegeben. Vielleicht auch wichtig.
Mal sehen ob das fehlerfrei bleibt.

An welcher Stelle würdet ihr <stdio.h> includieren?
Gast #4631503
Lesenswert?
• ▲
▼
Veit D. schrieb:
> Hallo,
>
> habe nochmal ein neues C++ Projekt erstellt und
>
> #include <stdio.h>
>
> jeweils in der RS485.. .h geschrieben oder in den Programmcode.
> Scheinbar egal wo das eingebunden wird.
Bei einem include-File scheint das egal zu sein.
Wenn Du mehrere include-Files hast, die jeweils stdio.h benötigen, ist 
es von Vorteil, stdio.h vor allen anderen Files zu includen, damit Du 
es nicht in jedem der einzelnen Files wiederholt hinschreiben musst.
Da es oft am Anfang nicht völlig klar ist, welche und wieviele weitere 
Include-Dateien zum Projekt hinzukommen ist es günstiger gleich so zu 
beginnen.
Darüber gibt es Kontroversen, aber ich neige zu diesem Weg.

> [...]
> Vielen Dank für den Hinweis.  :-)
Bitteschön.

> Achso. Und ich habe den Lib Ordner in dem Toolchain jetzt nur beim C++
> Compiler als absoluten Pfad angegeben. Vielleicht auch wichtig.
> Mal sehen ob das fehlerfrei bleibt.
Daran darf es nicht liegen. Es gibt bei den meisten Compilern einen 
Standard-Include-Pfad, in denen die C- bzw. C++-Standard-Files liegen.
Dann gibt es, soviele weitere Include-Files wie absolut nötig sind. Bei 
einer Datei also höchstens einen weiteren Pfad.


> An welcher Stelle würdet ihr <stdio.h> includieren?

Äh. Hat mein Text oben in diesem Beitrag die Frage schon beantwortet? 
Falls nicht: Könntest Du bitte die Frage etwas ausführlicher stellen?
Gast #4631509
Lesenswert?
• ▲
▼
Veit D. schrieb:
> Hallo,
>
> okay, Danke erstmal.
> Wäre es nicht schlau C++ zu nehmen?
> C ist doch in C++ enthalten. Oder nicht?
Nein. Nicht so wie Du es ausdrückst. Die NULL z.B. ist ein Unterschied. 
Die Include-Files heissen anders. Mal ganz abgesehen von der 
Objektorientierung.
Es gib sicher unter "C C++ Unterschiede" einige Artikel im Netz, die C 
und C++ vergleichen. Vermutlich gibt es auch Artikel die beschreiben, 
was Arduino alles zu C++ hinzufügt, um das Programmieren für Laien 
einfacher zu machen. Das ist eben das, was Du jetzt lernst.

>
> [...]
>
> Wenn ich ein neues C++ Projekt erstelle, ist die libm immer da im
> Solution Explorer. Ist nicht von mir eingefügt.

Nun, die von Dir monierten Fehler beziehen sich ja auch nicht auf die 
libm. Damit sollte das Thema erstmal erledigt sein. Oder kommt doch noch 
was?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren