18.08.2013 Views

UNIVERSITA' DEGLI STUDI DI PAVIA - Robotica

UNIVERSITA' DEGLI STUDI DI PAVIA - Robotica

UNIVERSITA' DEGLI STUDI DI PAVIA - Robotica

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

impostato al momento della compilazione del kernel), quindi, dichiarando un<br />

identificatore di risorsa maggiore di 19 si ottiene una sicura scrittura oltre i limiti<br />

del vettore, in spazi di memoria assegnati presumibilmente ad altre variabili.<br />

Questo è un errore alquanto subdolo, poichè non è affatto facile da rilevare,<br />

essendo dipendente da ciò che si trova nella locazione di memoria che viene<br />

sovrascritta errorneamente. Si può andare dalla stanpa di un carattere errato sullo<br />

schermo al blocco della macchina.<br />

A.6.2 Cyclic Asynchronous Buffer<br />

La comunicazione mediante CAB, che è di tipo 1 a molti, permette ai<br />

processi di essere asincroni tra di loro: il task che deve scrivere nel CAB lo fa<br />

senza preoccuparsi di eventuali letture concorrenti e cancellando il valore<br />

precedentemente memorizzato, mentre un task che deve leggere dal CAB avrà<br />

sempre a disposizione l'ultimo valore che vi è stato scritto.<br />

L'utilizzo dei CAB avviene mediante le seguenti primitive:<br />

• CAB cab_create(char *name, int dim_mes, BYTE num_mes) alloca<br />

spazio in memoria per una variabile di tipo CAB. name è una stringa<br />

che identifica il CAB ed utile in fase di debugging e dim_mes specifica<br />

la dimensione in byte del messaggio che deve essere contenuto nel<br />

CAB. num_mes indica quanti task possono leggere<br />

contemporaneamente dallo stesso CAB, in quanto il gestore del<br />

protocollo alloca memoria per creare l'esatto numero di copie del<br />

messaggio e garantire, quindi, che tutti i processi possano leggere in<br />

parallelo la propria copia;<br />

• char *cab_reserve(CAB id) serve a ottenere il puntatore alla locazione di<br />

memoria ove deve essere scritto il messaggio da parte del task che<br />

aggiorna il CAB;<br />

173

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!