Added the null syscall and a userapp that exploits it.
[akaros.git] / user / null.c
1 // null app
2 #include <inc/lib.h>
3 #include <inc/types.h>
4 #include <inc/syscall.h>
5
6 uint64_t avg(uint32_t (COUNT(length) array)[], int length) 
7 {
8         uint64_t sum = 0;
9         for(int i=0; i<length; i++) {
10                 sum+=array[i];
11         }
12         return (length > 0) ? sum/((uint64_t)length) : 0;
13 }
14
15 void umain(void)
16 {
17         //Get the measurements a bunch of times to make sure its accurate
18         #define NUM_ITERATIONS  500
19         uint32_t times[NUM_ITERATIONS];
20         for(int i=0; i<NUM_ITERATIONS; i++) {
21                 //times[i] = get_time();
22                 sys_null();
23                 //times[i] = get_time() - times[i];
24         }
25         
26         //Compute the average and print it
27         uint64_t a = avg(times, NUM_ITERATIONS);
28         cprintf_async("Average latency: %ld", a);
29         //cprintf("Standard Deviation: %d", stddev);
30
31         //Spin to make sure we don't have any resources dealocated before done
32         while(1);
33 }