Anno Accademico:
1999/2000
Materia:
Informatica Industriale
Professore:
Salvatore Cavalieri
Autore:
Obiettivi
Teorici:
-
Schedulazione Profibus DP, mediante l’algoritmo Extended Rate Monotonic.
-
Ricostruzione segnali campionati.
Software
Realizzati:
-
Tool per la schedulazione di varibili periodiche e/o asincrone, ed il
controllo di processo.
-
Toolbox Matlab per la ricostruzione ed analisi dei segnali campionati.
Tools SchedAPP
Questo tools presenta
diversi eseguibili:
-
Tempo.exe è un programma che testa la precisione del sistema
operativo nella gestione del tempo, per fare ciò viene utilizzata
l’istruzione asm RDTSC (disponibile in tutte le CPU dal Pentium
in avanti) che permette di ottenere una precisione dell’ordine di 0.01
microsecondi
(per CPU con frequenza >=100 Mhz).
-
AppCom.exe è un programma utilizzato per leggere e scrivere
dati mediante le funzioni di comunicazione Applicom.
-
SchedApp.exe è il programma che si occupa delle problematiche
di schedulazione, comunicazione e controllo. Per quanto riguarda la comunicazione,
vengono utilizzate le primitive “wait mode” fornite dalla scheda
di comunicazione Applicom. Il controllo è invece effettuato
da un’apposita DLL selezionata durante la stesura di un progetto SchedApp.
La realizzazione di una DLL di controllo (da ora CDLL) è
abbastanza semplice, infatti si tratta di una normale DLL, dove però
è obbligatorio definire ed implementare alcune funzioni di interfaccia
usate per “l’aggancio” con SchedAPP, sono comunque forniti degli
esempi di CDLL ben documentate che possono essere utilizzate come base,
e opportunamente modificate. Si nota che SchedApp.exe crea due files binari
uno nominato “datap.dat”, dove vengono salvate tutte le variabile
periodiche e/o asincrone opportunamente selezionate, l’altro “timing.dat”
contiene tutte le informazioni temporali riguardanti l’esecuzione di un
progetto.
-
_SchedApp.exe svolge le stesse funzioni del programma precedente,
però simulandole: le variabile periodiche da controllare e/o archiviare
vengono generate dalla CDLL, se è implementata la funzionalità
di simulazione, oppure vengono generate interamente associando ad ogni
variabile periodica una funzione d’onda a dente di sega con un periodo
50 volte maggiore rispetto a quello di campionamento della variabile stessa.
Toolbox Matlab Campionamento
Questo toolbox, svolge sostanzialmente tre compiti
:
-
Generare funzioni note campionate
-
Ricostruire funzioni campionate
-
Graficare opportunamente le funzioni ricostruite
Inserendo la directory
in cui si trova il toolbox nel path del Matlab, si rende disponibile l’help
nel quale sono descritte le funzioni implementate ed i relativi parametri.
In questo Tutorial, viene
descritto l’uso dell’interfaccia grafica del programma SchedAPP,
per fare ciò verranno utilizzate delle immagini catturate dalla
versione compilata per la simulazione (_SchedApp.exe), che sono quasi equivalenti
a quella compilata con le librerie Applicom (cambia solo il titolo delle
finestre).
Schermata Iniziale
|
Fig.1 Schermata iniziale SchedAPP
|
In Fig1. viene mostrata
la schermata iniziale di SchedAPP, in questa finestra ci sono solo 3 elementi
attivi : il pulsante “Nuovo”, il pulsante “Apri”, e l’icona
in alto a destra (che è sempre attiva) detta icona About. Descriviamo
ora il funzionamento degli elementi.
-
Pulsante “Nuovo” : cliccando su tale pulsante è possibile
definire un nuovo progetto, per fare ciò viene seguita la stessa
procedura usata per modificare un progetto già esistente, descritta
in seguito.
Icona About
|
Fig.2 Finestra “Informazioni Su..”
|
Cliccando sull’icona
About viene aperta una nuova finestra (Fig2.) nella quale vengono riportate
informazioni sul programma SchedAPP.
Apertura Progetto
Cliccando sul pulsante
“Apri”, viene mostrata una finestra standard di dialogo mediante
la quale è possibile scegliere il progetto che si vuole caricare;
svolta questa operazione il programma presenta il seguente aspetto (fig3),
si nota che nella casella di testo contenuta nel pannello “Progetto” è
visualizzato il path assoluto del progetto caricato.
|
Fig.3 SchedAPP con progetto caricato
|
Dalla figura 3 è
possibile vedere che si sono stati attivati dei nuovi elementi, descriviamo
quelli che svolgono una funzione più semplice, gli altri verranno
spiegati in seguito:
-
Pulsante “Salva” : cliccando su tale pulsante, viene mostrata una
finestra standard di dialogo mediante la quale è possibile salvare
su disco il progetto attualmente in memoria.
-
Pulsante “Esporta” : cliccando su tale pulsante viene salvato, nello
stesso path del progetto, un file di testo che descrive completamente il
progetto in memoria.
Modifica Progetto (variabili Periodiche)
Cliccando sul pulsante
“Modifica” (vedi Fig.3), viene visualizzata una finestra (vedi Fig
4.) mediante la quale è possibile modificare i parametri del progetto
attualmente in memoria.
|
Fig.4 Parametri Progetto – Definizione variabili Periodiche
|
Pannello “Tabella Variabili Periodiche”
In questo pannello è
contenuta una tabella nella quale vengono descritte le variabili periodiche
definite nel progetto, il significato delle colonne è il seguente
:
-
Colonna N. Var : è il numero d’ordine della variabile, che
viene usato per identificarla.
-
Colonna N. Channel : è il canale di comunicazione da usare
per accedere alla variabile.
-
Colonna N. Addres : è l’indirizzo del dispositivo a cui richiedere
la variabile da leggere.
-
Colonna N. Bit : questa colonna contiene un codice composto da 3
caratteri (campi) :
-
Primo Carattere: può assumere
2
valori, “I” indica che il dispositivo è di input, mentre
il valore “Q” indica che il dispositivo è di output.
-
Secondo Carattere: può assumere
2
valori, “S” indica che la variabile verrà salvata in un file
database binario, mentre il valore “–“ indica che la variabile non
deve essere salvata. Si nota che per accedere ai dati contenuti nel file
database (datap.dat) è necessario utilizzare il programma
ExportData,
descritto più avanti.
-
Secondo Carattere: indica la dimensione
della variabile espressa in bit.
-
Colonna Periodo : è il periodo di scansione della variabile
espresso in millisecondi, si nota che il più piccolo periodo definibile
è pari a 10 ms.
-
Colonna Commento : è un commento che descrive la variabile.
Selezionando una variabile
dalla tabella questa viene mostrata in formato esteso nel pannello “Comandi
Tabella”.
Pannello “Comandi Tabella”
Questo pannello contiene
2 tipo di oggetti separati da una barra, delle caselle di testo (modificabili
dall’utente) che descrivono la variabile corrente, e dei pulsanti che servono
per le operazioni di inserimento e modifica dei dati nella tabella, descriviamoli
:
-
Pulsante “Add” : cliccando su tale pulsante, la variabile descritta
nelle caselle di testo viene inserita nella tabella.
-
Pulsante “Remove” : cliccando su tale pulsante, la variabile selezionata
nella tabella viene rimossa.
-
Pulsante “Modify” : cliccando su tale pulsante, la variabile selezionata
nella tabella viene modificata con i valori presenti nelle caselle di testo
(variabile corrente)
-
Pulsante “Clear” : cliccando su tale pulsante, la tabella viene
completamente cancellata.
-
Pulsante “Testa” : cliccando su tale pulsante, viene eseguito un
test circa la schedulabiltà del progetto, si nota che per effettuare
tale test è necessario riempire i parametri dei due pannelli non
ancora descritti.
Pannello “Parametri Canale Comunicazione”
In questo pannello è
possibile definire i parametri del canale di comunicazione definiti nel
capitolo Schedulazione – Calcolo Trr.
Pannello “Parametri Canale Comunicazione”
In questo pannello vengono
mostrati i risultati del test di schedulabilità del progetto, i
parametri mostrati nelle caselle di testo sono definiti nel capitolo Schedulazione
– Schedulazione on-line. Facciamo comunque alcune osservazioni:
·Il
parametro Na_max, deve essere definito dall’utente prima di eseguire il
test.
·La
ComboBox commento, presenta 3 elementi:
1.Risultato
del Test.
2.Trr
massimo, per le variabili periodiche.
3.Trr
massimo, per le variabili asincrone.
Pannello Anonimo
Questo pannello (vedi Fig.4 in basso a destra) contiene
3 pulsanti:
-
Pulsante “Ok” : Ritorna nella finestra principale (vedi Fig. 3)
mantenendo le modifiche applicate al progetto, per renderle permanenti
è necessario salvare il progetto.
-
Pulsante “Cancel” : Ritorna nella finestra principale (vedi Fig.
3) senza mantenere le modifiche applicate al progetto.
-
Pulsante “Controllo” : Apre una nuova finestra mediante la quelle
è possibile definire le variabili asincrone, e l’algoritmo di controllo.
Modifica Progetto (variabili Asincrone)
In Fig.5 viene mostrata la finestra utilizzata
per la definizione delle variabili asincrone, e del modulo di controllo.
|
Fig.5 Parametri Progetto – Definizione variabili Asincrone
|
Pannello “Tabella Variabili Comando”
In questo pannello è
contenuta una tabella nella quale vengono descritte le variabili asincrone
definite nel progetto, il significato delle colonne è lo stesso
di quello visto per le variabili periodiche, con alcune differenze:
-
Colonna OFF : è il valore di default utilizzato per “spegnere”
la variabile.
-
Colonna ON : è il valore di default utilizzato per “accendere”
la variabile.
Pannello “Comandi Tabella”
Per la descrizione di questo pannello si ci può
riferire all’analogo definito nella finestra di configurazione delle variabili
periodiche.
Pannello “Modulo Controllo”
In questo pannello è
possibile selezionare e configurare un modulo di controllo (che verrà
descritto in seguito), che da ora in poi chiameremo CDLL (Controll
DLL); notiamo che pannello è diviso in due parti da una barra verticale,
nella parte a sinistra sono presenti i seguenti bottoni:
-
Pulsante “Apri” : cliccando su tale pulsante viene aperta una finestra
standard di dialogo, mediante la quale è possibile selezionare la
CDLL; se viene scelto un modulo nella casella di testo sotto i bottoni
ne viene visualizzato il path assoluto.
-
Pulsante “Conf.” : tale pulsante è attivo solo se la CDLL
contiene del codice visuale (cioè una finestra) mediante la quale
è possibile configurare il modulo stesso.
-
Pulsante “Del.” : cliccando su tale pulsante la CDLL correntemente
caricata viene scaricata dalla memoria.
La parte destra del modulo
contiene delle caselle di testo, nelle quali vengono visualizzate delle
informazioni relative alla CDLL attualmente in memoria.
Modulo di Controllo (CDLL)
In questo capitolo verrà data la risposta
alla seguente domanda: Cos’è un Modulo di Controllo (detto CDLL)
?
Un CDLL è un metodo
mediante il quale è possibile “iniettare” del codice esterno su
SchedAPP, per fare ciò viene utilizzata la tecnologia delle DLL,
quindi un CDLL non è altro che una particolare DLL, linkata dinamicamente
da SchedAPP, che implementa un’interfaccia
(cioè una serie
di funzioni) che ne permettono l’aggancio con SchedAPP.
In una CDLL è
possibile implementare due tipi di funzioni:
-
Simulazione : queste funzioni vengono eseguite solamente dalla versione
di SchedAPP compilata per la simulazione (_SchedAPP.exe).
-
Generali : queste funzioni vengono eseguite da qualsiasi versione
di SchedAPP (simulazione, o comunicazione)
Descriviamo ora brevemente
l’interfaccia da implementare per agganciare la CDLL con SchedAPP, per
un’analisi più approfondita (in particolare dei parametri delle
funzioni, e delle strutture usate) consultate il sorgente delle CDLL fornite
negli esempi presenti nella distribuzione di SchedAPP.
Funzioni Generali
-
InfoDLL : questa funzione è usata per fornire a SchedAPP,
le informazioni che carattarizzano la CDLL (quelle che vengono mostrate
nel pannello “Modulo di Controllo).
-
BeginDLL : questa funzione è usata per inizializzare la DLL,
si può pensare come una sorta di “costruttore” dove implementare
ad esempio il codice di allocazione di strutture dinamiche.
-
EndDLL : questa funzione è usata per de-inizializzare la
DLL, si può pensare come una sorta di “distruttore” dove
implementare ad esempio il codice che libera le risorse allocate dalle
strutture dinamiche.
-
SetupDLL : questa funzione serve per visualizzare la finestra di
configurazione (se disponibile) mediante la quale è possibile configurare
la CDLL.
-
CtrlDLL : in questa funzione viene implementato l’algoritmo di controllo,
che viene eseguito dopo avere completato la schedulazione delle variabili
periodiche; è questa la funzione che genera le variabili asincrone
la cui schedulazione è gestita mediante una coda.
Funzioni Simulazione
-
TestSimDLL : questa funzione è usata da SchedAPP per verificare
la presenza nella CDLL del codice che simula la generazione delle variabili
periodiche.
-
SimDLL : questa funzione si occupa di simulare la generazione delle
variabili periodiche, può essere usata ad esempio per simulare un
impianto e testare la funzione che implementa l’algoritmo di controllo.
Si nota che in questa funzione è possibile introdurre opportuni
ritardi mediante i quali è possibile modellizzare i tempi impiegati
per la comunicazione.
-
_Trasmette : questa funzione si occupa di simulare il processo di
trasmissione delle variabili asincrone.
Esecuzione Progetto
Dopo aver caricato (o
creato) un progetto è possibile eseguirlo cliccando sul pulsante
Start
(vedi
Fig.3) presente nel pannello “Monitoraggio Dati” della finestra principale
di SchedAPP.I passi che vengono
attuati ciclicamente (ogni microciclo) quando un progetto è in fase
di esecuzione sono:
-
Schedulazione variabili periodiche.
-
Esecuzione dell’algoritmo di controllo.
-
Schedulazione delle variabili asincrone presenti nella coda di gestione
di tali variabili.
|
Fig.6 Esecuzione di un progetto
|
Dopo avere avviato l’esecuzione
di un progetto, la finestra principale di SchedAPP assume l’aspetto mostrato
dalla figura 6, si nota la presenza di due elementi attivi (oltre all’icona
About) :
-
Pulsante “Stop” : cliccando su tale pulsante l’esecuzione del progetto
viene terminata, si nota che se il progetto viene successivamente rieseguito
i file database binari (datap.dat, timing.dat), relativi all’esecuzione
precedente, verranno persi.
-
Pulsante “Monitor” : cliccando su tale pulsante viene aperta una
nuova finestra (vedi Fig.7), mediante la quale è possibile vedere
l’evoluzione del progetto.
|
Fig.7 Monitor esecuzione di un progetto
|
Descrivamo la finestra di Monitor.
Pannello “Schedulazione”
Questo pannello contiene una tabella dove vengono
mostrati i valori assunti dalle variabili periodiche (colonna lettura),
e la relativa efficienza definita nel seguente modo:
quindi dei valori <1 del parametro efficienza indicano che la variabile
è stata affetta da errori di comunicazione (o deadline scaduta).
Pannello “Schedulazione”
Questo pannello contiene una tabella dove vengono
mostrati i valori assunti dalle variabili asincrone (colonna Scrittura),
l’efficienza, e l’azione svolta sulla variabile (colonna Azione).
Pannello “Controllo Manuale”
Mediante questo pannello
è possibile generare manualmente una variabile asincrona (normalmente
generata dalla routine di controllo), per fare ciò devono essere
eseguiti i seguenti passi:
-
Selezionare la variabile asincrona che si vuole generare mediante il controllo
ListBox.
-
Associare alla variabile un valore, per fare ciò possono essere
usati i valori predefiniti (ON, OFF) oppure dei valori custom definiti
dall’utente (è necessario di-selezionare la checkbox predefiniti).
-
Cliccare sul pulsante Trasmette, così facendo la variabile generata
viene messa nella coda della variabili asincrone.
Pannello Anonimo
Questo pannello si trova
in basso a destra (vedi Fig.7), contiene 3 elementi attivi:
-
Casella di testo : viene usato dalla routine di controllo per mandare
informazioni all’utente, solitamente è usata per indicare lo stato
in cui si trova l’impianto da controllare.
-
CheckBox : viene usata per disabilitare l’esecuzione della routine
di controllo.
-
Pulsante “Esci” : cliccando su tale pulsante la finestra Monitor
viene chiusa, si nota che se l’esecuzione della routine di controllo è
stata disabilitata alla chiusura della finestra verrà nuovamente
abilitata.
Export Dati
SchedAPP salva i valori
assunti dalle variabili (selezionate) e le temporizzazioni in due files
binari, datap.dat e timing.dat che non possono essere direttamente
consultati dall’utente, per fare ciò è necessario utilizzare
il programma ExportData, la cui finestra principale viene mostrata
nella figura 8.
|
Fig.8 Programma ExportData
|
Sono presenti due pannelli
che descriviamo.
Pannello “File”
In questo pannello sono
presenti 3 elementi attivi:
-
Pulsante “Apri” : cliccando su tale pulsante viene aperta una finestra
standard di dialogo mediante la quale è possibile selezionare il
file binario che si vuole aprire.
-
Casella di testo “N. Var” : contiene il numero di variabili memorizzate
nel file dati selezionato.
-
Casella di testo “Path File Dati” : contiene il path assoluto del
file dati selezionato.
Pannello “Variabili Campionate”
In questo pannello sono presenti 5 elementi attivi:
-
ListBox “Variabile” : permette la selezione della variabile che
si vuole esportare in un file di testo.
-
ListBox “Periodo Variabile (ms)” : mostra il periodo della variabile
se è periodica.
-
CheckBox “Matlab” : se viene selezionata, la tabella di testo generata
per esportare la variabile è priva delle intestazioni (che causano
un errore di lettura nel matlab).
-
Pulsante “Esporta” : cliccando su tale pulsante viene creato il
file di testo che esporta la variabile selezionata.
Struttura File Export Variabili Periodiche
Descriviamo ora struttura della tabella utilizzata
per esportare una variabile periodica (vedi Fig.9).
|
Fig.9 File Export di una variabile Periodica
|
Le sei colonne hanno
il seguente significato:
-
Prima Colonna [Tempo(s)]: tempo
ideale in cui deve avvenire la comunicazione, espresso in secondi
-
Seconda Colonna [Variabile]: Valore
assunto dalla variabile
-
Terza Colonna [T.Com.(ms)]: tempo,
espresso in millisecondi, impiegato per la comunicazione delle variabile
periodica.
-
Quarta Colonna [Slot]: slot del
microciclo in cui è avvenuta la comunicazione.
-
Quinta Colonna [MicroCiclo]: numero
microcicli di attesi rispetto all’istante ideale.
-
Sesta Colonna [Stato]: i
valori presenti indicano una diversa situazione
Zero:
Comunicazione Corretta.
Numero
Positivo: indica un errore di comunicazione nella primitiva Applicom,
questo numero è lo stato restituito.
Numero
Negativo: variabile non schedulata, deadline scaduta.
Struttura File Export Variabili Asincrone
Descriviamo ora struttura
della tabella utilizzata per esportare una variabile asincrona (vedi Fig.10).
|
Fig.10 File Export di una variabile Asincrona
|
le sette colonne hanno
il seguente significato:
-
Prima Colonna [Tempo(s)]: tempo
ideale in cui deve avvenire la comunicazione, espresso in secondi
-
Seconda Colonna [Variabile]: Valore
assunto dalla variabile
-
Terza Colonna [T.Delay(ms)]: tempo,
espresso in millisecondi, trascorso tra l’istante di generazione della
variabile, e l’istante iniziale della comunicazione.
-
Quarta Colonna [T.Com.(ms)]: tempo,
espresso in millisecondi, impiegato per la comunicazione delle variabile
Asincrona.
-
Quinta Colonna [Slot]: slot del
microciclo in cui è avvenuta la comunicazione.
-
Sesta Colonna [MicroCiclo]: numero
microcicli di attesi rispetto all’istante ideale.
-
Settima Colonna [Stato]: i
valori presenti indicano una diversa situazione
Zero:
Comunicazione Corretta.
Numero
Positivo: indica un errore di comunicazione nella primitiva Applicom,
questo numero è lo stato restituito.
Struttura File Export Variabili Temporizzazione
Descriviamo ora struttura
della tabella utilizzata per esportare la variabile temporizzazione (vedi
Fig.11).
|
Fig.11 File Export della variabile Temporizzazione
|
Le sei colonne hanno
il seguente significato:
-
Prima Colonna [Tempo(s)]: istante
iniziale del microciclo espresso in secondi.
-
Seconda Colonna [T.C.P(ms)]: tempo,
espresso in millisecondi, impiegato per la comunicazione delle variabili
periodiche.
-
Terza Colonna [T.Ctrl(ms)]: tempo,
espresso in millisecondi, impiegato per eseguire la routine di controllo.
-
Quarta Colonna [T.C.A(ms)]: tempo,
espresso in millisecondi, impiegato
per trasmettere le variabili asincrone.
-
Quinta Colonna [T.Tot(ms)]: tempo
totale, espresso in millisecondi, impiegato nel microciclo, si fa notare
il fatto che affinché il sistema funzioni correttamente, questo
tempo deve essere minore della durata del microciclo stesso.
-
Sesta Colonna [Coda V.A.]: numero
di variabili asincrone in attesa di essere trasmesse (in coda) alla fine
del microciclo.
Problemi e Soluzioni
In questo capitolo vengono trattati i più
importanti problemi che sono stato affrontati nella programmazione di SchedAPP,
e la relativa soluzione.
Misura Tempo
Uno degli obiettivi di
SchedAPP, è quello di valutare le performance del sistema di comunicazione,
per fare ciò è necessario potere stimare con elevata precisione
la durata degli intervalli temporali. Window offre una API “GetTickCount”
che restituisce il numero di millisecondi trascorsi dalla partenza del
Sistema Operativo, tale funzione presenta diversi problemi:
-
Un millisecondo rilevato da GetTickCount, in realtà non corrisponde
ad un intervallo temporale di un millisecondo, ma presenta una certa imprecisione.
-
GetTickCount utilizza internamente in contatore a 32 bit, ciò implica
che se il sistema è Up per circa 49.7 giorni consecutivi tale contatore
si azzera, facendo cadere l’ipotesi di crescenza monotonica che è
di fondamentale importanza per la rilevazione di intervalli temporali.
-
GetTickCount ha una scarsa risoluzione, non è in grado di apprezzare
i microsecondi (1 microsecondo = 10e-6 sec).
Window offre anche una
coppia di API “QueryPerformanceFrequency” e “QueryPerformanceCounter”
che risolvono i problemi della API GetTickCount.
Comunque in SchedAPP
si è preferito utilizzare una soluzione basata sull’istruzione ASM
RDTSC, introdotta dall’Intel su tutte le CPU di classe pentium e successive,
poiché si hanno i seguenti vantaggi:
-
Elevata Risoluzione, con una CPU che lavora ad una frequenza di 100 Mhz,
è possibile apprezzare intervalli temporali dell’ordine di 0.01
microsecondi.
-
L’istruzione RDTSC, è viene eseguita direttamente da microprocessore
quindi non è influenzata dal sistema operativo.
-
Viene utilizzato un contatore a 64 bit, che per CPU con una frequenza di
400 Mhz, si azzera dopo circa 1462 anni di uso consecutivo.
In tutte le CPU di classe
pentium e successive è presente un contatore a 64 bit che ogni ciclo
di clock si incrementa di una unita, eseguendo l’istruzione RDTSC viene
letto tale contatore la cui parte bassa viene messa nel registro a 32 bit
EAX,
mentre la parte alta viene messa nel registro a 32 bit EDX; per
ottenere maggiori informazioni è possibile consultare il file (allegato)
RDTSCPM.pdf, che contiene il data-sheet fornito da Intel.
Insieme a SchedAPP, viene
fornita (nella directory sorgenti) una piccola libreria C “SuperTime.h”,
che si basa sull’istruzione RDTSC; in questa libreria sono presenti 3 funzioni:
-
GetCPUSpeed, permette il rilevamento della frequenza della CPU,
questa informazione è necessaria per calcolare la durata degli intervalli
temporali in ms.
-
GetTick, restituisce il valore del contatore a 64 bit della CPU
-
GetTickTime, restituisce un numero double, che misura in
millisecondi l’ampiezza di un intervallo temporale.
Per maggiori informazioni
consultate il sorgente (ben commentato) della libreria.
Timer
Per effettuare la schedulazione delle variabili
è necessario richiamare la funzione che implementa la schedulazione
stessa, con una cadenza temporale pari ad un microciclo, per fare ciò
inizialmente (nella versione 1.4 di SchedAPP) è stato utilizzato
un timer offerto da window, che però presenta diversi problemi.
Il timer di Window è una semplice estensione del timer incorporato
nell'Hardware del PC, Il BIOS inizializza il chip del timer per generare
l'interrupt hardware 08H ogni 54.925 ms (circa 18.2 volte al secondo),
quindi il timer del window ha la stessa scansione, ciò comporta
che gli intervalli di tempo che il timer riesce realmente a gestire devono
essere multipli di 54.925 ms. Quindi, ad esempio settando un timer con
un periodo di 10 ms, il periodo reale è di 54.925 ms, settando il
timer con un periodo di 80 ms, il periodo reale è di circa 110 ms,
ecc... Questo succede perchè l'intervallo di tempo (periodo)
specificato in millisecondi viene sempre arrotondato per difetto a un multiplo
integrale di scansioni di clock, cioè di 54.925 ms.
Adottando questa soluzione
è possibile gestire con precisione solamente variabili che presentano
periodi multipli di 50 ms, per questo motivo ogni volta che viene inserito
un periodo, vienearrotondato per
difetto a un multiplo integrale di 50 ms, questo comportamento può
essere disabilitato attivando il menu popup (premere il tasto destro del
mouse) e selezionando l’opzione “periodo libero”.
Nella versione 1.5 di
SchedAPP per risolvere tale problema è stato utilizzato un approccio
basato sull’uso di un Thread ad alta priorità insieme alla
API Sleep, questa soluzione non impone nessun vincolo sui periodi
gestibili, quindi teoricamente permetterebbe cicli di scansione di 1 ms.
Purtroppo l’API Sleep,
usata per implementare l’attesa passiva, non è precisa quindi il
più piccolo microciclo schedulabile in modo accettabile è
di 10 ms. Anche nella versione 1.5 di SchedAPP ogni volta che viene inserito
un periodo, vienearrotondato per
difetto a un multiplo integrale di 10 ms, questa operazione (disattivabile
con la procedura descritta in precedenza) è eseguita per garantire
che il microciclo sia ³
10 ms.
Il fatto che la funzione
di schedulazione sia eseguita in un Thread ad alta priorità (TIME
CRITICAL), comporta 2 benefici :
-
I tempi di esecuzione della schedulazione sono più insensibili alla
dinamica dei processi (programmi) gestiti da Window.
-
Diminuzione della latenza introdotta dal Window nella risposta ad un I/O.