krnl 1
Loading...
Searching...
No Matches
krnltaskshifttime.ino
Go to the documentation of this file.
1#include <krnl.h>
2
3// External triggered ISR
4// An Interrupt Service Routine is attached to pin 2
5// So when pin2 is drived to ground (by a wire) an interrupt is generated.
6// The ISR increment a counter and send it to a message Q
7// naming ki_send .... "i" indicates it can be used in an ISR and demand interrupt to be disabled prio to call
8// and that no task shift takes place in the call
9// demonstrates ISR with message Q and preemption(task shift) in the ISR
10// NB Take a look on the ISR. For 1280 and 2560 it is INT4 but for 168,328,.. it's INTO
11// It is taken care by a compile flag
12// (c) beerware license JDN 2013
13// AS USUAL Serial.print is not krnl safe !!! cant break your program
14
15struct k_t * p_t1, *p_t2, *sem1;
16
17#define STK_SIZE 200
18
19char s1[STK_SIZE]; // stak for t1 ... and t2
20char s2[STK_SIZE]; // stak for t1 ... and t2
21
22volatile int icnt = 0;
23
24
25
26void t2()
27{
28 while (1) {
39 }
40}
41volatile int i = 0;
42
43void t1(void) {
44
45 while (1) {
46 k_wait(sem1, 0);
47 k_wait(sem1, 0);
48 k_wait(sem1, 0);
49 k_wait(sem1, 0);
50 k_wait(sem1, 0);
51 k_wait(sem1, 0);
52 k_wait(sem1, 0);
53 k_wait(sem1, 0);
54 k_wait(sem1, 0);
55 k_wait(sem1, 0);
56 i++;
57 if (10000 < i) {
58
59 k_stop(0);
60 }
61 }
62
63}
64
65void setup() {
66 unsigned long t;
67 Serial.begin(9600);
68 k_millis();
69
70 k_init(2, 1, 0); // from now you can crt task,sem etc
71
72 sem1 = k_crt_sem(0, 10); //
73
74 p_t1 = k_crt_task(t1, 10, s1, STK_SIZE);
75 p_t2 = k_crt_task(t2, 11, s2, STK_SIZE);
76
77 Serial.println("task shit test for Krnl by JDN");
78 t = millis();
79 k_start(10); // now we are runnning with timer 10 msev
80 t = millis() - t;
81 Serial.print(" 10000 * 10 * 2 (200.000) task shifts in ...(millisec) ");
82 Serial.println(t);
83 Serial.print("One task shift(micro sec) "); Serial.println(t * 1000 / 200000);
84
85
86 // main will not come back and will sleep rest of life
87}
88
89void loop(void) {
90 // just for compilation - will never be called
91}
92
93/* QED :-) */
94
95
96
97
volatile int i
unsigned char s2[110]
Definition k03asleep.ino:25
unsigned char s1[110]
Definition k03asleep.ino:25
struct k_t * sem1
unsigned long k_millis(void)
return no of millisec sincs start NB no leap seconds - its clean
Definition krnl.c:1247
int k_signal(struct k_t *sem)
Signal a semaphore w eventually task shift.
Definition krnl.c:636
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_stop()
Definition krnl.c:1212
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
#define STK_SIZE
Definition isem.ino:17
struct k_t * p_t1
Definition isem.ino:15
volatile int icnt
Definition isem.ino:22
struct k_t * p_t2
Definition msg1.ino:16
struct k_t * t1
Definition krnlgen.ino:3
struct k_t * t2
Definition krnlgen.ino:3
void loop(void)
void setup()
void t2()
void t1(void)
Definition krnl.h:323