Una immagine vale più di mille parole
Basandosi su questo presupposto, i laboratori di Palo Alto crearono negli Anni Ottanta del secolo scorso il cosiddetto “paradigma della scrivania”. In altri termini, mostrarono come il modo migliore per poter utilizzare un computer consisteva nel rappresentarne i comandi attraverso una interfaccia grafica.
I sistemi VAX e Unix avevano già mostrato la possibilità di liberare il mainframe dai vincoli della programmazione batch, attraverso l’utilizzo di comandi interattivi. Ma ricordare la sintassi dei comandi era un compito tedioso, ed un errore nei parametri poteva portare a situazioni di pericolo per l’esistenza stessa dei dati. Per tale ragione venne perseguito un protocollo di codifica delle azioni attraverso immagini, presentato inizialmente da Apple e poi di seguito dai principali produttori di sistemi operativi.
Ovviamente, ciascuna azienda aveva un proprio sistema proprietario, una interpretazione assolutamente soggettiva del paradigma della scrivania. Occorreva una sorta di accordo semantico, che consentisse all’utente finale di poter passare da un sistema all’altro utilizzando azioni il più possibile simili per operazioni simili. Ovviamente i produttori di sistemi operativi si guardarono bene dal consentire agli avversari di capire cosa girasse sotto il cofano del proprio prodotto, ma in qualche modo acconsentirono ad utilizzare un sistema simile per le interfaccce grafiche.
Tale lenta e costante confluenza non fu dovuta tanto ad un processo di “assimilazione” in stile Borg, quanto grazie ad una democratica scelta dell’utente finale, che tendeva a scegliere le interfacce più intuitive e semplici da utilizzare. Una volta definita la semantica, occorreva un po’ di “colla” (gli anglosassoni parlerebbero di “syntactic sugar“) per cementare i pezzi in un sistema universale.
La colla è stata fornita dal progetto Qt.
Cos’è Qt?
In slang anglosassone, Qt è abbreviazione per quiet. Inoltre Q.T. o q.t. viene utilizzato nell’accesione di “segretamente”, o “in confidenza”. Ma significa anche cutie carino/a, come omofono derivato dalla pronuncia di “QT“. Infine, Qt sta per Quality time.
Nel nostro caso specifico, Qt rappresenta un framework per applicazioni cross-platform con una interfaccia grafica utente (GUI) comune. Un toolkit utilizzato per lo sviluppo di software che possa essere eseguito su differenti sistemi operativi e su piattaforme hardware diverse.
Mi è capitato personalmente di gestire progetti Qt multipiattaforma, in grado di girare senza problemi su sistemi Linux, MAC e Windows. Il beneficio maggiore è consistito nel riuscire a concentrarsi sul progetto, senza dover tenere ogni volta presenti le idiosincrasie dei vari sistemi operativi.
Grande è stato quindi il mio stupore quando sono venuto a conoscenza del progetto Qt for MCUs. Si tratta di un
Qt for MCUs utilizza Qt Quick per creare interfacce utente con API QML e C++ ed estendere l’interoperabilità con codice C++. Dal momento che le applicazioni Qt Quick seguono l’architettura model-view, è semplice integrare il proprio backend scritto in C/C++. In tal modo qualsiasi porting di applicazioni preesistenti verso Qt for MCU viene accelerato, lasciando maggiore spazio (e tempo) all’ottimizzazione dell’interfaccia grafica.
Un’applicazione scritta con Qt for MCU viene realizzata attraverso l’utilizzo di un nuovo runtime ad elevate prestazioni e basso consumo di memoria. Il tutto è reso possibile grazie ad una nuova traduzione del QML in C++, e ad un nuovo motore di compilazione per le proprietà dichiarative.
In pratica, il nuovo Qt for MCU consente di ignorare il sistema operativo stesso e lanciare un’interfaccia grafica utente sul microcontroller nudo e crudo.
L’aspetto notevole è che le applicazioni basate su Qt potranno ora essere rilasciate sia su sistemi operativi classici che su microcontrollori basati su Arm Cortex-M7. Il framework chiamato Qt Quick rappresenta l’anello mancante della catena di produzione.
Qt Quick è un framework che consente il rilascio di applicazioni di tipo mobile. Il suo nucleo è rappresentato da QML, un linguaggio dichiarativo utilizzato per descrivere l’interfaccia utente. La sintassi lo mostra simile, nella struttura, a JSON, mentre un runtime che richiede pochissime risorse consente alle GUI QML di interagire con il backend scritto in codice C/C++. Questo rende quindi la GUI essenzialmente interoperabile su piattaforme differenti.
Ad oggi sono disponibili esempi di codice compilato sia per il controller STM32F7 Discovery kit che per il NXP’s I.MX RT1050-EVKB. Entrambi i kit di valutazione offrono un touch screen da 4.3 pollici ed un processore con un core Arm Cortex-M7. Ovviamente, anche se il processore M7 si trova all’estremo superiore della gamma Cortex-M, QT for MCUs non poggia su di un vero e proprio sistema operativo tradizionale o real-time.
Maggiori informazioni su Qt for MCU, il codice eseguibile dimostrativo ed un webinar sono tutti già disponibili sul sito Qt.