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
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.
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. :-)
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.
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.
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?
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?
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?
Hallo, ne, jetzt kommt nichts mehr. :-) Soweit ist alles klar. Ich binde die stdio.h jetzt auch gleich am Anfang ein. Damit ist das zentral, man sieht es immer und kann nichts vergessen. Danke.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.



