krnl 1
Loading...
Searching...
No Matches
k09msgq.ino
Go to the documentation of this file.
1//220116
2
3#include <krnl.h>
4
5#define STK 150
6char a1[STK], a2[STK];
7
8#define TASKPRIO 10
9
10
11struct k_t * pTask1, *pTask2;
12
13struct k_msg_t *msgQ;
14
15int dataBufForMsgQ[10]; // 10 ints,..
16
18
19volatile int t2Missed = 0, t2Hit = 0;;
20
21
22
23// mutSem for protecting Serial print
24
25void task1()
26{
27 int i = 0;
28 char res;
29 int lI, lII;
30
31 k_set_sem_timer(timedSem1, 80); // 100 tick aka 100 msec realtime signal from krnl
32
33 while (1) {
34
35 k_wait(timedSem1, 0); // wait untilkick - realtime
36
37 i++;
38 res = k_send(msgQ, &i);
39
40 k_eat_msec(20);
41
42 k_wait(mutSem, 0);
43 {
44 if (0 <= res) {
45 Serial.print("1: did deliver "); Serial.println(i);
46 }
47 else {
48 Serial.print("1: no deliver:>>>>>>>>>>>>>>>>>< "); Serial.println(i);
49 }
50 }
52 k_eat_msec(2);
53 }
54}
55
56void task2()
57{
58 char res;
59 int ii, lostM;
60 k_set_sem_timer(timedSem2, 100); // 100 tick aka 100 msec realtime signal from krnl
61
62 while (1) {
63
64 k_wait(timedSem2, 0);
65
66 k_wait(mutSem, 0);
67 Serial.println("2: bef rcv");
69
70
71 res = k_receive(msgQ, &ii, 0, &lostM);
72
73 k_wait(mutSem, 0);
74 {
75 Serial.print("2: received "); Serial.print( ii);
76 Serial.print(" lost: "); Serial.println(lostM);
77 }
79 }
80}
81
82void setup() {
83 Serial.begin(115200);
84 delay(2000);
85
86 Serial.println("just bef init part");
87
88 k_init(2, 3, 1); // 2 task, 1 semaphores, 0 messaegQueues */
89
90 msgQ = k_crt_send_Q (10, sizeof(int), dataBufForMsgQ); // 10 elements of size
91
92 pTask1 = k_crt_task(task1, 15, a1, STK);
93 pTask2 = k_crt_task(task2, 15 , a2, STK);
94
95 timedSem1 = k_crt_sem(0, 1); // 1: start value, 10: max value (clipping)
96 timedSem2 = k_crt_sem(0, 1); // 1: start value, 10: max value (clipping)
97
98 mutSem = k_crt_sem(1, 1); // 1: start value, 10: max value (clipping)
99
100 Serial.println("just bef k_start");
101
102 k_start(); /* start krnl timer speed 1 milliseconds*/
103
104 Serial.println("If you see this then krnl didnt start :-( ");
105}
106
107void loop() {}
#define STK
volatile int i
char a2[110]
char a1[110]
void task2()
void task1()
struct k_t * mutSem
Definition k08isrsem.ino:19
struct k_t * timedSem1
Definition k08isrsem.ino:21
volatile int t2Missed
Definition k08isrsem.ino:23
struct k_t * timedSem2
Definition k08isrsem.ino:21
volatile int t2Hit
Definition k08isrsem.ino:23
struct k_t * pTask1
Definition k08isrsem.ino:17
struct k_t * pTask2
Definition k09msgq.ino:11
void setup()
Definition k09msgq.ino:82
int dataBufForMsgQ[10]
Definition k09msgq.ino:15
struct k_msg_t * msgQ
Definition k09msgq.ino:13
void task2()
Definition k09msgq.ino:56
void task1()
Definition k09msgq.ino:25
void loop()
Definition k09msgq.ino:107
int k_signal(struct k_t *sem)
Signal a semaphore w eventually task shift.
Definition krnl.c:636
void k_eat_msec(unsigned int eatTime)
eat milliseconds - to mimik time consuming code
Definition krnl.c:246
char k_receive(struct k_msg_t *pB, void *el, int timeout, int *lost_msg)
Definition krnl.c:991
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
char k_send(struct k_msg_t *pB, void *el)
Definition krnl.c:944
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
struct k_msg_t * k_crt_send_Q(int nr_el, int el_size, void *pBuf)
Definition krnl.c:841
int k_start()
Definition krnl.c:1149
Definition krnl.h:323