aboutsummaryrefslogtreecommitdiff
path: root/sem4/embedded/eksamnen/notes.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'sem4/embedded/eksamnen/notes.adoc')
-rw-r--r--sem4/embedded/eksamnen/notes.adoc181
1 files changed, 179 insertions, 2 deletions
diff --git a/sem4/embedded/eksamnen/notes.adoc b/sem4/embedded/eksamnen/notes.adoc
index 5ff6874..736c275 100644
--- a/sem4/embedded/eksamnen/notes.adoc
+++ b/sem4/embedded/eksamnen/notes.adoc
@@ -9,6 +9,69 @@ ____
TODO med arduino. Og debouncer.
+== Opgave løsning
+
+____
+_Design and implement an interrupt service routine which acts on digital pin 2._
+____
+
+Digital pin 2 i arduino er mapped til atmega328p pin PD2, og er koblet på INT0.
+Derfor starter vi med at enable INT0.
+
+Se for kode ../m1/int/int.ino
+
+----
+EIMSK |= 1 << INT0;
+----
+
+Derefter kan man lave en interrupt der trigger på rising edge, hvilket man ud
+fra datasheet kan se er ISC01 og ISC00 i EICRAfor INT0.
+
+----
+EICRA |= (1 << ISC01) | (1 << ISC00);
+----
+
+Hvis man har sat den rigtige pinmode på 2, vil interrupten nu være aktiveret.
+
+----
+ISR(INT0_vect) {
+ do_the_thing();
+}
+----
+
+Her bruger jeg en normal ISR, hvor gcc håndtere det med at push registre på
+stakken og sætte dem tilbage igen efter.
+
+Dette kan man også se i den compilede fil.
+
+image::M1f1.png[]
+
+____
+_Or add a timed decision in ISR to prevent more ISR response for the nex xx mseconds._
+____
+
+Dette er gjort ved at gemme tiden for hver gang den kører med millis.
+Derefter kan man check om det er over 100 ms siden at man sidst kørte.
+
+____
+_Design a tick routing which can run a function on given times (and explain code below_
+____
+
+Har lavet en function man kalder for hver tasks man vil tick route.
+Denne bruger millis() funktionen som bagved bruger timer0.
+
+____
+_What is limitations ? like timewise starvation,..._
+____
+
+Man kan tydelig se problemet hvis man sætter task0 til at have et 10000 ms langt
+delay.
+
+Her vil man se starvation i at det hele bliver langsomere.
+
+Dette er fordi det ikke er preimtive hvilket betyder at hvis et job bare tager lang
+tid må de andre bare vente.
+
=== Noter
Findes forskellige slags realtime afhængig af hvor vigtigt det er at man
@@ -26,9 +89,56 @@ ____
Exercise 1-11
____
+=== Løsning
+
See ../emb_m2/emb_m2.ino
-TODO med arduino
+____
+_Compute the mean relative error between da and mda_
+____
+
+0.0052564806 hvilket er okay for at den kun er 16 bit.
+
+____
+_Compute the mean relative error between da2 and mda2_
+____
+
+0.1998619556 her kan man se at fejlen stiger en del.
+
+____
+_Iterate "a*=da[i];" over the length of da and measure the execution time (micros())_
+____
+
+Exe time: 1272
+
+____
+_Iterate "mult_float(&f1,&mda[i],&f); memcpy(&f1,&f,2);" over the length of mda and measure the execution time_
+____
+
+Exe time: 828
+
+____
+_Compute the relative difference between results from (7) and (9)_
+____
+
+----
+Abs diff: 444
+Rel diff: 0.35
+----
+
+____
+_Implement the fastest version of the trigornometric function "sine" that has below 2% relative error._
+____
+
+Her brugte jeg tayler til at exporimere sin(x).
+Dette blev ret præcis men var meget langsomere end sin(x).
+
+----
+TOTAL STATS
+rel err : 0.0005467962
+own time: 2420
+ard time: 134
+----
=== Noter
@@ -56,7 +166,48 @@ ____
Exercise 4-7
____
-TODO lav det her på arduino.
+=== Løsning
+
+Her har jeg lavet noget test data med to beskeder, dette løser den ret godt.
+
+Jeg bruger bare uint8_t til de to først typer.
+
+Se ../m3/m3.ino
+
+----
+DONE
+Type :1
+Recvid :514
+Transducerlevel :88
+Quiettime :50
+Masters :1
+
+MASTER: 0
+ rssi :90
+ txid :5
+ ixidtime :600
+DONE
+Type :65
+Recvid :1
+Transducerlevel :136
+Quiettime :16
+Masters :3
+
+MASTER: 0
+ rssi :23
+ txid :68
+ ixidtime :65535
+
+MASTER: 1
+ rssi :11
+ txid :171
+ ixidtime :65534
+
+MASTER: 2
+ rssi :3
+ txid :64
+ ixidtime :65535
+----
=== Noter
@@ -91,10 +242,15 @@ ____
Show LED13 blink code and explain program.
____
+Se ../emb_m4/emb_m4.ino
+
____
Explain interrupt
____
+Se ../emb_m4/jrnl/jrnl.ino
+Se ../m1/int/int.ino
+
____
Lack of control maybe bq of non-interruptable ISRs
____
@@ -103,10 +259,27 @@ ____
Procesmodel: running,ready,blocked
____
+Man kan se at processorne bruger k_sleep, hvilket gør dem blocked.
+Når de er færdige med at sleep kommer de i ready, og når de så bliver scheduled
+kommer de i running.
+
____
semaphore wait and signal
____
+Dette kan man bruge til forskellige ting.
+
+Critical region::
+ Man har noget kode der tilgår noget data.
+ Dette kan man låse ved at lave en semafor med en start værdi på 1.
+ Når nogen låser den tager de den værdi.
+Periodisk timing::
+ Man kan sætte os til at signal ens semafor hvert x sekundt.
+ Her giver man start værdi 0.
+Timing og beskeder::
+ Det er en god måde at synkronisere forskellige task.
+ For eksempel kan en ISR sætte en semafor for at signalere at der er en ny besked.
+
== J3 module 5
____
@@ -114,12 +287,16 @@ What is a semaphore, show code from above and eplaing critical region
setup
____
+Se ../m5/m5.ino
+
== J4 module 6
____
Show code for and explain message queues as a buffering tool.
____
+Se ../m6/m6.ino
+
== J5 module 6.5
____