FreeRTOS e progetto multiFile in Arduino

Ciao a tutti,

sto lavorando ad un progettino con arduino e sto utilizzando freeRtos. Per far questo sto sviluppando con l’ausilio di visualStudioCode in ubuntu 18.04 64bit.

Vorrei concepire il progetto in maniera modulare come normali programmi in C. Mi spiedo meglio, vorrei fare in modo che ci sia un file main e che da questo posso richiamare altri file c o cpp in cui settorizzo quello che deve fare il sistema.

Per fare un esempio, ho creato un file main.ino in cui ho incluso FreeRtos e creato i task di lavoro, in particolare il task void TaskTastiera( void *pvParameters)

Questo fa riferimento alla gestione di un tastierino alfanumerico che vorrei fare in un file C a parte in modo da poterla esportare poi più facilmente da un programma ad un altro.

Cosi ho creato un file tastiera.c dove ho posizionato la definizione completa del task e di quello che deve fare

void TaskTastiera( void *pvParameters attribute((unused)) ) {

ecc…
ecc…

}

però il file .c non mi viene compilato. Tutto funziona correttamente solo se rinomino il file come tastiera.ino e non come tastiera.c.

E’ normale questa cosa? Dipende da VScode e dall’estenzione microsoft per arduino?

Conoscete altre strade differenti che possano semplificarmi la vita?

Grazie mille. Valerio

Vorrei concepire il progetto in maniera modulare come normali programmi in C. Mi spiedo meglio, vorrei fare in modo che ci sia un file main e che da questo posso richiamare altri file c o cpp in cui settorizzo quello che deve fare il sistema.

Serve in questo caso creare un progetto VSC come libreria statica, i file che deve compilare sono da copiare dalla directory
arduino-1.8.10-linux64/arduino-1.8.10/hardware/arduino/avr/cores. Dovrai anche passare gli argomenti e le define corrette al compilatore. In sostanza devi conoscere bene VSC. Terminata la compilazione del progetto VSC (chiamiamolo Core) sarà prodotto un file di libreria statica libCore.a. Attenzione che il quel path manca il file header pins_arduino.h da prendere da arduino-1.8.10-linux64/arduino-1.8.10/hardware/arduino/avr/variants/standard e questo vale per la board uno, per le altre board vedi la directory variants.

Ora puoi creare l'altro progetto VSC per produrre un eseguibile anziché una libreria e dovrai specificare di fare il collegamento statico con la libreria libCore.a

Se oltre al Core lib usi altre librerie per ognuna devi fare ciò che hai fatto per il core, cioè creare un libNameLibrary.a.

Ciao.

nid69ita:
E’ l’IDE di Arduino (che VScode richiama di sotto) che compila in maniera particolare i sorgenti.
Il file .ino è come se fosse un .cpp, se presenti <nome.h> vengono interpretati come “librerie” e quindi il codice .h ed il resto della lib viene compilato (sorgenti cercati in cartella libraries +nome)
Nel IDE di solito si usa dividere il codice nelle “linguette” (tabs) ma è una cosa di Arduino IDE. Il quale purtroppo non ha un file “progetto” o make

https://www.enricodalbosco.it/giochi/tubolario/

velvettiere:
Il Tubolario

tutt’altro, la cosa ha un ordine e uno scopo precisi

Maurotec:
Serve in questo caso creare un progetto VSC come libreria statica, i file che deve compilare sono da copiare dalla directory
arduino-1.8.10-linux64/arduino-1.8.10/hardware/arduino/avr/cores. Dovrai anche passare gli argomenti e le define corrette al compilatore. In sostanza devi conoscere bene VSC. Terminata la compilazione del progetto VSC (chiamiamolo Core) sarà prodotto un file di libreria statica libCore.a. Attenzione che il quel path manca il file header pins_arduino.h da prendere da arduino-1.8.10-linux64/arduino-1.8.10/hardware/arduino/avr/variants/standard e questo vale per la board uno, per le altre board vedi la directory variants.

Ora puoi creare l’altro progetto VSC per produrre un eseguibile anziché una libreria e dovrai specificare di fare il collegamento statico con la libreria libCore.a

Se oltre al Core lib usi altre librerie per ognuna devi fare ciò che hai fatto per il core, cioè creare un libNameLibrary.a.

Ciao.

Grazie, ho letto e capito i passaggi che non sono banali ahimè.

Potresti darmi delle dritte operative?

Grazie ancora. Valerio.

Non conosco VSC, se lo conosci tu e sai creare un progetto libreria che usa il compilatore avr-gcc si può procedere a compilare il core, poi ti passo gli argomenti e le define, che comunque compaiono nell'ide arduino durante il build.

Ciao.