Warum muss sich eine .ino-Datei in einem gleichnamigen Ordner befinden?

12

Ich versuche, ein sehr kompliziertes Projekt zu organisieren, und ich möchte den gesamten eigentlichen Code in einem Ordner mit dem Namen src(Quelle) ablegen , aber ich möchte die Hauptdatei .inobeibehalten main.ino(sie wird auch in sein src). Wenn ich dann versuche, den Code zu öffnen, sagt die IDE, dass main.inoer sich in einem Ordner mit dem Namen befinden muss main.

Warum ist das?

Ich verstehe die Fehlermeldung vollständig, aber warum muss die Dateiname in Arduino so sein? Gibt es eine Möglichkeit, das zu ändern?

Dat Ha
quelle

Antworten:

6

AFAIK, das ist eine Eigenart, die in die Arduino IDE eingebaut ist. Die beste Problemumgehung, die ich mir vorstellen kann, ist eine Dateistruktur wie:

ArduinoWorkspace --- /myproj/ ----+ /src/ --------+ myproj.cpp
                                  + myproj.ino    + sensor.h
                                                  + sensor.cpp
                                                  + (more files)

, wo myproj.cpp nur main.cpp ist #include. Dadurch sollten Ihre Projektdateien "sauber" bleiben, sodass sie auch in einer typischeren Umgebung funktionieren.

Aktualisieren:

Ich habe den Namen "main" aus Ihrer Frage ausgeliehen, aber "main" ist ein reservierter Name. Insbesondere hat jedes C- oder C ++ - Programm eine main.c- oder main.cpp-Datei als obersten Code, die vom System bereitgestellt wird, wenn Sie bieten keine. Daher habe ich es vermieden, dies als Ordner- und Projektname zu verwenden (aber probieren Sie es einfach aus), und ich habe das Diagramm aktualisiert. Was Sie brauchen, ist ein Projektordner und eine darin enthaltene .ino-Datei mit demselben Namen. Die .ino-Datei könnte

#include <src/anything-else-you-like>

B. Ihre Code-Datei der obersten Ebene, wodurch alles andere abgerufen wird. Möglicherweise benötigen Sie für Ihre .ino-Datei #includejede Datei im srcOrdner. Wenn der Compiler dies nicht selbst herausfindet, befinden sich dort Ihre anderen Dateien.

Übrigens, wenn Sie den Namen main.cpp für Ihre Top-Datei verwenden, müssen die Funktionen setup () und loop () (und die Funktion für serielle Ereignisse, wenn Sie diese verwenden) aufgerufen werden. Es ist wahrscheinlich am besten, den Namen 'main' in Ruhe zu lassen, das System die gleiche Hauptleitung bereitstellen zu lassen, die jedes Arduino-Programm standardmäßig erhält, und Ihren Projektcode auf die typische Arduino-Weise zu schreiben - beginnend mit setup () und loop ().

JRobert
quelle
myproj.cppmeinst myproj.inodu Weil ich nicht sehe wo myproj.cppist!
Dat Ha
Ok, kleines Problem, wenn ich das mache, werden einige grundlegende Arduino-Funktionen (wie map () und analogRead ()), die in sensor.cpp enthalten sind, vom Compiler nicht erkannt.
Dat Ha
Wenn Sie an einer Windows-Box arbeiten, verwenden Sie alternativ den Befehl junction und "verknüpfen" Sie ein Verzeichnis mit korrektem Namen mit dem Verzeichnis mit dem besseren Namen. Wenn Sie an einer Linux-Box arbeiten, verwenden Sie den Befehl symbolic link, um dasselbe zu tun.
st2000
(Siehe mein Update - Ihre .ino-Datei muss möglicherweise jede der anderen Dateien enthalten.)
JRobert
3

Wenn Sie ein Projekt haben, das aus mehreren .INODateien besteht, wie soll die IDE wissen, welche die "Haupt" ist? Während der Kompilierung verkettet die IDE alle .INODateien zu einer monolithischen Datei. Dies geschieht beginnend mit dem "Haupt" und hängt dann jedes der anderen alphabetisch an das Ende an.

Dies geschieht auf diese Weise, sodass Ihre Includes und globalen Variablen, die Sie in Ihre "Haupt" .INO-Datei einfügen sollten, am Anfang des fertigen Programms stehen.

Dazu muss die IDE wissen, welche der Dateien die "Hauptdatei" ist. Und das funktioniert so, indem Sie den finden, der den gleichen Namen hat wie der Ordner, in dem sich die Skizze befindet.

In UECIDE gehe ich noch einen Schritt weiter und verwandle den gesamten Ordner in ein zusammengesetztes Dokument, sodass Sie keinen Ordner mehr eingeben und eine .INODatei öffnen müssen, um eine Skizze zu öffnen - der eigentliche Ordner selbst ist das gesamte Skizzenprojekt. Wiederum wird in dieser Art von Ordner eine .INODatei identifiziert , die den gleichen Namen wie der Ordner hat.

Majenko
quelle