krnl 1
Loading...
Searching...
No Matches
k04periodic.ino
Go to the documentation of this file.
1//220216
2#include <krnl.h>
3
4#define STK 110
5struct k_t *p1, *p2, *sem1, *sem2;
6
7char st1[STK], st2[STK];
8
10{
11 // simple periodic sampler/controller/...
13
14 while (1) {
15 k_wait(sem1, 0);
16 k_eat_msec(70); // we eat 70% of cpu time
17 }
18}
19
20
21void tnoise()
22{
23 while (1) {
24 k_eat_msec( random(30, 200) ); // we eat between 30 and 200 msec of time
25 k_sleep(500); // and sleep for 500 msec
26 }
27}
28
29int err;
30
31void setup()
32{
33 for (int i = 8; i < 14; i++) // using PORTB 0..5: d8..d13
34 pinMode(i, OUTPUT);
35 Serial.begin(115200);
36
37 k_init(2, 1, 0); // init with space for three tasks
38
39 // priority low number higher priority than higher number
40 //Task 1
41 p1 = k_crt_task(tperiodic, 10, st1, STK); // t1 as task, priority 10, 100 B stak
42 //Task 2
43 p2 = k_crt_task(tnoise, 11 , st2, STK); // t1 as task, priority 10, 100 B stak
44
45 sem1 = k_crt_sem(0,5);
46
47 err = k_start(); // 1 milli sec tick speed
48 Serial.print("start error ");
49 Serial.print(err);
50
51}
52
53void loop() {}
54
55
56extern "C" {
57
58 void k_breakout() // called every task shift from dispatcher
59 {
60 PORTB = (1 << pRun->nr);
61 // on MEGA use PORTA
62 }
63}
64
65// D8 ON dummy eating cpu
66// D9 ON Task 1 (the first created
67// D10 ON Task 2
68// ...
69// only one led ON at a time
#define STK
volatile int i
struct k_t * p1
Definition k03asleep.ino:22
struct k_t * p2
Definition k03asleep.ino:22
void tnoise()
struct k_t * sem1
char st2[110]
int err
char st1[110]
void tperiodic()
struct k_t * sem2
void tnoise()
void setup()
void k_breakout()
void tperiodic()
void loop()
void k_eat_msec(unsigned int eatTime)
eat milliseconds - to mimik time consuming code
Definition krnl.c:246
struct k_t * pRun
Definition krnl.c:148
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
Definition krnl.h:323