|
Parte 2 - L'ambiente di sviluppo del Propeller
L'ambiente di sviluppo (IDE) per il propeller, viene fornito gratuitamente dalla Parallax. Non avendo necessità di avere un programmatore hardware per 'scaricare' il programma sviluppato in SPIN o Linguaggio macchina nella memoria del propeller, gli unici strumenti di sviluppo si riducono all'IDE, che fa anche il lavoro di 'download' del programma nella RAM/EEPROM, e una piccola interfaccia RS232 che permetta il collegamento tra i PIN del propeller (riservati alla comunicazione con il PC) ed il PC. Se non disponiamo di una porta RS232 sul PC, dovremmo utilizzare un convertitore USB<->RS232.
I software necessari e la documentazione:
Propeller Tool Software v 1.2.5
Ambiente di sviluppo Parallax (IDE) |
Download |
Propeller datasheet (PDF)
Descrizione e specifiche tecniche |
Download |
Propeller manual (PDF)
Manuale di programmazione SPIN e Assembly |
Download |
L'ambiente di sviluppo (IDE):
|

|
Dopo una breve installazione, lanciate l'icona 'Propeller Tool' ed attendete l'apertura del compilatore. Lo schermo sarà diviso in quattro parti:
1.Pannello oggetti - In questo pannello vengono visualizzati tutti i componenti (oggetti) che fanno parte del progetto corrente. Il linguaggio SPIN essendo di tipo 'object-oriented', in questa finestra viene rappresentata graficamente la gerarchia degli oggetti e come essi sono collocati nel progetto.
2-3.Pannelli di esplorazione file - Viene visualizzato il percorso (cartelle) e contenuto del disco. Utilizzando queste finestre è possibile esplorare le cartelle e i file per l'apertura dei programmi.
4. Pannello Editor - In questo pannello è possibile visualizzare e modificare i files aperti. Per ciascun file aperto verrà visualizzato in alto un 'tab' che ricorda il nome del file. In questo modo sarà semplice passare da un file all'altro facendo click sul nome visualizzato nel 'tab'.
|
|
Ciascun pannello è ridimensionabile. Basterà avvicinare il mouse sui bordi finché non compaiono le doppie frecce, fate click con i tasto sinistro e trascinate il bordo.
E' possibile inoltre far comparire/scomparire tutta la parte di esplorazione file con la combinazione tasti [CTRL+E] oppure dal menù File->Hide/Show Explorer.
|

|
|

|
Quando aprite più di un file, questi normalmente vengono visualizzati in 'tab', raccolti tutti assieme e sovrapposti nella barra di visualizzazione in alto. Come già descritto, per passare da un file all'altro, dobbiamo fare click sul 'tab' associato, ma per avere una visione contemporanea dei files, è possibile dividere lo schermo in due parti. Per fare questo, basterà trascinare il nome di uno dei files visualizzati sul 'tab' al centro dello schermo. Per ripristinare la condizione precedente basterà eseguire l'operazione al contrario.
|
|
E' possibile inoltre portare un file aperto da un pannello di visualizzazione all'altro. Per fare questo, trascinate il nome visualizzato nel 'tab' da un pannello all'altro.

|

I due pannelli di visualizzazione possono essere dimensionati a piacere. Similarmente al pannello di esplorazione file, trascinate il bordo fino alla dimensione desiderata.
|
|

|
Nell'IDE è possibile inoltre trascinare un file aperto in visualizzazione/edit esternamente alla finestra stessa dell'ambiente di sviluppo. Trascinando il 'tab' relativo al file aperto che vogliamo 'portare fuori', si aprirà una nuova finestra esterna all'ambiente, con all'interno il nostro codice. In questo modo potete dividere lo schermo in quanti file desideriate.
Per ripristinare la condizione precedente basterà eseguire l'operazione al contrario.
|
|


La finestra relativa alla vista degli oggetti fornisce informazioni sui componenti del progetto e alla loro gerarchia. I nomi degli oggetti sono uguali ai nomi dei loro relativi file senza estensione. In questo esempio, il file 'ABC Product.spin' è il file principale del progetto che include gli altri tre (Numbers, Rotary Encoder e Controller). Quest'ultimo utilizza un oggetto chiamato TV.spin
|

|
Quando l'icona è gialla, il file si trova all'interno della cartella del progetto.
|
|

|
Quando l'icona è blue, il file si trova all'interno della cartella 'Library'.
|
|

|
Quando l'icona è blue e gialla, significa che ci sono due file con lo stesso nome, sia nella cartella del progetto che in quella della libreria (Library).
|
|

|
Quando l'icona è di colore bianco, significa che il file è nuovo e non è stato mai salvato.
|
Avvicinando il mouse ai nomi degli oggetti, verranno visualizzate informazioni aggiuntive (es. percorso fisico del disco).
Per visualizzare la struttura degli oggetti, è necessario compilare almeno una volta il progetto.
|
Barra di stato: Fornisce informazioni sullo sviluppo del progetto corrente. Si trova sulla parte bassa delli'IDE ed è divisa in sei parti.
1. Indica la posizione del cursore, riga e colonna.
2. Indica se il file è stato modificato (modified), non modificato (vuoto) o di sola lettura (read-only)
3. Indica la modalità di scrittura (modificabile con il tasto 'ins' della tastiera). Le tre modalità sono: Insert (default), Align e Overwrite.
4. Può essere vuoto o con la scritta 'Compiled'. La scritta compare quando un file viene compilato almeno una volta.
5. Visualizza informazioni relative alla parte di codice che sta creando/modificando e relative alla finestra dove in quel momento è presente il cursore.
6. Fornisce informazioni di carattere generale e relative al progetto attualmente aperto. (es. compilazione eseguita correttamente senza errori).
|
Quando il progetto è composto da più oggetti (e quindi più file), è necessario indicare al compilatore qual'è il file principale da cui poi vengono richiamati tutti gli altri file oggetto che compongono il progetto.
Impostate il file principale (Top Object File), dal menu File->Select Top Object File, oppure nella finestra di esplorazione file, selezionatene uno e facendo click con il tasto destro del mouse selezionate 'Top Object File'.
|

|
Finestra informazioni sul Progetto:
Run->Compile Current->View Info [F8]
Run->Compile Top->View Info [CTRL+F8]
In questa finestra è possibile avere informazioni globali relative al progetto corrente (Compile Top) oppure relative solo ad un singolo file (Compile Current).
Le informazioni visualizzate sono relative alla struttura del progetto (similarmente alla finestra di esplorazione in alto a sinistra dell'IDE), alla quantità di memoria impiegata (in termini di codice programma, variabili e stack) ed infine le caratteristiche del clock impostate.
Facendo click sull'oggetto principale (in grassetto) si visualizzano le informazioni relative al file principale che compone il progetto, mentre selezionando gli altri file oggetto, verranno visualizzate le informazioni relative solo a quella parte di codice.
Facendo click sul pulsante 'Show Hex' verranno visualizzate informazioni aggiuntive, come la rappresentazione esadecimale ed ASCII del contenuto della RAM.
|
|
|
|
|
Espandendo la finestra è possibile utilizzare dei pulsanti di utilità:
Load RAM: Esegue il trasferimento del programma compilato nella RAM del propeller, eseguendolo.
Load EEPROM: Stesso risultato del pulsante precedente, con la differenza che il programma viene caricato nella EEPROM esterna e quindi al RESET del chip o allo spegnimento, il programma non viene perduto.
Load File: Apre un file immagine della EEPROM (.eeprom), o un file già compilato in binario (.binary)
Save Binary File: Salva un file binario contenente il codice relativo all'oggetto in quel momento selezionato. Il file binario non include informazioni relative alle variabili e allo spazio riservato allo stack.
Save EEPROM: Stessa funzione del tasto precedente, con la differenza che viene salvata tutta la memoria, incluso lo spazio relativo alle variabili e allo stack.
|
La Font di caratteri Parallax:
Come già accennato, la Parallax include nel propeller, una font personalizzata caratterizzata anche da speciali caratteri per il disegno di schemi elettrici. Nell'IDE viene messa a disposizione una utility per individuare facilmente i caratteri e utilizzarli nei file di codice sorgente.
Facendo click su: Help->View Character Chart.. verrà visualizzata una finestra riportante tutti i caratteri di questa font con i loro relativi codici ASCII. Facendo click su un carattere, questo verrà inserito all'interno della finestra di testo nella posizione corrente del cursore.
I caratteri possono essere visualizzati in tre differenti viste:
Standard: Visualizzati in modo sequenziale, ordinati per numero.
ROM Bitmap: Visualizzati secondo come sono memorizzati nella ROM del propeller, utilizzando quattro colori.
Symbolic Order: Per categoria.
Le tre modalità di Editing del codice:
Premendo il tasto INS, è possibile passare in tre differenti modalità di 'editing' del codice. Questa caratteristica dell'IDE è una novità rispetto ai tradizionali ambienti di sviluppo, in cui le uniche scelte solitamente sono solo due: Insert Mode e OverWrite Mode. L'ambiente di sviluppo Parallax include anche la funzionalità 'Align', utile ai fini della manutenzione del codice che presenta commenti.
|

|
Insert Mode: (cursore a barra verticale lampeggiante)
Aggiunge del testo spostando la parte rimanente verso destra.
|
|

|
Align Mode: (Cursore a barra orizzontale lampeggiante)
(funzionalità disponibile solo con file di tipo .spin)
Aggiunge del codice, mantenendo inalterata la distanza tra la fine della riga di codice e l'inizio del commento ('). Funzionalità molto utile per la manutenzione del codice sorgente.
|
|

|
Overwrite Mode: (Cursore pieno lampeggiante)
Sovrascrive il testo esistente non alterando la posizione di quest'ultimo.
|
Introduzione al linguaggio di programmazione:
Dopo aver fatto una panoramica generale sull'ambiente di sviluppo (sia hardware che software) del Propeller, cominciamo ad inoltrarci nel linguaggio di programmazione. Come già accennato, la Parallax mette a disposizione due metodi gratuiti per sviluppare software, il primo è il linguaggio SPIN (più ad alto livello, simile al basic/C) ed il secondo è il linguaggio macchina proprietario del dispositivo, sicuramente più difficile da imparare, ma con grandi vantaggi nella velocità di esecuzione, in quanto non essendo interpretato come lo SPIN, viene eseguito direttamente dai Cog senza alcun ritardo. Il grande vantaggio che offre l'ambiente di programmazione, è la possibilità di poter scrivere programmi utilizzando anche entrambi i linguaggi contemporaneamente. In questo modo possiamo semplificare i passaggi sui calcoli, gestire menu e grafica utilizzando lo SPIN, e poi quando abbiamo bisogno di velocità nell'esecuzione del codice, precisione nelle acquisizioni o nei tempi, possiamo utilizzare il linguaggio macchina. Per vedere un esempio di come questo sia possibile, basta aprire una delle tante librerie .spin messe a disposizione da Parallax e installate automaticamente dopo l'installazione dell'IDE.
Filosofia del linguaggio SPIN; Cosa sono gli oggetti:
Il linguaggio SPIN, è un linguaggio 'Object-Based'. Questo significa che un programma può essere composto da più file .spin, in cui ciascun file è un oggetto. Un oggetto esegue una specifica funzione del programma, e può richiamare metodi di altri oggetti collegati ad esso. Per fare un esempio, tra le librerie standard dell'IDE troverete l'oggetto 'keyboard.spin', un oggetto che esegue le funzionalità d'interfaccia tra il propeller e una tastiera standard per PC di tipo PS/2. I metodi (routines) disponibili all'interno di questo oggetto sono richiamabili e fruibili da oggetti esterni, così da avere la possibilità di ricevere i caratteri dalla tastiera semplicemente includendo questa libreria nel nostro programma (oggetto) principale. Un programma per il Propeller sviluppato in SPIN, può contenere molti oggetti, ma uno solo deve essere l'oggetto principale, quello da dove parte tutto e da dove parte la prima esecuzione del programma (Top Object File). Con la filosofia ad oggetti, si possono realizzare programmi molto complessi con poche righe di codice; Includendo la giusta libreria corrispondente alla funzionalità richiesta, possiamo comunicare in modo semplice e veloce con la tastiera, il mouse, inviare grafica sulla VGA e sul televisore. In questo modo non dobbiamo preoccuparci di come funziona la libreria, basta solo includerla e utilizzarla.
|

|
Nella figura vengono rappresentati due esempi per uno stesso progetto composto da un oggetto principale (Top Object File) chiamato 'Graphics_Demo' il quale include tre altri oggetti chiamati 'TV', 'Graphics' e 'Mouse'.
Nel primo esempio il programma viene compilato e inviato nella RAM del Propeller per l'esecuzione.
Nel secondo esempio, il programma viene compilato, inviato nella RAM e copiato nuovamente nella EEPROM esterna. Al Boot-Up (accensione) il programma viene copiato dalla EEPROM alla RAM per l'esecuzione.
|
L'importanza di indentare il codice:
Nel linguaggio SPIN, la posizione della colonna di inizio del codice ha fondamentale importanza.
Nella prima colonna, vengono riportati i nomi dei 'Block Designators', ovvero gruppi di istruzioni e/o dichiarazioni che devono essere presenti ad ogni inizio programma. Questi possono essere: CON, VAR, OBJ, PUB, PRI e DAT successivamente descritto nel dettaglio. La prima colonna può inoltre iniziare come nome di una 'label' nel caso di codice assembly.
Dalla seconda colonna in poi, si può iniziare una riga di codice (SPIN o Assembly), che può includere alla fine anche una descrizione purché sia preceduta da uno dei caratteri di inizio commento ( ', '', {.}, {{..}} ). Nel caso di istruzioni appartenenti a cicli (REPEAT), o a condizioni di verifica (IF), indentare il codice ha rilevante importanza, perché nel linguaggio SPIN non esistono istruzioni di 'fine blocco' (es. END IF, o LOOP), ma la posizione di colonna del codice stabilisce se l'istruzione deve essere eseguita all'interno del ciclo REPEAT (o IF) o all'esterno. Per facilitare il programmatore nell'individuare a quale gruppo di istruzioni fa parte una riga di codice, basterà premere sulla tastiera la combinazione [CTRL+I], facendo comparire/scomparire delle frecce che indicano in ciascuna riga il gruppo di codice di appartenenza.

Nella parte iniziale di un programma SPIN, troverete sempre i 'block designators', colorati come sfondo in modo differente. Ciascun blocco contiene informazioni sulla composizione del programma, come ad esempio le costanti utilizzate, le variabili globali, le routine di programma, e se queste sono di tipo Privato o Pubblico.
|
Blocco
|
Descrizione
|
|
CON
|
Costanti globali, che possono essere utilizzate in qualsiasi punto all'interno dell'oggetto (o in alcuni casi all'esterno)
|
|
VAR
|
Variabili globali, che possono essere utilizzate all'interno dell'oggetto.
|
|
OBJ
|
Dichiarazione degli oggetti già esistenti che verranno utilizzati all'interno di questo oggetto. Dichiarando l'utilizzo di un oggetto all'interno di questo blocco, si avrà automaticamente accesso ai metodi previsti nell'oggetto che si desidera includere.
|
|
PUB
|
Dichiarazione di un metodo di tipo Pubblico. Questo metodo, contenente routines di codice, è accessibile sia all'interno che all'esterno dell'oggetto. Tutti gli oggetti devono avere almeno un metodo di tipo pubblico.
|
|
PRI
|
Dichiarazione di un metodo di tipo Privato. Questo metodo, contenente routines di codice, è accessibile (e quindi eseguibile) solo all'interno dell'oggetto.
|
|
DAT
|
Dichiarazione di Blocco dati. Può contenere blocchi di dati sotto forma di tabelle, memory buffers, o parti di programma scritte in codice Assembly.
|
|