Firmware - Gennaio 2015 / N°108 - (Page 45)
TOOLS
SKILLS
Una funzione di priorità non possiede
uno stack dedicato (salvo che l'utente
desideri specificamente allocarne uno).
Non solo, visto che non esistono cambi
di contesto propriamente detti o stack
separati, possono essere definite diverse funzioni di questo tipo senza degradare le prestazioni o sprecare risorse di
sistema.
Pertanto, ogni sub-task, nel senso tradizionale, può essere definito come una
funzione prioritaria indipendente, gli può
essere assegnato un qualsiasi livello di
priorità e può essere chiamato da qualsiasi parte del codice.
A questo riguardo in figura 2 si pone in
evidenza la possibile implementazione
del meccanismo di questo tipo, a funzioni prioritarie. Il livello 3 viene anticipato
dal livello L2, in altre parole, si alza il suo
livello di priorità e successivamente si
consegna il messaggio.
Quando il lavoro di L2 risulta concluso,
il livello di priorità originale è ripristinato
e l'elaborazione di L3 riprende normalmente. Un approccio di questo tipo permette anche la gestione degli argomenti passati alle funzioni: l'argomento è, in
sostanza, un puntatore al messaggio che
deve essere consegnato.
Questo meccanismo è anche chiamato "interfunction communication" e non
sono necessarie le code di messaggi o
mailbox. Una funzione di priorità non si
sospende in attesa di un nuovo messaggio. Piuttosto, viene invocata quando il
messaggio è pronto.
POTENZIALI INCONVENIENTI
E RELATIVI RIMEDI
In questo contesto ci sono due potenziali inconvenienti. Da una parte i semafori
non possono essere utilizzati per proteggere i dati condivisi poiché una funzio-
Figura 3: Uso dei "Priority Object" e variazione del livello di priorità.
ne prioritaria non può sospendere la sua
esecuzione.
Infatti, in una soluzione di questo tipo
può essere utile fornire funzioni prioritarie dedicate che gestiscono l'accesso
ai dati condivisi a un livello di priorità
fissa (questo comporta implicitamente l'uso di una FIFO) o di aumentare il
livello di priorità sulla sezione critica
allo stesso modo di come già succede
in situazioni quali il "priority ceiling" in
RTOS tradizionali.
Dall'altra parte, una funzione di priorità F
non può sospendere e attendere il risultato di un'altra funzione di priorità G.
Se è necessario, la funzione priorità F
deve essere connessa a un segnale sollevato quando la funzione G ha disponibile la sua computazione. In questo
caso, potrebbe essere necessario dividere la funzione di priorità F in due funzioni prioritarie, F1 e F2. F1 esegue il codice che è indipendente dal risultato di
G. F2 è collegato ad un segnale emesso da G non appena si conclude la sua
computazione.
Non solo, esiste anche il problema rappresentato dalla coesistenza di funzioni.
In effetti, se è possibile mescolare funzioni e compiti prioritari all'interno di un
sistema, allora sarà necessario distinguere le diverse funzioni dai task.
Inoltre, al fine di ottenere un time-slicing,
è necessario garantire che le funzioni
di priorità possano essere incapsulate
all'interno di un task.
"PRIORITY OBJECT"
Questo è un altro aspetto per nulla secondario. Infatti, invece di assegnare livelli di priorità alle funzioni, possiamo
spingerci oltre e definire livelli di priorità agli oggetti. Un priority object è una
struttura di dati, o una risorsa, cui è assegnato un livello di priorità.
Le funzioni, in questo caso, sono metodi
che eseguono operazioni su vari oggetti
con diversi livelli di priorità. Una funzione di priorità eredita il livello di priorità
dell'oggetto che sta elaborando. Oggetti
prioritarie sono essenzialmente uno strato sopra le funzioni prioritarie.
A questo riguardo in figura 3 si pone in
evidenza un esempio di questo tipo dove
sono definiti due o più oggetti di livello 2
(un servizio di bassa priorità e un servizio
di alta priorità). La stessa L2 funzione può
gestire entrambi gli oggetti ereditando il livello di priorità dell'oggetto che sta elaborando. Questo è troppo costoso da ottenere utilizzando sistemi tradizionali. Il livello
di priorità di un oggetto è impostato in fase
di attivazione dell'istanza. Il livello di priorità può essere ereditato da un tipo genitore
o della serie di un modulo di priorità.
IMPLEMENTARE LE "FUNCTION PRIORITY":
SUPERTASK
Vediamo ora come potrebbe essere implementato un sistema di questo tipo. Per
prima cosa s'introduce il concetto di Supertask come raccolta di attività secondarie. Tuttavia in questo caso ogni sot-
Tabella dei contenuti per la edizione digitale del Firmware - Gennaio 2015 / N°108
SOMMARIO
Tips’n Tricks Energy Harvesting
FOCUS La Rivoluzione Biomedicale “Bottom-Up”
Skills Low Power Capacitive Sensing
INside
USB 3.0: SuperSpeed con il “-25%” dei Consumi!
Com’è Fatta una Penna USB?
ANALOG Gestire la Luce Ambiente con TI OPT3001
SPOTlight Migliori Prestazioni dai Ricevitori “Very Wide Band” a Conversione Diretta
Tools Le “function priority” di Portos
News
EVENTS
Guida
Firmware - Gennaio 2015 / N°108
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2015-02_109
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2015-01_108
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-12_107
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-11_106
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-10_105
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-09_104
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-07_102
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-06_101
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-05_100
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-04_99
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-03_98
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-02_97
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2014-01_96
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-12_95
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-11_94
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-10_93
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-09_92
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-07_90_91
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-06_89
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-05_88
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-04_87
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-03_86
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-02_85
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2013-01_84
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-12_83
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-11_82
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-10_81
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-09_80
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-07_78-79
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-06_77
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-05_76
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-04_75
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-03_74
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-02_73
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2012-01_72
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2011-12_71
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2011-11_70
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2011-10_69
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2011-09_68
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2011-07_66_67
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2011-06_65
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2011-05_64
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2011-04_63
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2011-02_62
https://www.nxtbook.com/newpress/inwaredizioni/Firmware/2011-02_61
https://www.nxtbook.com/newpress/inwaredizioni/Firmware/2011-01_60
https://www.nxtbook.com/newpress/inwaredizioni/Firmware/2010-12_59
https://www.nxtbook.com/newpress/inwaredizioni/Firmware/2010-11_58
https://www.nxtbook.com/newpress/inwaredizioni/Firmware/2010-10_57
https://www.nxtbook.com/newpress/inwaredizioni/Firmware/2010-09_56
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2010-07_54-55
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-2010-06_53
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-magazine/Maggio-2010-52
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-magazine/Aprile-2010-51
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-magazine/Marzo-2010-50
https://www.nxtbook.com/newpress/inwaredizioni/Firmware-magazine/Febbraio-2010-49
https://www.nxtbookmedia.com