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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Con l'uso della sola primitiva wait_for_key() è possibile terminare il ciclo<br />

solo alla pressione di un tasto, quindi è richiesta la presenza dell’utente che<br />

comandi la terminazione di un programma.<br />

Per fare in modo di uscire dal ciclo a richiesta di un processo, per esempio<br />

quando questo termina al propria elaborazione, e quindi garantire un possibile<br />

funzionamento batch dell’intero sistema, è stata introdotta la primitiva<br />

unblock_key_waiting(), che cambia il valore di un flag globale al modulo kc.h,<br />

che a sua volta viene controllato ad ogni iterazione del loop in wait_for_key().<br />

Cambiando questo flag il loop ha termine senza che venga premuto alcun tasto.<br />

Quando un task richiama la funzione unblock_key_waiting() il loop ha termine, e<br />

il programma principale, bloccato a livello della wait_for_key() può proseguire.<br />

La gestione del particolare tasto (o combinazione di tasti) premuto è<br />

demandata ad una funzione che accetta come parametro il codice del tasto<br />

premuto. Per poter controllare direttamente diversi parametri di funzionamento<br />

del software, sia in fase operativa che, soprattutto, in fase di calibrazione, il primo<br />

parametro di wait_for_key() è quindi un puntatore a funzione che accetta come<br />

parametro il codice ASCII del tasto premuto.<br />

Ogni modulo, definendo una propria funzione di questo tipo, la quale in<br />

genere effettua uno switch tra i codici dei tasti a cui è sensibile, è in grado di<br />

personalizzare la gestione della tastiera a seconda delle necessità.<br />

La funzione di gestione personalizzata va strutturata nel modo seguente:<br />

int function_name(int ascii_code)<br />

{<br />

switch (ascii_code) {<br />

case key_code : {<br />

/* Gestione del tasto premuto */<br />

break;<br />

}<br />

}<br />

}<br />

133

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

Saved successfully!

Ooh no, something went wrong!