krnl 1
Loading...
Searching...
No Matches
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
7struct k_rwlock_t lock1;
8
9
10void 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
25volatile int rdNr = 0;
26void 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}
42void 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
57void loop() {
58 /* loop will never be called */
59}
volatile int i
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
int k_sleep(int time)
let task sleep for a number of milliseconds
Definition krnl.c:445
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_init(int nrTask, int nrSem, int nrMsg)
Definition krnl.c:1108
int k_start()
Definition krnl.c:1149
#define DI()
Definition krnl.h:478
#define EI()
Definition krnl.h:479
void wr(void)
void setup()
void rd(void)
void wr(void)
void loop()
struct k_rwlock_t lock1
volatile int rdNr
void rd(void)