dit projekt
k09msgq.ino
Go to the documentation of this file.
1 //220116
2 
3 #include <krnl.h>
4 
5 #define STK 150
6 char a1[STK], a2[STK];
7 
8 #define TASKPRIO 10
9 
10 
11 struct k_t * pTask1, *pTask2;
12 
13 struct k_msg_t *msgQ;
14 
15 int dataBufForMsgQ[10]; // 10 ints,..
16 
18 
19 volatile int t2Missed = 0, t2Hit = 0;;
20 
21 
22 
23 // mutSem for protecting Serial print
24 
25 void 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 
56 void 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 
82 void 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 
107 void loop() {}
volatile int i
Definition: k02twotasks.ino:29
struct k_t * mutSem
Definition: k09msgq.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_t * timedSem1
Definition: k09msgq.ino:17
char a2[STK]
Definition: k09msgq.ino:6
volatile int t2Missed
Definition: k09msgq.ino:19
struct k_msg_t * msgQ
Definition: k09msgq.ino:13
struct k_t * timedSem2
Definition: k09msgq.ino:17
#define STK
Definition: k09msgq.ino:5
volatile int t2Hit
Definition: k09msgq.ino:19
char a1[STK]
Definition: k09msgq.ino:6
struct k_t * pTask1
Definition: k09msgq.ino:11
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)
Definition: krnl.c:681
void k_eat_msec(unsigned int eatTime)
Definition: krnl.c:292
char k_receive(struct k_msg_t *pB, void *el, int timeout, int *lost_msg)
Definition: krnl.c:1036
struct k_t * k_crt_sem(int init_val, int maxvalue)
Definition: krnl.c:589
int k_wait(struct k_t *sem, int timeout)
Definition: krnl.c:728
struct k_msg_t * k_crt_send_Q(int nr_el, int el_size, void *pBuf)
Definition: krnl.c:886
int k_set_sem_timer(struct k_t *sem, int val)
Definition: krnl.c:631
char k_send(struct k_msg_t *pB, void *el)
Definition: krnl.c:989
struct k_t * k_crt_task(void(*pTask)(void), char prio, char *pStk, int stkSize)
Definition: krnl.c:374
int k_init(int nrTask, int nrSem, int nrMsg)
Definition: krnl.c:1152
int k_start()
Definition: krnl.c:1192
Definition: krnl.h:355
Definition: krnl.h:334