|
Esercizio# 6 - Creare un proprio oggetto - Output.spin & Blinker1.spin
Gli esercizi finora descritti fanno riferimento ad un solo oggetto, ovvero lo stesso file che contiene il programma da eseguire (output.spin) il quale rappresenta l'intera applicazione. Supponiamo ora di voler creare un oggetto che possa dare la possibilità ad un altro sviluppatore, di far lampeggiare dei led nella sua applicazione richiamando semplicemente il nostro file. STEP1: Modifichiamo il file OUTPUT.SPIN come segue, ovvero lasciando solo il metodo TOGGLE e aggiungendo un nuovo metodo START che ha il compito di lanciare un nuovo cog quando serve.
|
{{Output.spin
Oggetto che lancia un nuovo cog ed esegue il lampeggio.}}
VAR
long Stack[9] ' Dimensione delle stack per il nuovo cog
PUB Start(Pin, Delay, Count)
cognew(Toggle(Pin, Delay, Count), @Stack) 'Lancia il nuovo cog
PUB Toggle(Pin, Delay, Count)
{{Inverti lo stato del Pin tante volte quanto indicato in Count, e
attendi il tempo Delay tra una inversione e l'altra.}}
dira[Pin]~~ ' Imposta il registro di direzione
repeat Count ' Ripeti tante volte quanto in Count
!outa[Pin] ' Inverti lo stato logico del Pin
waitcnt(Delay + cnt) ' Attendi i cicli indicati in Delay
|
STEP2: Creiamo un nuovo file BLINKER1.SPIN il quale sarà il "TOP OBJECT FILE" per il nostro progetto, contenente il codice di seguito riportato:
|
{{Blinker1.spin
Avvia un nuovo cog ed esegue i lampeggi.}}
OBJ
LED: "Output"
PUB Main
LED.Start(16, 3_000_000, 10) 'Avvia il secondo cog ed esegui lampeggio
'del pin16 (10volte)
LED.Toggle(17, 2_000_000, 20) 'Lampeggio pin 17 (20 volte)
|
L'applicazione principale si è ora ridotta notevolmente perché gran parte del codice è stato riportato nel file oggetto OUTPUT.SPIN. Nel file BLINKER1.SPIN richiamiamo il file oggetto OUTPUT.SPIN assegnandogli un nome (label) sotto il gruppo OBJ (LED: "Output"). Ora nel metodo che viene eseguito all'avvio (Main) viene richiamato ed eseguito il primo metodo (Start) dell'oggetto LED. In un programma scritto in SPIN, gli oggetti vengono dichiarati e inclusi nel progetto sotto il gruppo di istruzioni OBJ. Successivamente devono essere richiamati utilizzando la sintassi oggetto.metodo dove "oggetto" è il nome che è stato assegnato (sezione OBJ), che nel nostro esempio è "LED", il metodo è il nome del metodo da eseguire all'interno dell'oggetto (nell'esempio Start e Toggle).
Compilare ed eseguire questo programma è possibile farlo in due modi:
- 1) Premere [F10] sul file BLINKER1.SPIN che corrisponde alla compilazione del file correntemente aperto e visualizzato (questo include automaticamente la compilazione anche di OUTPUT.SPIN perché necessario e richiamato da BLINKER1.SPIN),
- 2) l'impostazione del file BLINKER1.SPIN come "Top Object File" e premere [CTRL+F10]. Se per errore compilate solo il file OUTPUT.SPIN con [F10], nel caso dell'esempio non produrrà alcun effetto, perché verrà eseguito per primo il metodo Start contenuto all'interno di OUTPUT.SPIN, ma senza direttive sul numero di pin e altri parametri necessari.
|