krnl
1
Loading...
Searching...
No Matches
examples
oldexamples
rt-arduino-rdwr2
rt-arduino-rdwr2.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
unsigned
long
ii;
14
i
=
ki_millis
();
15
while
(1) {
16
k_delay_task_periodic(&ii, 100);
//sleep( random(100, 1000)); // NB k_sleep and not k_eat_ticks bq then you will never release CPU
17
k_rwWrEnter(&
lock1
,0);
18
Serial.println(
"wr in"
);
19
k_eat_ticks( random(100, 2500));
20
Serial.println(
"wr leaving"
);
21
k_rwWrLeave(&
lock1
);
22
}
23
}
24
25
volatile
int
rdNr
= 0;
26
void
rd
(
void
)
27
{
28
int
n;
29
DI
();
30
n =
rdNr
;
31
rdNr
++;
32
EI
();
33
while
(1) {
34
k_sleep
( random(100, 1000));
// NB k_sleep and not k_eat_ticks bq then you will never release CPU
35
k_rwRdEnter(&
lock1
,0);
36
Serial.print(
"rd>> "
); Serial.println(n);
37
k_eat_ticks( random(100, 500));
38
Serial.print(
"rd<<"
); Serial.println(n);
39
k_rwRdLeave(&
lock1
);
40
}
41
}
42
void
setup
()
43
{
44
Serial.begin(115200);
// for output from task 1
45
delay(2000);
46
Serial.print(
"RW START"
);
47
k_init
(4, 3, 0);
48
k_crt_task
(
wr
, 12, 200);
49
k_crt_task
(
rd
, 11, 200);
50
k_crt_task
(
rd
, 11, 200);
51
k_crt_task
(
rd
, 11, 200);
52
k_rwInit(&
lock1
);
53
k_start
(1);
// start kernel with tick speed 1 milli seconds
54
Serial.println(
"if coming hre then init went wrong"
);
55
}
56
57
void
loop
() {
58
/* loop will never be called */
59
}
i
volatile int i
Definition
k02twotasks.ino:29
ki_millis
unsigned long ki_millis(void)
returns no msec since start - no DI/EI lock Returns nr of milliseconds since krnl was started by k_st...
Definition
krnl.c:1240
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-rdwr2.ino:42
rd
void rd(void)
Definition
rt-arduino-rdwr2.ino:26
wr
void wr(void)
Definition
rt-arduino-rdwr2.ino:10
loop
void loop()
Definition
rt-arduino-rdwr2.ino:57
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
Generated by
1.15.0