23.07.2013 Views

Regulering af Quad-rotor helikopter - VBN - Aalborg Universitet

Regulering af Quad-rotor helikopter - VBN - Aalborg Universitet

Regulering af Quad-rotor helikopter - VBN - Aalborg Universitet

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

void AvrXResetSemaphore(pMutex fjerner alle tråde fra sem<strong>af</strong>or-køen og fjerner alle ejer-<br />

skaber, således at sem<strong>af</strong>oren opnår samme tilstand som da den lige var oprettet.<br />

J.2.2 Timer-køer<br />

Den sidste nævneværdige kø-type der er implementeret i AvrX er timer-køer der giver mulighed for<br />

at sætte opgaver i kø i et vist antal trådskift. En timer-kø oprettes ved først at oprette en datastruktur<br />

<strong>af</strong> datatypen TimerControlBlock og dernæst lade denne tælle ned fra en given værdi, hvilket<br />

gøres således:<br />

1 AvrXStartTimer (& t i m e r −kø , n _ t r å d _ s k i f t )<br />

Denne vil dernæst tælle ned hver gang interrupt-rutinen bliver kørt, og tråde kan vente på at timeren<br />

bliver talt ned til nul, ved at benytte denne som en sem<strong>af</strong>or med følgende funktionskald:<br />

1 AvrXWaitTimer(& t i m e r −kø ) ;<br />

Dette funktionskald fungerer fuldstændig som en sem<strong>af</strong>or, således at trådene der benytter funktions-<br />

kaldet bliver placeret i timer-køen og bliver først ført tilbage til aktiv-køen når timeren har talt ned<br />

til 0.<br />

Hvis det kun ønskes at parkere en enkelt tråd i en timer-kø kan dette gøres ved hjælp <strong>af</strong> funktions-<br />

kaldet:<br />

1 AvrXDelay(& t i m e r −kø , n _ t r å d _ s k i f t ) ;<br />

Det skal dog nævnes at timer-køer kun kan benyttes til en nedtælling <strong>af</strong> gangen, hvorfor det er<br />

nødvendigt at lave flere datastrukturer <strong>af</strong> typen TimerControlBlock hvis der ønskes forskelligt<br />

delay på forskellige tråde.<br />

A42

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

Saved successfully!

Ooh no, something went wrong!