Embedded software

Il software embedded è il software sviluppato specificamente per la funzionalità dei sistemi embedded, cioè dei sistemi che, pur avendo la connotazione di computer, non ne hanno le stesse caratteristiche applicative nonché funzionali. Il software embedded è il codice di programmazione che viene memorizzato nella memoria di programma del processore che governa la funzionalità di un sistema embedded. Il software embedded può essere di sistema (cioè orientato a governare le funzioni di sistema: memoria, input/output, temporizzazione, ecc.), come ad esempio un sistema operativo embedded, oppure applicativo (cioè che esegue le funzioni richieste dall’applicazione del sistema embedded).

Il software embedded, in conseguenza della natura stessa dei sistemi embedded è parte integrante del sistema stesso e per questo motivo spesso viene connotato con il termine “firmware”, in quanto memorizzato sotto forma binaria nella memoria non volatile del sistema embedded. Il più noto e importante software embedded di sistema è il sistema operativo (OS) che, data la natura altamente performante dei sistemi embedded (prestazioni real-time) ha una specifica connotazione nota come RTOS (Real-Time Operating System).

Il software embedded ha caratteristiche e ciclo di sviluppo completamente diverso da quello del software tradizionale. I requisiti funzionali e hardware dei sistemi embedded,cui è destinato il software embedded, sono quelli che condizionano lo sviluppo del software embedded, per esempio la quantità di memoria (memory footprint), la capacità computazionale della CPU, il consumo di potenza elettrica, ecc.

Sviluppare software embedded implica l’utilizzo di strumenti dedicati come gli emulatori e i simulatori che consentono di eseguire la modellazione e il debug della codifica in condizioni realistiche. Gli emulatori consentono di controllare un dispositivo embedded in modalità fisica, pur operando da un sistema host (un computer tradizionale) che esegue consente di eseguire le principali funzioni per la generazione del codice eseguibile come l’editing, la compilazione (cross-compiler) , il building e il loading sul target.

Lo sviluppo su host del software embedded implica la disponibilità di un ambiente di sviluppo orientato al sistema embedded target. In particolare negli ultimi anni si è affermato Eclipse, un ambiente di sviluppo integrato multi-linguaggio e multipiattaforma proposto da un consorzio di grandi società dell’informatica: Ericsson, HP, IBM, Intel, QNX, SAP, MontaVista Software, Serena Software.

Eclipse è scritto in linguaggio Java e quindi disponibile per le piattaforme Linux, HP-UX, AIX, MAC-OS, e Windows.

Eclipse contiene uno workspase di base e un sistema di plug-in che consente di estenderlo e personalizzarlo sulle esigenze dello sviluppatore. Anche se finalizzato allo sviluppo in Java, viene ormai correntemente utilizzato per lo sviluppo di software embedded in altri linguaggi di programmazione, come ADA, C, C++, C#, Fortran, JavaScript, Perl, PHP, Python, Ecc.

Fig. 1 - Eclipse contiene uno workspase di base e un sistema di plug-in che consente di estenderlo e personalizzarlo sulle esigenze dello sviluppatore (Fonte: Wikipedia)

Un altro ambiente di sviluppo di software embedded è Matlab/Simulink di Mathworks. Matlab/Simulink è un ambiente di sviluppo particolarmente diffuso in ambito applicativo industriale e tecnico/scientifico che consente di modellare e simulare un’applicazione destinata ad essere implementata su un sistema embedded di natura real-time. Il codice di programmazione sviluppato in ambiente Matlab/Simulink non è basato su un linguaggio di programmazione cross-compilabile per una MCU target, in quanto è uno script eseguibile su host in ambiente Matlab/Simulink. Data l’importanza di questo ambiente di sviluppo, nel tempo sono stati prodotti strumenti di esportazione del codice di programmazione verso le piattaforme hardware embedded. In particolare i “code generator” (applicazioni eseguite su host per trasformare gli script d Matlab/Simulink in codice sorgente scritto in linguaggio C, quindi compilabile per qualsiasi altra MCU embedded).

Fig. 2 – Matlab/Simulink è un ambiente di modellazione e sviluppo di software embedded che consente di eseguire il deploy del codice macchina sul target finale (Fonte: Mathworks)

Più recentemente, l’esigenza di produrre software embedded in ambiente Matlab/Simulink è evoluta in una forma collaborativa con i principali produttori di piattaforme computazionali embedded rendendo disponibili librerie di firmware target-specifici, denominate BSP (Board Support Package) che consentono di esportare (Deploy) in forma binaria l’applicazine sviluppata in ambiente Matlab/Simulink verso il target finale e quindi averla disponibile in ambiente rigorosamente embedded.

Il software embedded è orientato a specifiche piattaforme computazionali che i vari produttori di MCU rendono disponibili agli sviluppatori con il supporto allo sviluppo. Ambienti proprietari di sviluppo che integrano librerie di software application-specific (firmware) consentono allo sviluppatore di software embedded di procedere rapidamente alla codifica e test sulla specifica piattaforma dell’applicazione.

Sistemi operativi embedded

Il sistema operativo è quella parte del software embedded che presiede alla gestione della funzionalità hardware di base del sistema embedded. Anche se in passato era prassi consolidata lo sviluppo di software embedded in modalità “bare-metal”, cioè controllando da software applicativo le funzionalità hardware più profonde del sistema embedded target (clock, memoria, periferiche di comunicazione, ecc.). Questa pratica, che richiedeva l’utilizzo della programmazione in codice macchina e una profonda conoscenza dell’architettura hardware del target finale, è stata progressivamente abbandonata col crescere della complessità delle piattaforme computazionali embedded. I sistemi operativi, nella versione embedded, sono stati resi disponibili per supportare il software embedded destinato ai sistemi embedded, rendendo non necessario lo sviluppo di software a basso livello.

Il sistema operativo, ove disponibile per una specifica MCU, implementa e rende disponibile il controllo e l’interazione con lo strato hardware più profondo del sistema embedded rendendolo visibile ad alto livello al software applicativo attraverso un processo di astrazione.

I sistemi operativi real-time (RTOS) rappresentano la versione ottimizzata per sistemi embedded destinati a interagire con il mondo fisico e/o con esseri umani (ambito industriale e ambito sanitario).

Segger ha sviluppato embOS, un RTOS per applicazioni embedded multitasking e per applicazioni hard real time, caratterizzato da latenza zero agli interrupt, e ridotto footprint di memoria. embOS è ottimizzato per l’integrazione con il software applicativo in quanto solo le funzioni necessarie vengono integrate nel codice finale.

Pubblica i tuoi commenti