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