Come scegliere gli RTOS e la piattaforma basata su microcontroller giusti per IoT
Contributo di Editori nordamericani di DigiKey
2019-06-12
Lo sviluppo di un dispositivo per Internet delle cose (IoT) può essere più arduo di quanto appaia a molti sviluppatori o aziende. La semplice azione di collegare un sistema embedded al cloud aumenta enormemente la complessità della temporizzazione del sistema. Di conseguenza, gli sviluppatori devono trovare un modo migliore per gestire al meglio come il loro software deciderà quando e quale codice eseguire. La soluzione più valida per evitare di scrivere scheduler personalizzati o di rimanere invischiati nella gestione basica della temporizzazione è quella di utilizzare un sistema operativo in tempo reale (RTOS) per risolvere le complessità della temporizzazione.
Molti sviluppatori provengono però da un ambiente "bare-metal" che non prevede un sistema operativo (SO) e scegliere l'RTOS giusto per una determinata applicazione può essere impegnativo. Se si facesse un rapido sondaggio online sul mercato degli RTOS si scoprirebbe che sono oltre 100 quelli a disposizione degli sviluppatori, fra open-source e RTOS commerciali certificati. Con che criteri operare quindi una scelta e mettersi al lavoro?
In questo articolo, vedremo come valutare qual è l'RTOS migliore per una determinata applicazione e prenderemo in esame le piattaforme di sviluppo di STMicroelectronics e Renesas per muovere i primi passi.
Fattori da considerare nella selezione di un RTOS
I sistemi operativi in tempo reale rappresentano la base su cui gli sviluppatori creano il codice applicativo. Per avere la certezza che un'applicazione poggi su basi solide e collaudate, è fondamentale scegliere l'RTOS giusto. Spesso invece questa scelta vien fatta sulla base di un unico parametro: il costo.
Il costo è un fattore importante da valutare, ma non dovrebbe essere l'unico. Un team di sviluppo potrebbe facilmente finire per spendere dieci volte il costo di un RTOS commerciale se poi ha difficoltà con il porting, l'implementazione o il supporto per l'RTOS scelto, per non parlare del tempo sprecato in un progetto. In linea di massima, sono otto le categorie che un team di sviluppo dovrebbe considerare quando sceglie un RTOS per una data applicazione. Si tratta di:
- Responsabilità legale ed esposizione
- Prestazioni
- Caratteristiche
- Costo
- Ecosistema
- Middleware
- Fornitore dell'RTOS
- Preferenze ingegneristiche
All'interno di ogni categoria potrebbero esserci diversi criteri da valutare per ogni RTOS. Ad esempio, nella categoria della responsabilità legale, i team dovrebbero considerare quanto segue:
- Responsabilità per violazione dell'RTOS
- Indennizzo
- Garanzia
- La necessità di far controllare l'RTOS da un punto di vista legale
Nella categoria delle prestazioni, gli sviluppatori potrebbero considerare quanto segue:
- Ingombro della memoria eseguibile
- Ingombro della RAM
- Massimo grado di determinismo
- Efficienza di runtime
Ogni categoria principale può essere esaminata dal team di sviluppo ed esecutivo per stabilire i criteri di valutazione degli RTOS. Una volta definiti i criteri, è possibile valutare più RTOS diversi utilizzando una matrice di Kepner-Tregoe (KT). Si tratta di un modello razionale per il processo decisionale che aiuta a raccogliere, assegnare le priorità e valutare le informazioni, prestando una particolare attenzione alla valutazione e alla prioritizzazione del rischio. Elimina dal processo decisionale i pregiudizi personali e aiuta ad arrivare alla migliore scelta possibile, minimizzando eventuali conseguenze negative. Esaminiamo come si può utilizzare una matrice di KT per selezionare un RTOS.
Utilizzo di una matrice di KT per scegliere un RTOS
La matrice di KT per la scelta dell'RTOS può essere configurata come mostrato nella Figura 1 e nella Figura 2. L'idea è quella di identificare i criteri di selezione per ogni categoria e di elencarli in un'unica colonna. Possiamo identificare un peso per ogni criterio che ne valuta l'importanza su una scala da 1 a 5, dove 5 indica un'importanza critica (ad esempio, i costi) e 1 la più trascurabile (ad esempio, la responsabilità legale). Per ogni membro del team si possono poi creare delle colonne per classificare l'importanza di ogni criterio per ogni RTOS preso in esame. Ogni criterio può quindi essere ponderato e sommato e verrà generato un risultato numerico imparziale. L'RTOS con il valore più alto è quello che risponde meglio ai criteri.
Figura 1: Metà superiore della matrice di KT di selezione dell'RTOS. Include la valutazione dell'esposizione in termini di responsabilità, le prestazioni dell'RTOS, le caratteristiche e i costi. (Immagine per gentile concessione di Beningo Embedded Group)
Figura 2: Metà inferiore della matrice di KT di selezione dell'RTOS, che include la valutazione dell'ecosistema, il middleware, il fornitore e il business. (Immagine per gentile concessione di Beningo Embedded Group)
Negli esempi mostrati nelle Figure 1 e 2 il numero di criteri valutati è piuttosto elevato. Probabilmente va oltre ciò che la maggior parte dei team di sviluppo sarebbero interessati a valutare, ma alcuni fattori possono essere facilmente esclusi impostando il peso su 0 o nascondendo la riga nel foglio di calcolo.
Piattaforme da cui lanciare lo sviluppo di RTOS
Durante la valutazione di un RTOS, gli sviluppatori potrebbero incontrare delle difficoltà quando sono chiamati a determinare se soddisfa le loro esigenze di prestazioni e capacità. In molti casi non lo sapranno se non approfondiscono la valutazione e non si "sporcano le mani" usando l'RTOS. Un modo estremamente facile ed economico per valutare e testare un RTOS è quello di sfruttare una piattaforma di sviluppo esistente che ne fa uso. Vediamo alcune piattaforme che supportano i popolari sistemi operativi open source ThreadX di Express Logic e FreeRTOS.
La prima piattaforma di cui ci occuperemo è STM32Cube di STMicroelectronics. La piattaforma STM32Cube supporta FreeRTOS come parte degli ambienti di sviluppo STM32CubeMx e STM32CubeIDE di STMicroelectronics. Questi strumenti permettono a uno sviluppatore di abilitare FreeRTOS semplicemente spuntando la casella FreeRTOS e di usare poi uno strumento di configurazione FreeRTOS per impostare tutti i valori di configurazione al suo interno. Questo metodo permette di iniziare a lavorare molto rapidamente con FreeRTOS per poterne valutare le caratteristiche e le prestazioni.
All'interno della toolchain di STMicroelectronics ci sono diverse schede di sviluppo tra cui scegliere. Una di quelle più collaudate nel corso degli anni ed estremamente popolari è la scheda STM32F429 Discovery (STM32F429I-DISC1) (Figura 3).
STM32F429 è un processore Arm® Cortex®-M4 con velocità fino a 168 MHz. Il microcontroller supporta 2 MB di flash e 256 kB di SRAM, che rappresentano memorie sufficienti a contenere il codice e a sviluppare un'applicazione piuttosto avanzata. La scheda di sviluppo include anche un LCD, diversi LED e I/O espandibile.
Figura 3: STM32F429I Discovery è una scheda di sviluppo a basso costo che utilizza un processore Arm Cortex-M4 per fornire una potenza di elaborazione più che sufficiente per gli sviluppatori che desiderano valutare un RTOS. (Immagine per gentile concessione di STMicroelectronics)
Per chi lavora con dispositivi periferici IoT basati su RTOS che potrebbero dover eseguire anche l'apprendimento automatico, sarebbe più idonea la scheda STM32F7 Discovery (STM32F746G-DISCO) (Figura 4). La scheda STM32F7 Discovery è basata su un processore Arm Cortex-M7, che include una cache, funziona a velocità di clock fino a 216 MHz e ha 1 MB di flash e 340 kB di SRAM. La scheda di sviluppo include anche un display da 4,3 pollici di 480x272 pixel, Ethernet, slot SD, USB, collegamenti per microfono e altoparlanti, solo per citare alcune caratteristiche.
Figura 4: STM32F746G Discovery è una scheda di sviluppo a basso costo che utilizza un processore Arm Cortex-M7 per permettere agli sviluppatori di valutare non solo un RTOS ma anche qualsiasi interferenza all'apprendimento automatico previsto per il loro dispositivo periferico IoT. (Immagine per gentile concessione di STMicroelectronics)
Una scheda di sviluppo che dovrebbe essere presa in considerazione è la scheda Nucleo STM32L0 (NUCLEO-L073RZ) (Figura 5). La scheda Nucleo STM32L0 si basa su Arm Cortex-M0+, che è stato progettato per ridurre il più possibile il consumo energetico, ed è quindi perfetta per dispositivi periferici IoT a batteria a basso consumo. Il microcontroller STM32L0 funziona a velocità di clock fino a 24 MHz e include 192 kB di flash e 20 kB di SRAM. Si tratta di valori molti vicini alle caratteristiche minime che chiunque vorrebbe avere per eseguire un RTOS. La scheda di sviluppo è basica, con un solo interruttore utente e un LED.
Figura 5: La scheda di sviluppo NUCLEO-L073RZ STM32L0 si basa su un processore Arm Cortex-M0+ studiato per offrire alte prestazioni per dispositivi a basso consumo. (Immagine per gentile concessione di STMicroelectronics)
La seconda piattaforma che tratteremo è la piattaforma Synergy™ di Renesas. È unica nel settore embedded, in quanto viene fornita con un esteso software di terze parti e con strumenti di sviluppo di fornitori affermati.
Ad esempio, se qualcuno utilizzasse una scheda di sviluppo di STMicroelectronics e volesse usare l'RTOS ThreadX di Express Logic con l'ambiente di sviluppo e il compilatore Embedded Workbench di IAR Systems, dovrebbe rivolgersi a IAR per il compilatore e a Express Logic per l'RTOS, e acquistare le licenze d'uso. Se invece acquista solo un microcontroller che fa parte della piattaforma Synergy di Renesas, ottiene automaticamente questi strumenti e l'RTOS con cui lavorare, oltre ad altri middleware.
Per gli sviluppatori che vorrebbero testare ThreadX su un processore di fascia alta, la scheda di sviluppo Synergy SK-S7G2 di Renesas (YSSKS7G2E30) rappresenta un'ottima scelta (Figura 6). SK-S7G2 si basa su un processore Arm Cortex-M4 che funziona a 240 MHz e comprende 3 MB di flash e 640 kB di RAM. Questa scheda di sviluppo è già completa di LCD, numerosi LED, espansione I/O, CAN, espansione PMOD, facile accesso alle porte seriali e I/O aggiuntivo.
Figura 6: La scheda di sviluppo Synergy SK-S7G2 di Renesas è dotata di strumenti di sviluppo commerciali fra i quali RTOS ThreadX di Express Logic. (Immagine per gentile concessione di Renesas)
Una scheda di sviluppo alternativa utilizzabile per testare ThreadX è Synergy TB-S5D5 di Renesas (YSTBS5D5E10) (Figura 7). TB-S5D5 è una scheda di sviluppo a basso costo che include un processore Arm Cortex-M4 a 120 MHz con 1 MB di flash e 384 kB di SRAM. Per contenere il più possibile i costi, ha caratteristiche minime. Comprende un pulsante utente, un rilevamento tattile capacitivo e un LED.
Figura 7: La scheda di sviluppo Synergy TB-S5D5 di Renesas offre agli sviluppatori 1 MB di flash di codice e 384 kB di SRAM per testare ThreadX. (Immagine per gentile concessione di Renesas)
Altre opzioni interessanti per gli sviluppatori, specie se impegnati con applicazioni IoT, sono i Kit Synergy IoT AE-Cloud1 YSAECLOUD1 (Figura 8) e IoT AE-Cloud2 YSAECLOUD2 di Renesas (Figura 9).
Il Kit Synergy IoT Cloud1 fornisce agli sviluppatori la possibilità di connettersi al cloud tramite Wi-Fi, mentre Cloud2 Cellular permette la connessione anche attraverso una rete cellulare. Entrambe le schede di sviluppo sono basate sul processore S5D9 e includono sensori su scheda e LED che possono essere monitorati e controllati dal cloud. I kit sono inoltre forniti con un software preinstallato che include ThreadX e permette a uno sviluppatore di testare un'intera soluzione di connettività con il proprio RTOS. (Questa dotazione può aiutare a valutare la sezione middleware della matrice di KT discussa in precedenza.)
Figura 8: Il Kit Synergy IoT AE-Cloud1 di Renesas è una scheda di sviluppo pensata appositamente per i dispositivi IoT che si collegano al cloud tramite Wi-Fi. Include la possibilità di controllare i LED e monitorare i valori dei sensori da un provider cloud come Amazon Web Services (AWS) o Microsoft Azure. (Immagine per gentile concessione di Renesas)
Figura 9: Il Kit Synergy IoT AE-Cloud2 Cellular di Renesas è una scheda di sviluppo pensata appositamente per i dispositivi IoT che si collegano al cloud tramite Wi-Fi o cellulare. Include la possibilità di controllare i LED e monitorare i valori dei sensori da un provider cloud come AWS o Azure. (Immagine per gentile concessione di Renesas)
Una nota importante sulle piattaforme: quando si valuta un RTOS su una piattaforma, assicurarsi di eseguire un confronto fra cose paragonabili. Ad esempio, se si valuta FreeRTOS sulla scheda STM32F429 Discovery a 168 MHz, per valutare gli altri RTOS assicurarsi di utilizzare la stessa scheda di sviluppo o una che funziona alla stessa velocità di clock.
Suggerimenti e consigli per l'utilizzo di un RTOS
Ogni RTOS ha i suoi "suggerimenti e consigli", ma ci sono diverse regole empiriche applicabili in linea generale a tutti.
- Assegnare staticamente attività e oggetti RTOS. L'allocazione dinamica di attività e oggetti richiede l'uso dell'allocazione di memoria (malloc()) che non è deterministica e può causare problemi di frammentazione heap che portano a prestazioni scadenti o, nel peggiore dei casi, addirittura al crash del sistema.
- Cambiare le dimensioni predefinite dello stack in base alle esigenze dell'applicazione. Molti RTOS forniscono un valore di stack predefinito che è sovradimensionato per la maggior parte delle attività, con conseguente spreco di RAM. Configurare manualmente la dimensione predefinita dello stack, ma assicurarsi anche di calibrarla per ogni attività in base alla sua funzione e alle sue esigenze.
- Le funzioni che vengono chiamate da un'attività dovrebbero essere rientranti. Questo assicura che se una funzione viene chiamata da più attività non si correrà il rischio di danneggiare i dati dell'altra attività se è stata interrotta da una con una priorità maggiore.
- Utilizzare pool di blocchi di memoria, se sono disponibili. Un pool di blocchi di memoria è un pool di memoria con un comportamento deterministico e che può essere utilizzato durante il runtime per allocare dinamicamente la memoria. Si tratta di un'opzione migliore di malloc(), ma la maggior parte dei sistemi operativi open source non include questa capacità di gestione della memoria.
- Ridurre al minimo il numero di attività utilizzate nell'applicazione. Quando si adotta un RTOS si è tentati di creare moltissime attività, ma se non sono necessarie si può avere un drastico calo della memoria disponibile a causa della necessità del blocco di controllo delle attività e del relativo spazio separato dello stack.
Conclusione
Poiché IoT fa aumentare la complessità del software nei sistemi embedded, si è reso necessario l'uso di un RTOS per aiutare gli sviluppatori a venirne a capo. Il trucco, tuttavia, è quello di non selezionare un RTOS qualsiasi. Dato che non tutti gli RTOS sono uguali, se quello scelto ostacola i fini degli sviluppatori si può perdere molto tempo e sprecare inutilmente le proprie energie.
Gli sviluppatori devono quindi adottare un approccio proattivo, nella scelta dell'RTOS, e valutare attentamente non solo tutti i suoi vari aspetti, ma anche il suo fornitore e il supporto disponibile in caso di problemi. Un approccio efficace è quello di iniziare con una matrice di KT per valutare attentamente gli RTOS in esame, per poi eseguire quello scelto su piattaforme basate su microcontroller in grado di supportarlo pienamente, per assicurarsi che sia quello giusto per l'applicazione.
Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.




