µVision3 è un ambiente di sviluppo offerto da Keil Software. Rappresenta la piattaforma per lo sviluppo di firmware per un elevato numero di microcontrollori, tra cui ARM e 8051-based.
µVision3, il famoso ambiente di sviluppo di Keil Software, integra un Project Manager, un editor di testi, un debug ed un Flash Programmer in un unico e potente prodotto. Tra i chip che possono essere programmati si ricordano Atmel, Analog Device, Cypress Semiconductor, Dallas Semiconductor ed STMicroelectronics.
Nell’articolo si esamineranno i passi fondamentali per realizzare le prime prove di scrittura e debug del codice. La Figura 2 riporta una tipica schermata di Keil µVision3, in cui sono evidenziati i vari tool di supporto alla programmazione ed al debug.
In particolare, si forniranno le necessarie informazioni per le caratteristiche principali, come:
- Project Management, impostazioni del dispositivo e tool di configurazione.
- Editor facilities per la creazione, modifica e corretta programmazione
- Simulazione delle periferiche e della CPU.
- Debug e programmazione del micro.
PROJECT MANAGEMENT
Facendo click su ProjectxNew Project il software permette di scegliere quale tipo di microcontrollore utilizzare per il proprio progetto. La Figura 3 riporta tale schermata di selezione.
Insieme al software, Keil fornisce anche un serie di esempi che posso essere un buon punto di partenza per lo sviluppo di programmi più complessi. Nel seguito si farà riferimento all’esempio Measure, presente nella cartella Example. Per aprire il progetto fare click su projectxOpen Project. Nella sezione indicata con nome di Project Workspace sarà presente quanto riportato nella Figura 4.
Facendo click con il testo destro del mouse si aprirà il menu contestuale; in tal modo è possibile accedere ad opzioni quali la compilazione del progetto o la sua gestione. Inoltre, il tab Books nel Project Workspace elenca tutti i manuali on-line per l’ambiente ed il microcontrollore selezionato.
CONFIGURAZIONE E COMPILAZIONE
Sezionando ProjectxOptions for Target è possibile accedere alle impostazioni di configurazione del microcontrollore scelto per il progetto. mVision3 permette di selezionare le opzioni per il target, il gruppo e il file sorgente (Figura 5).
In particolare, le possibili opzioni selezionabili tramite i tab mostrati in Figura 5 sono:
- Device. Consente di visualizzare e/o cambiare il tipo di CPU utilizzata.
- Target. Contiene le opzioni di configurazione della CPU e della sua memoria.
- Generalmente queste sono le uniche opzioni da selezionare per avviare un nuovo progetto.
- Output e Listing. Serve per la configurazione dei file oggetto e di listing.
- Compiler/Assembler/Linker. Visualizza e modifica opzioni relative a tali strumenti.
- Debug. Configura il simulatore e il debug integrati in mVision3.
Per la compilazione del codice è possibile utilizzare i comandi riportati nella Build Toolbar, mostrata in Figura 6. Facendo click su Build Target, vengono generate automaticamente tutte le dipendenze tra i file del progetto.
Nel caso in cui si utilizzino i programmatori EPM900 LPC o il ULINK USB JTAG-Adapter è possibile anche disporre nella Build Toolbar anche della funzionalità Flash Download. In questo modo µVision3 diventa uno strumento davvero completo, che assiste il progettista dalla creazione fino al debug del codice sul micro, passando attraverso la fase intermedia di simulazione.
DEBUG DEL CODICE
Uno dei punti di forza di questo IDE è quello di fornire un singolo ambiente per la programmazione, simulazione e test del target. Molte delle funzioni di debug e di editor possono essere facilmente raggiunte tramite la Debug Toolbar (Figura 7).
Per agevolare il programmatore in fase di debug, mVision3 segna ogni linea di codice con un colonna attributi, fornendo una rapida visione degli attuali breakpoint e dello stato di esecuzione del programma (Figura 8).
In aggiunta ai breakpoint semplici, µVision3 ne supporta anche altri definiti Complex. Si tratta, in sostanza, di interruzione del flusso del programma in corrispondenza di espressioni logiche o condizionali. La finestra Memory Window visualizza varie aree di memoria. È possibile selezionare il formato di uscita o modificarne il valore mediate menu contestuale. La finestra Watch Window mostra, invece, il valore di una variabile. Anche in questo caso è possibile modificarne il valore (Figura 9).
SIMULAZIONE DI CPU E PERIFERICHE
L’ambiente di sviluppo Keil dispone di potenti capacità di simulazione che assicurano uno sviluppo software affidabile e rapido. La possibilità di testare il microcontrollore prima ancora di disporre fisicamente del chip è sicuramente un valido aiuto. Per aprire le finestre riportate in Figura 10, selezionare Peripherals e spuntare il tool che si desidera visualizzare. Molto utile per i test di comunicazione del micro con componenti esterni, risulta la possibilità di simulare le interfacce di I/O come CAN, I2C e UART.
Strumenti avanzati di simulazione
L’analizzatore di segnali rappresenta una comoda interfaccia per evidenziare l’andamento dei segnali digitali ed analogici in ingresso ed in uscita al micro. In Figura 11 si riporta una tipica schermata. L’ausilio dei cursori (proprio come in un normale oscilloscopio) consente di effettuare misure di temporali tra due differenti punti. L’analizzatore di stati dispone di tre diversi formati di visualizzazione (come riportato in Figura 11):
- Bit. Mostra l’uscita come livelli logici (“0” o “1”).
- State. Mostra le variazioni del valore.
- Analog. Mostra un segnale analogico.
Tale analizzatore consente anche di simulare un segnale (sia analogico che digitale) in ingresso al micro, definendolo tramite un linguaggio di script (di tipo C). Questo consente di evitare l’uso di costosi strumenti per la generazione del segnale. Il Listato 1 riporta un esempio per definire un segnale analogico. Le righe da 1 a 3 definisco una generica funzione sinusoidale, mentre la riga 4 crea effettivamente il segnale, definito come la sovrapposizione di due sinusoidi a frequenza differente.
1.FUNC float sine_wave (float f) { 2.return __sin (f * (STATES/CLOCK) * 2 * PI); 3.} 4.AN0 = sine_wave (2200) + sine_wave (4500);
Listato 1 |
PROGRAMMAZIONE DEL MICRO
Il passo finale, quando il codice risulta perfettamente funzionante, è quello di effettuarne il download sul micro. La scelta del dispositivo di programmazione è fatta tramite il tab Debug nella finestra Options for Target (riportata in Figura 3). Esistono differenti tool forniti da terze parti. Inoltre, Keil ha previsto un proprio programmatore, ULINK USB-JTAG Adapter, che collega il PC su cui è installato il software con i pin JTAG dell’interfaccia embedded. La Figura 12 mostra un’immagine del tool appena descritto. Attualmente, ULINK supporta i chip ST mPSD basati su 8051, Infineon xC16x e alcuni modelli di ARM.
Ho lavorato con questo compilatore e debugger su boards montanti CPU della serie LPC2XXX, della Philips. Non ricordo problemi di alcun tipo: il debugger era stabile ed affidabile. Un buon prodotto.