Perché un file `.ino` deve trovarsi in una cartella con lo stesso nome?


12

Sto cercando di organizzare un progetto molto complicato e voglio mettere tutto il codice attuale in una cartella denominata src(sorgente), ma voglio mantenere il .inofile principale come main.ino(lo sarà anche src). Quindi, quando provo ad aprire il codice, l'IDE dice che main.inodeve trovarsi in una cartella denominata main.

Perchè è questo?

Comprendo appieno il messaggio di errore, ma perché la denominazione dei file in Arduino deve essere così. C'è un modo di cambiarlo?

Risposte:


6

AFAIK, ovvero una stranezza integrata nell'IDE di Arduino. La migliore soluzione che mi viene in mente è una struttura di file simile a:

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

, dove myproj.cpp è solo #includemain.cpp. Ciò dovrebbe lasciare i file del progetto "puliti" in modo che possano funzionare anche in un ambiente più tipico.

Aggiornare:

Ho preso in prestito il nome "main" dalla tua domanda, ma a proposito, "main" è un nome riservato, in particolare, ogni programma C o C ++ ha un main.c o main.cpp come codice di livello superiore, fornito dal sistema se tu non ne fornisci uno. Quindi ho evitato di usarlo come nome della cartella e del progetto (ma sentitevi liberi di provarlo) e ho aggiornato il diagramma. Ciò di cui hai bisogno è una cartella di progetto e un file .ino al suo interno, con lo stesso nome. Il file .ino potrebbe

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

, ad esempio, il tuo file di codice di livello superiore, estraendo così tutto il resto. Potresti aver bisogno del tuo .ino per #includeciascuno dei file nella srccartella, se il compilatore non riesce a capire da solo, è lì che si trovano gli altri tuoi file.

A proposito, se usi il nome main.cpp per il tuo file principale, dovrà chiamare le funzioni setup () e loop () (e la funzione evento seriale, se lo usi). Probabilmente è meglio lasciare da solo il nome 'main', lasciare che il sistema fornisca lo stesso main che ogni programma Arduino ottiene di default e scrivere il codice del progetto nel modo tipico di Arduino - iniziando con setup () e loop ().


myproj.cppintendi myproj.ino? Perché non vedo dove myproj.cppsia!
Dat Ha,

Ok, piccolo problema, se lo faccio, alcune funzioni di base di Arduino (come map () e analogRead ()) che sono contenute in sensor.cpp non verranno riconosciute dal compilatore.
Dat Ha,

In alternativa, se si lavora su una finestra di Windows, utilizzare il comando junction e "collegare" una directory con il nome corretto alla directory con il nome migliore. Oppure, se si lavora su un box Linux, utilizzare il comando simbolico link per fare lo stesso.
st2000,

(Vedi il mio aggiornamento - il tuo file .ino potrebbe dover includere ciascuno degli altri file).
JRobert,

3

Quando hai un progetto composto da un numero di .INOfile, come dovrebbe l'IDE sapere qual è il "principale"? Durante la compilazione l'IDE concatena tutti i .INOfile in un unico file monolitico. Lo fa a partire da quello "principale" e quindi aggiunge ciascuno degli altri in ordine alfabetico alla fine.

Viene fatto in questo modo in modo che le tue inclusioni e variabili globali, che dovresti inserire nel tuo .INOfile "principale" , siano all'inizio del programma finito.

Per fare ciò, l'IDE deve sapere quale dei file è "principale". E il modo in cui funziona è trovare quello che ha lo stesso nome della cartella in cui si trova lo schizzo.

In UECIDE faccio un ulteriore passo avanti e trasformo l'intera cartella in un documento composto in modo da non dover più inserire una cartella e aprire un .INOfile per aprire uno schizzo: la cartella vera e propria è l'intero progetto di schizzo. Ancora una volta, questo tipo di cartella viene identificato come .INOcontenente un file che ha lo stesso nome della cartella.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.