UNIVERSITA' DEGLI STUDI DI PAVIA - Robotica
UNIVERSITA' DEGLI STUDI DI PAVIA - Robotica
UNIVERSITA' DEGLI STUDI DI PAVIA - Robotica
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