Inquesto apitoloabbiamopassatoinrassegnale aratteristi heprin ipalidella
famiglia18FXX2. Sonostatitrattatisoltantogliaspettiessenzialiper ompren-
dereilfunzionamentoelas ritturadelsistemaoperativo
µ
TNetOS.Perulteriori approfondimentisipuò onsultare[16℄,[17℄, [18℄,[19℄, [24℄.Sistemi operativi per PIC
Inquesto apitolovienefornitaunapanorami asullostatodell'artedeisistemi
operativiperi PIC dellafamiglia 18FdellaMi ro hip. Nei paragra 3.1, 3.2,
3.3vedremorispettivamenteitresistemioperativiSalvo,Pi Os18e
µ
C/OS-II. Ilparagrafo3.4riepilogale aratteristi heprin ipalidiquestisistemioperativionfrontandole onquelledel
µ
TNetOS.3.1 Salvo RTOS
Salvoèunsistemaoperativoreal-time(RTOS)sviluppatodallaso ietàameri a
Hi-Te h. È un sistema operativo multitasking di tipo ooperativo on pieno
supportoallagestionedeglieventi. Ilmultitaskingèbasatosullivellodipriorità
assegnato ad ogni task. Sono previsti quindi i livelli di priorità e i pro essi
on lastessaprioritàvengonoserviti on unastrategiadi tiporound-robin. La
gestionedeglieventiprevedel'usodisemafori,messaggie odedimessaggiperle
omuni azionifrapro essieperlagestionedellerisorse. Salvoès rittoinANSI
C, er andodi limitarealminimoindispensabilel'usodell'assembler,spe i o
di ogni pro essore. La s elta del C, piuttosto he dell'assembly, permette a
Salvodi esserefa ilmenteportabilesuunavastagammadipro essori,daiPIC
alPentium,peresempio.
L'ammontaredi memoriaROMeRAMri hiestadipendedal tipodi appli-
azione: unaappli azionemultitaskingminimalepuòusaresolopo he entinaia
di istruzionima hina, mentre un'appli azionepiù omplessa potrebbe ri hie-
dere, sullo stesso pro essore, an he un migliaiodi istruzioni. In ogni aso, la
quantità di memoria RAM ri hiesta dipende prin ipalmente dalla dimensione
ompilazione enon possono ambiare a run-time. Sonosempli i funzioni he
onsistonoin una inizializzazione (opzionale) seguita da un i lo innito on-
tenente almenoun ambio di ontesto; non possono avere nessun parametro.
Una volta reato, il task viene posto nello statodi attesa. An hé il multi-
taskingfunzioni orrettamente,il taskin ese uzione deve ritornareil ontrollo
allo s heduler; iò avvieneattraversoun ambio di ontestoall'interno del ta-
sk. Ilnumerodi tasked eventi gestibilidaSalvodipende es lusivamente dalla
memoriadisponibile.
Un'appli azioneSalvoèuna ombinazionedi hiamatealleroutinediservizio
del sistema operativo e di odi e appli ativo. Un esempio di appli azione è
mostratonellistato4.
Salvo è un sistema operativo a pagamento, ma la Hi-Te h ha da qual he
annorilas iato an he una versione freeware hiamata SalvoLite, he limita il
numerodi taskedi eventigestibili.
3.2 Pi Os18
PICos18èunsistema operativoreal-time on multitasking di tipopreemptive
prodottodallaso ietàfran esePRAGMATECedestinatoallafamigliadeiPIC
18. Ilmultitaskingèbasatosuunlivellodiprioritàassegnatoadognitask: itask
on prioritàpiùalta hannodirittodi prelazione suitask di priorità piùbassa.
I task on la stessa priorità vengono serviti on una strategia di tipo round-
robin. Il nu leo è stato s ritto in ANSI C. La gestione degli eventi prevede
es lusivamentel'usodi semafori.
I task vengonodi hiarati stati amente assieme al kernel durante lafase di
ompilazionee non possono ambiarearun-time. Ilnumero massimo di task
eseguibilidal PICos18 è16, unnumero più he su iente per appli azioni su
mi ro ontrollore. Adognitaskèpossibileasso iareunmassimodi ottoeventi.
I listati 5 e 7 mostrano ome sia possibile eseguire un'appli azione on due
task on il Pi Os18. Ilprimo le ( main. ) èl'appli azione prin ipale, mentre
il se ondo( taskdes . ) ontiene tutte le informazioni riguardantii task ele
risorse utilizzate per una data appli azione. L'implementazione di ogni task
risiedeinunlesorgenteaparte;perinostriduetaskd'esempioèmostratanel
listato6.
Ogni volta he si rea un task e si aggiunge ad una appli azione, il pro-
grammatoredevemanualmente editare il le taskdes . perinseriretutte le
Listato 4Esempiodiunaappli azioneSalvo. Iduetask, TaskA(),TaskBnon
fannoniente e,poi héhannolastessapriorità(10),sempli emente sialternano
fra loro. Il ambio di ontestori hiede heognitask siaindenti atoda un'e-
ti hettaunivo a. Questaeti hetta viene reataattraversolama ro_OSLabel.
OSInit()inizializzalestrutturedatidelsistemaoperativoedeveessereri hia-
mata prima di qualsiasi altra routine di servizio. OSS hed è lo s heduler del
sistema edeettuaiterarivamenteleseguentitre operazioni:
•
Controllasesisonoveri atideglieventi. In asoaermativo,tuttiitask hesieranopreventivamenteregistratiaduneventovengonopassatinellostatopronto,
•
Controlla se è s aduto il tempo di attesa di qual he task. In aso aermativotalitaskvengonopassatinellostatopronto,•
Inne,vienemandato inese uzioneil tasksu essivo;Lafunzione OS_Yieldeettua un ambiodi ontestoedin generesitrovaalla
nedel i loinnitodeltask. LafunzioneOSCreateTask reailtask;OSTCBPè
unama routilizzataperspe i areunpuntatorealtask ontrolblo k , ioèalla
struttura he ontieneleinformazionisultask.
_OSLabel(TaskA1) _OSLabel(TaskB1) void TaskA( void ) { for (;;) /
∗
Body here∗
/ OS_Yield(TaskA1); } void TaskB( void ) { for (;;) /∗
Body here∗
/ OS_Yield(TaskB1); } int main( void ) { Init(); OSInit();OSCreateTask(TaskA, OSTCBP(1), 10);
OSCreateTask(TaskB, OSTCBP(2), 10);
for (;;)
A dierenza di Salvo, il nu leo di PICOs18 è open-sour e ed è distribuito
gratuitamentesottoli enzaGPL.
Listato 5Esempio di appli azione on Pi Os18. Per prima osa siinizializza
ilpuntatore allosta k( STKPTR)esiselezionalamodalitàdi defaultdell'appli-
azione. Lasys allInitsio upa diripulirelamemoriadatiedi inizializzare
eventualirisorse(ilregistroTimer0,peresempio). Lasys allStartOSfapartire
ilmultitasking. #define DEFAULT_MODE 0 AppModeType Sele tedMode; void main(void) { STKPTR = 0; Sele tedMode =DEFAULT_MODE; Init(); while(1) { StartOS(Sele tedMode); } }
Listato 6 Implementazione dei task in Pi Os18. All'interno del i lo innto
deveessereinserito il odi e he des riveil omportamentodei task. Los he-
dulingè preemptive quindi, adierenza di Salvo,non è ne essario ri hiamare
al unasys allperil ambiodi ontesto.
TASK(TASK0) { while(1) { /
∗
Body here∗
/ } } TASK(TASK1) { while(1) { /∗
Body here∗
/ }Listato 7 Denizione dei task in Pi Os18. Per ogni task si devono inserire
le seguenti informazioni: priorità, indirizzo dellosta kasso iato al task esua
dimensione, nomedeltask,statoiniziale.
#define DEFAULT_STACK_SIZE 128
De lareTask(TASK0);
De lareTask(TASK1);
volatile unsigned har sta k0[DEFAULT_STACK_SIZE℄;
volatile unsigned har sta k1[DEFAULT_STACK_SIZE℄;
rom_des _tsk rom_des _task0 = {
TASK0_PRIO, /
∗
prioinit from 0 to 15∗
/ sta k0, /∗
sta k address (16 bits)∗
/ TASK0, /∗
start address (16 bits)∗
/ READY, /∗
state at init phase∗
/TASK0_ID, /
∗
id_tsk from 1 to 15∗
/sizeof(sta k0) /
∗
sta k size (16 bits)∗
/ }; rom_des _tsk rom_des _task1 = { TASK1_PRIO, sta k1, TASK1, READY, TASK1_ID, sizeof(sta k1)3.3
µ
C/OS-IIµ
C/OS-IIèunsistemaoperativoreal-time onmultitaskingditipopreemptive prodottodallaso ietàameri anaMi riumIn .I task vengonodi hiarati stati amente assieme al kernel durante lafase di
ompilazione e non possono ambiare a run-time. Il numero massimo di ta-
sk eseguibili è 63 ed il multitasking è basato sul livello di priorità assegnato
ad ognuno di essi. I livelli di priorità sono 63 e due task non possono avere
lostesso livello; di onseguenza, adierenza del Pi Os18, non è prevista una
strategiadi s heduling round robin. La gestione degli eventi prevede l'uso di
semafori,messaggie odedimessaggi. Iltempodiese uzionedelle hiamatedi
sistemaedellagestionedeglieventiè, omeneiduepre edentisistemioperativi,
ompletamente deterministi o. Ciò vuoldire hel'utente èsemprein gradodi
sapere quanto tempoimpiegheràil sistema ad eseguireuna sys all oa gestire
unevento,indipendentementedalnumeroditaskin ese uzione 1
.
µ
C/OS-II può essere eseguito su una vasta gammadi ar hitetture, tra le quali i PIC 18 della Mi ro hip, i mi ro ontrollori Frees ale della Motorola, imi ropro essori ARM7, per itarne al uni. Il listato 8 mostra un esempio di
omeimplementareun'appli azione onduetask.
La li enza è proprietaria, ma è possibile a quistare i sorgenti per s opi
didatti i. Ilnu leo èstatos rittoin ANSIC.
3.3.
µ
C/OS-II 35Listato 8Esempio di appli azione on
µ
C/OS-II. OS_STK èla struttura dati utilizzataperdenireladimensionedellosta kdiognitask. OSInitinizializzailsistemaoperativoe,inparti olare, reauntaskidle heverràeseguitoquando
nessun taskutente èpronto perl'ese uzione. OSTaskCreate()vieneutilizzata
per reareuntaskeri hiedequattroargomenti: ilpuntatoreal odi edeltask,
il puntatore dell'argomento deltask( pdata),il puntatorealla imadellosta k
deltask, laprioritàdeltask. OSStartavviail multitasking.
OS_STK Task1Stk[100℄;
OS_STK Task2Stk[200℄;
void Task1(void
∗
pdata) { //task loopfor(;;) {
/
∗
Body here∗
/ }}
void Task2(void
∗
pdata) { // task loopfor(;;) {
/
∗
Body here∗
/ }}
void main (void) {
OSInit();
OSTaskCreate(Task1, (void
∗
)0, &Task1Stk[0℄, 1); OSTaskCreate(Task2, (void∗
)0, &Task2Stk[0℄, 2); OSStart();3.4 Con lusioni
Queste apitolo ha voluto fornire una brevepanorami a dei prin ipalisistemi
operativi perla famiglia PIC 18F. Abbiamo preso in onsiderazione i sistemi
operativi piùnoti epiù utilizzati. Vale la pena qui ri ordarean he il sistema
operativo FreeRTOS, un progetto open sour e he rispetto agli altri è nato
re entemente. Intabella 3.1 vengono riepilogate le aratteristi he dei sistemi
operativitrattatiedel
µ
TNetOS, heverràanalizzatoindettaglionel apitolo 5.Con lusioni
Tabella3.1ConfrontofraimaggiorisistemioperativiperPIC.
Salvo RTOS Pi OS18
µ
C/OS-IIµ
TNetOSReal Time Si Si Si No
S heduling Cooperativo on Preemptive on Preemptive on Cooperativo on priorità
15livelli dipriorità 15livellidi priorità 63livellidipriorità basatasutimer ondiviso
Numeromassimodi task Dipendedallamemoria 16 63 Dipendedallamemoria
disponibileabordo disponibileabordo
GestionedegliEventi Semafori,messaggi, Semafori Semafori,messaggi, Messaggi
odedimessaggi odedimessaggi
O upazione di memoria
ROM del nu leo 1
7Kbytes 5Kbytes 9Kbytes 8Kbytes
Ar hitetture supportate Vastagamma PIC18-24-30-33 Vastagamma PIC 18F
(PIC,Pentium,et .) (PIC,Frees ale, ATR,et .)
Li enza Apagamento GPL Apagamento Mi rosoft'sSharedSour e
1
Valoremedioindi ativo, al olato onsiderandouna ongurazionemultitasking on supportoalla gestionedi eventi edi ritardi. Peril
µ
TNetOS èstatodeterminatotramiteben hmarkutilizzandoilCompilatoreC18dellaMi ro hip,perglialtritramitedatiforniti onla lorodo umentazione.Il framework Roboti s4.NET
Roboti s4.NETèunframework diprogrammaziones rittopersvilupparepro-
grammidi ontrollodisistemiroboti iaventiun'ar hitetturabio-like , ioèispi-
rataalsistemanervosoumano(g. 4.1). Ilmodellosottostantesibasasullano-
zionedi orpo. Èstatoprogettatoperpermettereilriusodeimoduliefornireun
supportoautomati oall'implementazionedellainfrastrutturadi omuni azione
fradi essi.
Figura 4.1 Confronto fra sistema nervoso biologi o ed ar hitettura
Roboti s4.NET
•
Il Brain ( ervello): è responsabile della parte ognitiva del sistema di ontrollo,•
LaBodymap: una lasseutilizzataperpermetterela omuni azionetrail Braineilrestodelsistema,•
Il Body ( orpo): un sistema multi-agente omposto da Roblet, ioè da moduli software indipendenti he omuni ano on il Brain attraversolaBodymap;
Figura4.2Ar hitetturadiRoboti s4.NET.Ilframeworkfornis eun'infrastrut-
turadi omuni azionepersvilupparesoftware`intelligente'ingradodiinteragire
onilrestodel orpo. Le omuni azionipossono oinvolgereognilivello.
L'obiettivodel frameworkèdi in entivare leastrazioni di programmazione
ri hiesteperimplementareilBodyelaBodymap. Èstatoimplementatousan-
do la piattaforma .NET di Mi rosoft, pertanto si appoggia ai me anismi di
ree tion(vedipar. 1.1)eai ustomattributes(vedipar. 1.1.1) omestrumenti
di hiarativiperdes rivere omeirobletsono onnessifraloroe onlaBodymap.
L'usodeirobletpermettediorganizzareeventualisensorieattuatoriingrup-
pilogi ie onsentedipre-pro essareidati,fornendounprimopassodiastrazio-
ne. Comeesempio, unrobletpuò ri onos ereun ertonumero difa e riprese
daunavideo ameraeinviareallabodymapunalistadellepersoneri onos iute,
roblet è asso iato un thread per la sua ese uzione. Come si vede in g. 4.2
unpro essopuò ontenerediversiroblet,el'ar hitetturapuòesseredistribuita
fra più nodi di una rete. Come nei sistemi viventi, esiste quindi una sortadi
intelligenzaperiferi a apa edieettuareunaprimaelaborazionedeisegnaliin
ingressoalsistema,edirielaborareleinformazioniinviateledalBrain,primadi
trasformarleinazioni.
Iroblet omuni anomediantel'interfa iadirete,analogaallaretediassoni
diunsistemavivente,doveviaggianoipa hetti ontenentileinformazioni. Un
robletèin gradodiri evereattraversolaBodymapimessaggiinviatidalBrain
e di rispondereatali messaggi. Ad esempio,se il Braindi unrobot de idedi
spostareilsistemainavantidiunmetro,invieràaimotori(peresempioiroblet
MotorSxeMotorDx),attraversolaBodymap,ilmessaggio`avantidiunmetro';
questi, unavoltari evutoil messaggio,inizierannoa al olarequantigiridelle
ruotesonone essarian héilrobotsispostiinavantidiunmetroeavvieranno
imotori inmodotaledaeettuarelospostamentori hiesto.
Dall'esempio pre edente,si può intuireuna delle innovazioni fondamentali
he Roboti s4.NETha introdotto nel mondo della roboti a. Ipotizziamo, per
esempio,divolerspostareilnostrosoftwaredi ontrollodaunrobotadunaltro
avente un'ar hitettura hardware dierente. In passatosaremmo stati ostret-
ti a ris rivere il software per riadattare il ontrollo al nuovo hardware. Con
Roboti s4.NET,inve e,ène essarioris riveresoloedes lusivamente iroblete
trasferire poi il Brain dauna piattaformaall'altra, senza dover ambiare una
sola rigadi odi e. Questovuoldire heèpossibile rearerobot aventialloro
interno più programmiin ese uzione rappresentantii roblet dedi ati. Avvian-
do il Brain,questo saràin grado di omandareil robot, senza he nessunogli
abbiadovutodiresu herobot èinstallato; sarannoi robletstessi adinviargli,
mediante laBodymap,lelorointerfa edi omuni azione,dando osì alBrain
un'immagine,alui omprensibile,delnuovosistema.
Questolavoroha portato allo sviluppodi un nuovorobot hiamatoR2D2,
he è diventato il tester per la nuovapiattaforma roboti asviluppata. A di-
mostrazione di quanto aermato, è stato possibile ontrollare, on lo stesso
Brain, due robot aventi ar hitetture ompletamente diverse, ome l'ER1della
EvolutionRoboti sedR2D2,ilrobotsviluppatodalteamdi Roboti s4.NET 1
.
1
4.1 L'infrastruttura di omuni azione
Ilframeworkimplemental'infrastrutturadi omuni azioneusandounsistemaa
messaggi hesi appoggiasul proto olloUDP;imessaggihannounlimitemas-
simodi grandezza parialla MTU dellarete utilizzata. Nel asodel
µ
TNetOS ( ome si vedrà nel ap. 5), la omuni azione avviene tramite interfa ia se-rialee vedremoquali strategiesono stateadottate per integrareil sistema nel
framework.
ImessaggisonodenitiinXML,inquantorappresentaillinguaggiousatoda
.NETperlaserializzazione;iroblet eil Brainpossonode idere se ondividere
ladenizionedellestrutturedatiopro essaresempli ementelalororappresen-
tazioneXML.Questa aratteristi arendeilframeworkpiùs alabileinquantoil
proto ollopermetteildisa oppiamentodei omponenti softwareutilizzati per
denireilsistemadi ontrollodelrobot.
Quandounroblet invia unmessaggio alla Bodymap, questalo inseris e in
unalberoXMLprin ipale;questaoperazionepermettealBraindiaveresempre
unavisioned'insiemedelsistema. QuestoalberoXML,presentenellaBodymap,
rappresenta l'interfa ia di omuni azione frail sistema nervoso entrale ed il
sistemanervosoperiferi oedèassimilabilealnostro ervelletto. Alla ri ezione
di un messaggio, il Brain può rispondere inviando un nuovo messaggio alla
Bodymap, heprovvederàadinviarloalroblet destinatario.
Inviae ezionale,èpossibilerealizzareuna sortadi omuni azionediretta
fra roblet (detti Friend), he generalmente non possono omuni are fra loro.
Questapossibilitàèstataprogettataperimplementareunasortadi omporta-
mento reattivodelrobot: in al une ir ostanze, larispostaadundato evento
esternodeveessereeettuataintempibrevi;puòquindinonesseresi uroinvia-
reunmessaggioal ervelloepoiaspettare hesiapro essatoe hevengade isa
una data azione. An he in questo aso, ome nell'organismo umano, quando
'èunperi oloimmediatoil orpodeveesserein gradodi reagirein modonon
os iente. Come esempio si pensi al asoin ui a identalmente mettiamo la
manosuunfuo o: ilbra iosiritraeistantaneamenteedautomati amente.
4.2 Il Brain
IlBrainsvolgelefunzioni ognitivedi ontrolloedalsuointernoospitalaBody-
map;quet'ultima,grazieadunMessageListener,avverteilBraindellapresenza
di messaggiin ingresso. Ilproto ollodi omuni azione èasin rono, osì he i
ivarirobletpossonoesseretranquillamenteriavviatiin asodiblo o,senza he
il sistema vadariavviatointeramente. Seunroblet siblo a, laBodymap es-
seràsempli ementedi ri evereinformazionidaesso( omeseunartosmettesse
di omuni areilsuostatoal ervello). Ilroblet,unavoltariavviato, omin erà
nuovamente adinviare informazionialla Bodymap senzanessun bisognodi un
riavviodi quest'ultima. Analogamente,seèlaBodymap asmettere di funzio-
nare, i roblet ontinuano omunque nella omuni azione e il suo riavviosarà
indolore per il resto del sistema. La robustezza della omuni azione è legata
all'impiegodelproto olloUDPpiuttosto heTCP.
4.3 La Bodymap
LaBodymapèla lasse heinterfa iail ervello olrestodel orpo;ingenere
èun omponente in lusonel software hegestis eil Brain. È ompostadadue
parti:
•
unalberoXMLin uivengonoinseritituttiimessaggiri evutidairoblet,•
unsistema di omuni azione pers ambiaremessaggi on i roblet fa enti partedel orpo;L'alberoXMLdes rivelostato orrentedel orpo.
Nelmomentoin uiunrobletvieneavviato,siregistraallaBodymapinvian-