Regulering af Quad-rotor helikopter - VBN - Aalborg Universitet
Regulering af Quad-rotor helikopter - VBN - Aalborg Universitet
Regulering af Quad-rotor helikopter - VBN - Aalborg Universitet
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