initial skeleton ex11
[des2015.git] / mart / ex11 / ex11.c
1 #include <stdio.h>
2 #include <signal.h>
3 #include <unistd.h>
4 #include <sys/mman.h>
5 #include <sys/io.h>
6
7 #include <native/task.h>
8 #include <native/timer.h>
9 #include <native/intr.h>
10
11 #include <rtdk.h>
12
13 #define LPT1IRQ 7
14 #define TESTSAMPLES 20
15
16 RT_TASK task;
17 RTIME times[SAMPLES];
18
19 void taskf(void *arg)
20 {
21 //Register as interrupt handler
22 RT_INTR intr;
23 rt_intr_create(&intr, NULL, LPT1IRQ, 0);
24
25 //Measure average time of the clock
26 RTIME dur = rt_timer_read();
27 unsigned int i;
28 for(i = 0; i<TESTSAMPLES; i++){
29 rt_intr_wait(&intr, TM_INFINITE);
30 }
31 dur = rt_timer_read() / TESTSAMPLES;
32 rt_printf("%d interrupts: average time: %.2f\n", TESTSAMPLES, dur);
33
34 //Do the magic
35 while(1){
36 rt_intr_wait(&intr, TM_INFINITE);
37 }
38 }
39
40 int main(int argc, char* argv[])
41 {
42 rt_print_auto_init(1);
43 mlockall(MCL_CURRENT | MCL_FUTURE);
44
45 // Get permission to write to parallel port
46 ioperm(0x37A, 1, 1);
47 ioperm(0x378, 1, 1);
48 outb(inb(0x37A) | 0x10, 0x37A);
49
50 rt_task_create(&task, NULL, 0, 50, 0);
51 rt_task_start(&task, &taskf, 0);
52
53 pause();
54 }