Sto valutando i sistemi operativi da utilizzare in un progetto Internet of Things e non so quale sia il modo migliore di procedere.
Sto usando un MCU TM4C123GH6PM con 32k RAM e un ricetrasmettitore CC2520 802.15.4, sarebbe bello se il sistema già fornito driver per quelli.
Il sistema eseguirà un'attività (interattiva) che disegna una schermata dotmatrix e reagisce all'input dell'utente. Memorizzerà i dati di configurazione e delle applicazioni su spi flash. Ci sarà una rete di più moduli (basati su 802.15.4) per sincronizzare i dati tra i moduli, estrarre i dati dei sensori dai moduli e inoltrarli a un gateway (rpl viene in mente) e distribuire anche gli aggiornamenti del firmware OtA in un gossip- come la moda. Tutto mentre si esegue anche un'applicazione piuttosto affamata di memoria.
Finora ho esaminato questi sistemi:
RIOT :
professionisti
- buona astrazione hardware
- piccola impronta
- comunità molto attiva e utile
- stack 802.15.4 / 6LoWPAN completo
cons
- instabile, ancora soggetto a cambiamenti fondamentali
- contiene ancora condizioni di gara / incidenti
- nessun supporto per filesystem
- alcuni protocolli di rete
Contiki :
professionisti
- sistema maturo, utilizzato nei prodotti commerciali
- stack 802.15.4 / 6LoWPAN completo con molti protocolli utili
- supporto del file system
- supporto cc2520
cons
- lo sviluppo è diventato stantio
- base di codice "cresciuta", molto marcio bit
- porta tiva c di cattiva qualità
- scarso supporto per piattaforme moderne
- la pianificazione non preventiva potrebbe causare problemi con l'applicazione
FreeRTOS :
professionisti
- poca complessità aggiuntiva
- programmatore facile da usare e affidabile
- progetto maturo, utilizzato in molti prodotti
- molte porte
cons
- nessun file system
- nessuna astrazione hardware per driver / nessun driver hardware
- nessuno stack di rete
- uso piuttosto elevato della memoria dinamica
NuttX :
professionisti
- molto ricco di funzionalità, sembra quasi Linux, ma ancora piccolo
- supporto del file system
- buona astrazione hardware
- Porta Tiva C, molte altre porte
cons
- piuttosto complesso
- nessun supporto per 802.15.4 / 6LoWPAN, solo netstack 'classico'
La mia conclusione sarebbe quella di prendere le parti buone di Contiki (il netstack, il file system) e portarle su FreeRTOS. Ma non mi sento completamente a mio agio con una forchetta del genere. Probabilmente aggiungerei errori e non sarei in grado di eseguire il backport delle correzioni a monte, inoltre devo ancora inventare la mia astrazione hardware per poter cambiare l'MCU in futuro. Quindi finirei con il mio sistema operativo per qualcosa che sembra un problema che dovrebbe avere anche molte altre persone - qualcuno non l'ha mai fatto prima? (Voglio dire, ho trovato qualcosa, ma l'idea di eseguire l'intero contiki-os come attività FreeRTOS mi mette a disagio)
C'è qualcosa che mi manca? Forse ne varrebbe la pena e dovrei provare a riportare Contiki su uno stato funzionale sul mio hardware? O c'è un altro sistema che mi è sfuggito che potrebbe risolvere i miei problemi?
Inoltre non sono sicuro di aver bisogno di 6lowPan, ma quando ciò significa essere in grado di basarsi su protocolli esistenti / essere compatibile con altri sistemi (ad esempio Linux), sarei disposto a prendere l'overhead aggiuntivo.
running the entire contiki-os as a FreeRTOS task makes me uncomfortable
Questo è solo .. wow! Non ci avrei mai pensato ...