Merge from trunk.
[bertos.git] / examples / benchmark / kernel-core_avr / main.c
1 // Emtpy main.c file generated by the wizard
2 #include <cpu/irq.h>
3 #include <kern/proc.h>
4 #include <kern/signal.h>
5 #include <kern/msg.h>
6 #include <drv/ser.h>
7 #include <drv/timer.h>
8
9 MsgPort in_port;
10 Serial ser;
11 Timer t;
12
13 static void init(void)
14 {
15         IRQ_ENABLE;
16         proc_init();
17         timer_init();
18         ser_init(&ser, SER_UART0);
19 }
20
21 static cpu_stack_t proc1_stack[500];
22
23 static void proc1_main(void)
24 {
25         msg_peek(&in_port);
26         Msg *msg = msg_get(&in_port);
27         msg_reply(msg);
28         sig_wait(SIG_USER0);
29 }
30
31 int main(void)
32 {
33         init();
34         struct Process *p = proc_new(proc1_main, 0, sizeof(proc1_stack), proc1_stack);
35         msg_initPort(&in_port, event_createSignal(p, SIG_USER1));
36         Msg msg;
37         msg_put(&in_port, &msg);
38         proc_setPri(p, 5);
39         // generate timer code
40         timer_clock();
41         timer_delay(ms_to_ticks(500));
42         timer_setDelay(&t, ms_to_ticks(500));
43         timer_add(&t);
44         timer_abort(&t);
45         // generate ser code
46         char buf[10];
47         kfile_write(&ser.fd, buf, sizeof(buf));
48         kfile_read(&ser.fd, buf, sizeof(buf));
49         
50         while (1)
51         {
52                 sig_send(p, SIG_USER0);
53                 proc_yield();
54         }
55
56         return 0;
57 }
58