Macchine virtuali che girano su microcontrollori

Macchine virtuali che girano su microcontrollori

Molti utenti hanno esperienze su come si utilizza una macchina virtuale (VM- virtual machine). Queste VM sono abbastanza utili per gli sviluppatori che devono lavorare su piattaforme multiple OS. Ci sono inoltre molte VM che girano su microcontrollori embedded. Queste VM embedded vengono utilizzate per uno scopo preciso. Molte applicazioni embedded consentono loro di ridurre la complessità del sistema, il memory footprint, e di diffondere rapidamente la progettazione personalizzata. Ciò può sembrare sbagliato in quanto il funzionamento di una macchina virtuale richiede risorse extra di un microcontrollore embedded e richiede inoltre elevate capacità di programmazione. Tuttavia le macchine virtuali embedded possono aiutare gli sviluppatori a raggiungere quegli obbiettivi.

Pcode da PicoWeb

Controlliamo un progetto open source, PicoWeb dal "Lighter Engineering". Si tratta di un progetto embedded Ethernet che gira su un microcontrollore AVR con Realtek Ethernet NIC. Parecchi anni fa la connettività embedded era molto diffusa, in quanto la connettività di rete è una tecnologia che introduce all'era di Internet. PicoWeb è uno di quei progetti , sviluppò una piccola versione di uno stack TCP/IP e un server embedded che girava sui microcontrollori.

Devo dire che questi progetti sono brillanti, ma tra questi PicoWeb è il più interessante perché ho scoperto che tutti i contenuti abituali, non solo le pagine HTML, ma anche gli script CGI vengono memorizzati nella EEPROM e girano su una VM. Prima di sapere tutto questo pensavo che ogni server embedded dovesse essere programmato singolarmente, e che il codice ed il contenuto dovessero essere riprogrammati non appena le specifiche fossero cambiate. Grazie alla tecnologia VM, l’HTML/CGI possono essere memorizzati in EEPROM interne o esterne; il firmware del microcontrollore è identico per tutti i server embedded . Questo approccio riduce drasticamente le richieste di modifiche personalizzate, la dimensione del codice e semplifica la struttura del programma in fase di esecuzione, rispetto al codice nativo.

Pcode, come la VM di PicoWeb, è una VM binaria. E' lo stesso concetto di Java. Uno sviluppatore può scrivere il codice con uno pseudo-codice Pcode, quindi compilarlo nel Pcode binario finale. Poi il Pcode binario viene scaricato nella EEPROM, un interprete VM Pcode leggerà il Pcode nella EEPROM e lo eseguirà. Naturalmente si può osservare il fatto che l'approccio VM comporterà una maggiore complessità per il runtime della VM e per il compilatore. Sì, certamente, ma ne vale la pena. Diamo un'occhiata alle istruzioni del Pcode, troverete tante istruzioni di basso livello (MOV, XOR, OR, NOT, CLR e JMP) come pure alcune applicazioni-istruzioni specifiche ad alto livello. Dato che Pcode è progettato per un server embedded , esso ha le seguenti applicazioni-istruzioni specifiche ad alto livello:

  • ps2ee:Copy SRAM to EEPROM,
  • ps2see: Copy SRAM to External EEPROM,
  • pwreebi: Write Byte to EEPROM,
  • pcrlf: Print CR,LF
  • psgetcto: Get Serial port character with timeout
  • pprintse: Print serial EEPROM string of length of n
  • poksetip: Check if "set IP" operation allowed
  • purl2int: Convert characters in URL line to 16bit integer
  • ps2x: Move bytes from memory to Ethernet transmit buffer
  • altre informazioni sono elencate qui http://www.picoweb.net/download/pw1_pcode.pdf

Possiamo quindi concludere come e perché questo approccio è in grado di ridurre la complessità del software del sistema e di ridurre anche la dimensione del codice. All'interno del microcontrollore possiamo mettere solo uno real-time kernel, drivers e un motore runtime del Pcode. Molti codici nativi di una specifica applicazione vengono astratti e riprogrammati nelle istruzioni Pcode, le quali sono memorizzate nella EEPROM esterna. In aggiunta, lo sviluppatore può persino nascondere la sua più intima competenza all'interno del microcontrollore con questo approccio, mentre offre anche una maggiore flessibilità nella EEPROM esterna. Per maggiori informazioni su PicoWeb, vai su www.picoweb.com. Alcuni progettisti possono trarre vantaggio da questa idea, come la progettazione personalizzata UI, PLC e da qualunque applicazione che abbia bisogno di una progettazione personalizzata.

Naturalmente ci sono molti progetti simili, o legacy projects o state-of-art technologies.

  • Sun's JavaCard, Java VM runtime, le applicazioni personalizzate sono scritte in Java, scaricate e utilizzate su Smartcards. Anche Embedded Java e' un argomento molto richiesto. Puoi trovare facilmente i progetti open source per Java.http://java.sun.com/products/javacard/
  • L'Interprete BASIC della Intel. Il progetto è abbastanza vecchio, ma io conservo ancora il codice. Se qualche progettista lo vuole,siccome la versione originale fu progettata per funzionare su una SRAM esterna, deve trasportarlo su una piattaforma esistente. Lo sviluppatore deve conoscere molto bene l’assembler 8051 perché tutti i codici sono sviluppati in assembler 8051. L'approccio della Intel è diverso da quello di PicoWeb: il codice BASIC dell'utente deve essere sotto forma di codice sorgente, la VM BASIC analizza il codice sorgente e comincia ad interpretarlo e ad eseguirlo.
  • BASIC Stamp da Parallax, un interprete BASIC commerciale per la didattica, la robotica. http://www.parallax.com/
  • nesC di TinyOS, un runtime alternativo per una sensor networking.http://www.tinyos.net/
Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend