Tesi Robotica Analisi, progettazione e implementazione... | Page 162

i i “LP_Tesi” — 2013/10/17 — 18:27 — page 162 — #162 i 162 1 2 i 7. TERZA RELEASE BitF startOffset=14; slackStart[0]=34; slackStart[1]=18; slackStart[2]=17; Il nome slackStart sta ad indicare il valore di inizializzazione dei registri di slack. Lo startOffset come si può bene immaginare indica il punto in cui il Backtrack deve iniziare, il numero viene ricavato semplicemente guardando l’ultimo indirizzo della matrice dei punteggi modificata (Fig:7.1.5). Le variabili slackStart invece vengono calcolate eseguendo una mossa di north da una riga all’altra, per esempio da Fig:7.1.5 si può osservare come per passare dall’ultimo riempitore al secondo sia necessario sottrarre all’indirizzo una quantità pari a 42-24=18, spiegando il questo modo il valore slackStart[1]=18, per passare invece dal secondo riempitore al primo è necessario sottrarre all’indirizzo una quantità pari a 23-6=17 (slackStart[2]). Per passare invece dal primo riempitore all’ultimo le cose si fanno più complicate perché non è possibile fare semplicemente 13-43 in quanto si tratta di un numero negativo, a questo punto entra in gioco la grandezza del registro di indirizzo di tipo BitF, essendo la matrice 8*8=64, l’indirizzo deve essere di grandezza 6 bit. Bisogna quindi fare in modo di trovare il valore giusto da sottrarre a 13 per fare andare in underflow il registro e arrivare finalmente a 43. Per calcolare questo valore è necessario aggiungere al penultimo indirizzo del primo riempitore (13) il valore massimo che può essere raggiunto dal registro (64) e sottrarre il valore dell’ultimo indirizzo dell’ultimo riempitore (43), cioè 13+64-43=34, spiegando infine il valore di slackStart[0]. Nelle prossime sezioni verrà spiegato il codice che permette il funzionamento di tutto il nuovo design ma come piccola precisazione va aggiunto che la variabile intParDeep sta per internal parallelism depth e indica il numero di riempitori. 7.1.1 Modulo Raster Al contrario delle release precedenti è stato necessario dividere il modulo Raster in due implementazione differenti dell’interfaccia Raster_Ifc. In questo modo sono stati ottenuti due moduli: mkRasterLeft ed mkRasterRight. In Alg:7.1 è possibile vedere l’interfaccia, presenta solo due metodi, uno di get e l’altro di put. I moduli devono implementare per forza l’interfaccia con tutti i suoi metodi. A questo punto si rende necessario la descrizione dei moduli separatamente. i i i i