Mercurial > lcfOS
comparison examples/c3/coro.c3 @ 300:158068af716c
yafm
author | Windel Bouwman |
---|---|
date | Tue, 03 Dec 2013 18:00:22 +0100 |
parents | python/c3/wishes/coro.c3@e64bae57cda8 |
children |
comparison
equal
deleted
inserted
replaced
299:674789d9ff37 | 300:158068af716c |
---|---|
1 module coro; | |
2 | |
3 /* | |
4 Some co-routines doing some work. | |
5 | |
6 This example demonstrates how to write co-operating | |
7 routines in a nice way. | |
8 */ | |
9 | |
10 int regbank[10]; | |
11 | |
12 function i2c_write(int address, int d) | |
13 { | |
14 regbank[2] = address; | |
15 regbank[0] |= 0x1; // Issue go command | |
16 while (regbank[1] != 0) | |
17 { | |
18 yield; | |
19 } | |
20 | |
21 // Wait while busy: | |
22 while (regbank[1] != 11) | |
23 { | |
24 yield; | |
25 } | |
26 } | |
27 | |
28 function int i2c_read(int address) | |
29 { | |
30 regbank[2] = address; | |
31 regbank[0] |= 0x1; // Issue go command | |
32 while (regbank[1] != 0) | |
33 { | |
34 yield; | |
35 } | |
36 | |
37 // Wait while busy: | |
38 while (regbank[1] != 11) | |
39 { | |
40 yield; | |
41 } | |
42 } | |
43 | |
44 function void eeprom_set(int address, int v) | |
45 { | |
46 i2c_write(address, v); | |
47 i2c_read(address); | |
48 } | |
49 | |
50 function int calcX(int y) | |
51 { | |
52 var int x; | |
53 x = 2; | |
54 x = x + 2 + 9 * y; | |
55 return x; | |
56 } | |
57 | |
58 var int counter = 0; | |
59 | |
60 task task1() | |
61 { | |
62 start task3; | |
63 var int a = 200; | |
64 while (a > 0) | |
65 { | |
66 yield; | |
67 } | |
68 } | |
69 | |
70 task task2() | |
71 { | |
72 while(true) | |
73 { | |
74 yield; | |
75 } | |
76 } | |
77 | |
78 task task3() | |
79 { | |
80 eeprom_set(99, 1); | |
81 yield; | |
82 } | |
83 | |
84 task main() | |
85 { | |
86 start task1; | |
87 start task2; | |
88 await task1; | |
89 await task2; | |
90 } | |
91 |