krnl
1
Loading...
Searching...
No Matches
examples
oldexamples
rt-arduino-rdwr
rt-arduino-rdwr.ino
Go to the documentation of this file.
1
2
#include <
krnl.h
>
3
//Jens s2021
4
// https://en.wikipedia.org/wiki/Readers%E2%80%93writers_problem
5
6
7
struct
k_rwlock_t
lock1
;
8
9
10
void
wr
(
void
)
11
{
12
int
i
= 0;
13
while
(1) {
14
k_sleep
( random(100, 1000));
// NB k_sleep and not k_eat_ticks bq then you will never release CPU
15
k_rwWrEnter(&
lock1
,0);
16
Serial.println(
"wr in"
);
17
k_eat_ticks( random(100, 2500));
18
Serial.println(
"wr leaving"
);
19
k_rwWrLeave(&
lock1
);
20
}
21
}
22
23
volatile
int
rdNr
= 0;
24
void
rd
(
void
)
25
{
26
int
n;
27
DI
();
28
n =
rdNr
;
29
rdNr
++;
30
EI
();
31
while
(1) {
32
k_sleep
( random(100, 1000));
// NB k_sleep and not k_eat_ticks bq then you will never release CPU
33
k_rwRdEnter(&
lock1
,0);
34
Serial.print(
"rd>> "
); Serial.println(n);
35
k_eat_ticks( random(100, 500));
36
Serial.print(
"rd<<"
); Serial.println(n);
37
k_rwRdLeave(&
lock1
);
38
}
39
}
40
void
setup
()
41
{
42
Serial.begin(115200);
// for output from task 1
43
delay(2000);
44
Serial.print(
"RW START"
);
45
k_init
(4, 3, 0);
46
k_crt_task
(
wr
, 12, 200);
47
k_crt_task
(
rd
, 11, 200);
48
k_crt_task
(
rd
, 11, 200);
49
k_crt_task
(
rd
, 11, 200);
50
k_rwInit(&
lock1
);
51
k_start
(1);
// start kernel with tick speed 1 milli seconds
52
Serial.println(
"if coming hre then init went wrong"
);
53
}
54
55
void
loop
() {
56
/* loop will never be called */
57
}
i
volatile int i
Definition
k02twotasks.ino:29
k_sleep
int k_sleep(int time)
let task sleep for a number of milliseconds
Definition
krnl.c:445
k_crt_task
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
k_init
int k_init(int nrTask, int nrSem, int nrMsg)
Definition
krnl.c:1108
k_start
int k_start()
Definition
krnl.c:1149
krnl.h
DI
#define DI()
Definition
krnl.h:478
EI
#define EI()
Definition
krnl.h:479
wr
void wr(void)
Definition
rt-arduino-periodic-delay.ino:15
setup
void setup()
Definition
rt-arduino-rdwr.ino:40
lock1
struct k_rwlock_t lock1
Definition
rt-arduino-rdwr.ino:7
rdNr
volatile int rdNr
Definition
rt-arduino-rdwr.ino:23
rd
void rd(void)
Definition
rt-arduino-rdwr.ino:24
wr
void wr(void)
Definition
rt-arduino-rdwr.ino:10
loop
void loop()
Definition
rt-arduino-rdwr.ino:55
Generated by
1.15.0