krnl 1
Loading...
Searching...
No Matches
krnlregistercodetime.ino
Go to the documentation of this file.
1#include <krnl.h>
2
3struct k_t * pT1, *pT2;
4
5struct k_t *sem1, *sem2;
6
7#define STAKSIZE 100
10
11struct shft {
12 unsigned long t;
13 unsigned char nrr;
14};
15
16struct shft logg[200];
17volatile int wI = 0;
18
19
20void t1()
21{
23 while (1) {
24 k_wait(sem1, 0); // wait until signal
25 k_eat_time(40);
26 if (200 <= wI) {
27 for (int i = 0; i < 200; i++) {
28 Serial.print(logg[i].t); Serial.print(" ");
29 Serial.println(logg[i].nrr);
30 }
31
32 for (int i = 0; i < 200; i++) {
33 Serial.print(logg[i].t); Serial.print(" ");
34 Serial.println(logg[i].nrr);
35 }
36
37
38 while (1);
39 }
40 }
41}
42
43void t2()
44
45{
47 while (1) {
48 k_wait(sem2, 0); // wait until signal
49 k_eat_time(40);
50 }
51}
52
53
54
55void setup() {
56 pinMode(8, OUTPUT); // high when t1 runs
57 Serial.begin(9600);
58 k_init(2, 2, 0); // 3 task 3 semafore, 0 message queues
59
60 pT1 = k_crt_task(t1, 50, stak1, STAKSIZE); // periode time as prio
61 pT2 = k_crt_task(t2, 80, stak2, STAKSIZE); // ...
62
63 sem1 = k_crt_sem(0, 5);
64 sem2 = k_crt_sem(0, 5);
65
66 k_start(1);
67}
68
69void loop() {}
70
71extern "C" {
72
73 // called when a semphore is clipping - nr is id of semaphore and i os nr of times clip has occured
74
75
76 /* void k_send_Q_clip(unsigned char nr, int i) {} */
77 extern unsigned long k_millis_counter;
78 void k_breakout() // called every task shift from dispatcher
79 {
80 static unsigned char prevNr = 255;
81 if (prevNr != pRun->nr) { // new boy on CPU ?
82 if (wI < 200) {
83 prevNr = pRun->nr;
84 logg[wI].nrr = pRun->nr;
86
87
88 wI++;
89 }
90 //register new boy on CPU
91 }
92 }
93}
94
95
96
97
char stak1[STKSZ]
volatile int i
char stak2[STKSZ]
struct k_t * sem1
struct k_t * sem2
struct k_t * pRun
Definition krnl.c:148
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 * pT2
Definition mutex.ino:3
struct k_t * pT1
Definition mutex.ino:3
struct k_t * t1
Definition krnlgen.ino:3
struct k_t * t2
Definition krnlgen.ino:3
#define STAKSIZE
void setup()
void k_breakout()
volatile int wI
void t2()
void t1()
struct shft logg[200]
unsigned long k_millis_counter
Definition krnl.c:161
void loop()
Definition krnl.h:323
unsigned char nrr
unsigned long t