Cosa dovrei sapere quando faccio una libreria per Arduino?


8

Mi viene in mente che, al di là del mio attuale problema, dovrei chiedere: "Cosa dovrei sapere quando faccio una biblioteca per l'Arduino?"

Innanzitutto, cosa sto facendo:

Sto usando Eclipse come mio editor e sto scrivendo codice in C ++. Ho scritto una semplice applicazione Arduino che include il mio file di intestazione e sto lavorando attraverso errori.

Primo problema: come posso fare un 'build clean'? Sto vedendo errori che penso di aver corretto, quasi come se il file di intestazione fosse memorizzato nella cache. (Sì, molto probabilmente sto facendo qualcosa di stupido [ modifica : lo ero], ma mi piacerebbe comunque sapere come pulire la libreria e non sapere dove siano i file degli oggetti).

Secondo: quali convenzioni dovrei conoscere? Non ho usato Arduino quanto mi piacerebbe, ed è bello programmare in C ++, ma so che l'intento delle librerie è di mantenere le cose belle e semplici per gli utenti. Esistono convenzioni per i nomi delle funzioni? Creazione di costanti (sembra che lo spazio dei nomi globale sia inquinato da #define)? E così via.

Infine, c'è qualcos'altro che dovrei sapere?

Devo dire che ho visto il tutorial della libreria Arduino , che è buono, ma non va molto lontano. Ho anche dato un'occhiata ad alcune delle librerie installate sul mio sistema.


1
Hai provato l'IDE di Arduino e ti sei arreso? So che, dato il set di funzionalità generali per la produttività e la programmazione da parte di Eclipse-IDE, Arduino-IDE è fuori di testa. Tuttavia, in questa situazione, se non hai provato Arduino-IDE, ti potrebbe piacere farlo. Mentre lo trovo lento, ma la ricompilazione esplicita funziona, proprio come dovrebbero.
Icarus74,

Risposte:


3

Prenderò un colpo. Non ho scritto codice per Arduino, ma ho fatto molta programmazione in C e C ++. Sarebbe utile se vedessi davvero i tuoi errori, ma comunque.

La cosa principale che devi sempre ricordare quando usi C ++ con il codice C è che il tuo codice C ++ ha bisogno di funzioni dichiarate con "extern" C "" se vuoi che il codice C sia in grado di collegarsi al codice C ++. "Extern" C "" è ciò che dice al compilatore C ++ che sto creando codice collegabile per file C o sto usando codice da file C. Quindi tutte le funzioni nell'intestazione dell'API della libreria dovrebbero essere correlate a una funzione nel file di origine definita come "extern" C "void dosomething ()". Se stai provando a usare le classi in C ++, ricorda che il codice C non può chiamarlo, dovrai creare funzioni (extern "C") per accedere all'oggetto. Ora, se il tuo codice C viene compilato con un compilatore C ++, non preoccuparti di "extern" C "".

Se vuoi chiamare il codice C all'interno del tuo codice C ++, devi avvolgere l'intestazione C con un costrutto come questo:

#ifdef ___cplusplus
extern "C" {
#endif

///all my C function declarations... yada yada

#ifdef __cplusplus
}  //end extern "C"
#endif

Se lavori in C ++, non usare molto #define a meno che tu non stia creando flag in fase di compilazione come "DEBUG" o "VERSION2" per creare speciali set di codice. Altrimenti usa "const int / char / float" per definire il numero per un controllo sicuro del tipo. I compilatori sono in genere abbastanza intelligenti da ottimizzarli, quindi finiscono nello spazio ROM / codice (dipende però). Inoltre, non creare MACROS, utilizzare le funzioni incorporate. Inoltre, non seguire sempre le convenzioni durante la programmazione se è stupido come usare molte macro e il numero definisce in C ++. La stessa cosa vale per la versione C99 di C, ha aggiunto cose come le funzioni in linea e i cons di C ++. L'industria si rende conto della quantità di codice errato e di codice difficile da gestire derivante dall'uso eccessivo del linguaggio del preprocessore.

Eclipse di solito memorizza i file obj in una directory all'interno del progetto. Se stai eseguendo una build "Debug", si trova nella cartella "Debug" nella cartella del progetto. Se stai eseguendo una build "Release", guarda sotto "Release", ecc. Normalmente una build pulita funziona solo per me in Eclipse, quindi non so cosa non va nella tua configurazione. Immagino che non stai creando intestazioni precompilate.

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.