krnl 1
Loading...
Searching...
No Matches
k014semmutex.ino
Go to the documentation of this file.
1#include <krnl.h>
2// one task loops and blink
3// k_wait ensures proper timing
4
5struct k_t *p1, *p2,*s1, *semmutex;
6
7// shared data
8struct shDataTp{
9int v;
10int counter;
11};
12
13struct shDataTp sharedData={0,0};
14
16{
18 sharedData.v = v;
19 sharedData.counter ++;
21}
22
24{
25struct shDataTp tmp;
27 sharedData.counter--;
28 tmp = sharedData;
30 return tmp;
31}
32
33// the sampler task
34void t1()
35{
36int v;
38 while (1) {
39
40 k_wait(s1,0); //wait until a kick comes
41
42 v = analogRead(A0);
44 }
45}
46
47void t2()
48{
49 static struct shDataTp v;
50 while (1) {
51
52 k_sleep(345);
54 Serial.print(v.v);
55 Serial.print(" ");
56 Serial.println(v.counter);
57 } // do we keep up in pace ?
58}
59
60
61void setup()
62{
63 int res;
64 Serial.begin(9600);
65 while (! Serial) ;
66 pinMode(13,OUTPUT);
67
68 k_init(2,2,0); // init with space for one task
69 // |--- no of mg Queues (0)
70 // |----- no of semaphores (0)
71 // |------- no of tasks (2)
72
73 // priority low number higher priority than higher number
74 p1 = k_crt_task(t1,10,100); // t1 as task, priority 10, 100 B stak
75 p2 = k_crt_task(t2,10,100); // t1 as task, priority 10, 100 B stak
76
77 s1 = k_crt_sem(0,10);
78 semmutex = k_crt_sem(1,10); // must be 1 otherwise no one can come inside
79 Serial.println("bef start");
80 res= k_start(1); // 1 milli sec tick speed
81 // you will never return from k_start
82 Serial.print("ups an error occured: "); Serial.println(res);
83 while (1) ;
84}
85
86void loop() {}
void setup()
void t2()
void t1()
void saveDataInCritRegion(int v)
struct shDataTp getDataInCritRegion(void)
void loop()
struct k_t * p1
Definition k03asleep.ino:22
struct k_t * p2
Definition k03asleep.ino:22
unsigned char s1[110]
Definition k03asleep.ino:25
struct shDataTp sharedData
struct shDataTp getDataInCritRegion(void)
struct k_t * semmutex
int k_signal(struct k_t *sem)
Signal a semaphore w eventually task shift.
Definition krnl.c:636
int k_sleep(int time)
let task sleep for a number of milliseconds
Definition krnl.c:445
int k_wait(struct k_t *sem, int timeout)
stand wait on semaphore call with timeout facility
Definition krnl.c:683
struct k_t * k_crt_task(void(*pTask)(void), char prio, char *pStk, int stkSize)
create a task - only to be called before k_start creates a task and put it in the active Q
Definition krnl.c:328
int k_set_sem_timer(struct k_t *sem, int val)
attach a periodic timer to a semaphore, to be used for realtime
Definition krnl.c:586
struct k_t * k_crt_sem(int init_val, int maxvalue)
change task priority and reinserts it in task Q and do a task shift
Definition krnl.c:544
int k_init(int nrTask, int nrSem, int nrMsg)
Definition krnl.c:1108
int k_start()
Definition krnl.c:1149
struct k_t * t1
Definition krnlgen.ino:3
struct k_t * t2
Definition krnlgen.ino:3
Definition krnl.h:323