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

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

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

J.1.1 Opsætning <strong>af</strong> tråde<br />

En tråd oprettes ved at gøre brug <strong>af</strong> prekompilermakroen AVRX_GCC_TASKDEF(tråd_navn,<br />

stak_str, prioritet). Denne makro skal benyttes i stedet for et funktionshovede til tråden.<br />

Stak_str. i dette makrokald skal ikke inkludere de 35 bytes til at gemme konteksten på stakken<br />

ved tråd-skift, da dette bliver lagt oveni i makroen.<br />

Andre metoder til oprettelse <strong>af</strong> tråde er også tilgængelige, men da de er meget specifikke i deres brug<br />

vil de ikke blive beskrevet yderligere her. Det skal dog gøres at en tråd ikke er startet før funktionen<br />

AvrXRunTask(TCB(tråd_navn)) er kørt.<br />

J.2 Benyttelse <strong>af</strong> kernen<br />

I det følgende vil yderligere funktioner i kernen blive beskrevet. Disse funktioner er ikke nødvendige<br />

for at kernen fungerer, og for at flere opgaver bliver udført sideløbende, men er i stedet tilgængelige<br />

for at sikre en smertefri tilgang til fælles variable og lignende. Desuden kan de benyttes til at syn-<br />

kronisere to tråde med hinanden, således at en tråd vil vente på at en anden er nået et bestemt punkt<br />

i sin kodeeksekvering<br />

J.2.1 Sem<strong>af</strong>orer<br />

Sem<strong>af</strong>orer er objekter der kun kan ejes <strong>af</strong> en tråd <strong>af</strong> gangen. Hvis andre tråde forsøger at opnå<br />

ejerskab <strong>af</strong> en sem<strong>af</strong>or mens den er ejet <strong>af</strong> en anden tråd vil den blive placeret i en kø tilknyttet<br />

sem<strong>af</strong>oren og først komme tilbage i aktiv-køen når sem<strong>af</strong>oren igen er fri, og den derfor kan opnå<br />

ejerskab. Op til flere tråde kan på denne måde blive sat i kø til at opnå ejerskab <strong>af</strong> en enkelt sem<strong>af</strong>or.<br />

En sem<strong>af</strong>or har datatypen Mutex og skal oprettes i et scope hvor alle trådene kan tilgå denne (dvs.<br />

som global variabel).<br />

Funktionskaldende der kan benyttes til sem<strong>af</strong>orer er som følger:<br />

void AvrXWaitSemaphore(pMutex) forsøger at opnå ejerskab <strong>af</strong> sem<strong>af</strong>oren adressen pMu-<br />

tex henviser til. Hvis ikke dette er muligt (en anden tråd ejer den i forvejen) vil tråden der<br />

kalder funktionen blive fjernet fra aktiv-køen og indsat i sem<strong>af</strong>or-køen. Først når det er muligt<br />

at opnå ejerskab <strong>af</strong> sem<strong>af</strong>oren vil tråden blive genindsat i aktiv-køen og vil derved komme i<br />

betragtning næste gang der skiftes tråd.<br />

void AvrXSetSemaphore(pMutex) skal benyttes til at frigive en sem<strong>af</strong>or, dvs. give ejerska-<br />

bet <strong>af</strong> sem<strong>af</strong>oren til den næste i køen. En sem<strong>af</strong>or kan godt frigives <strong>af</strong> andre tråde end den der<br />

har ejerskabet, og således kan de også benyttes til at blokere en tråd indtil en anden har nået et<br />

vist punkt i sin eksekvering.<br />

Mutex AvrXTestSemaphore(pMutex) Denne funktion kan benyttes til at teste status på<br />

en sem<strong>af</strong>or. Funktionen sender en Mutex tilbage til kalderen. Hvis denne Mutex er lig<br />

SEM_WAIT er der tråde der står i kø ved sem<strong>af</strong>oren.<br />

A41

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

Saved successfully!

Ooh no, something went wrong!