krnl 1
Loading...
Searching...
No Matches
semperf2.ino
Go to the documentation of this file.
1#include <krnl2.h>
2
3// Performance test
4// task shift fore every single signal and wait
5// task1 (t1) toggles pin 13 for every 100 loop
6// one loop have two task shift
7// So a full square wave will have 400 task shift !
8// Measured on an oscilloscope this takes 9.60 msec
9// -> a semaphore operation with a task shift takes ...
10// 9.60msec/400 = 24 usec !
11
12
13struct k_t * tSm1;
14struct k_t * p_t1, *p_t2;
15
16#define STK_SIZE 90
17
18char s1[STK_SIZE]; // stak for t1 ... and t2
20
21void t1(void) {
22 int toggle=0;
23 int c=0,c1=0;
24
25 pinMode(13,OUTPUT);
26
27 while (1) {
28 c++;
29 if (c == 1000) {
30 c = 0;
31 c1++;
32 if (c1 == 100) {
33 c1 = 0;
34 digitalWrite(13, toggle == 0 ? HIGH : LOW);
35 toggle = ~toggle;
36 }
37 }
38 k_wait(tSm1,0);
39 }
40}
41
42void t2(void) {
43 while (1) {
45 }
46}
47
48
49
50// speed program
51
52// led 13 is toggled every second loop of task t1
53// one loop equals 2 task shift so half a period equals 2 shift
54// TEST
55// LED toggles approx every 4 msec which equals 200 task shift
56// -> one task shift takes approx 20 usec
57
58void setup() {
59 int ii;
60
61 Serial.begin(9600);
62
63 k_init(5,5,5); // from now you can crt task,sem etc
64
65 tSm1 = k_crt_sem(0,10); // 100 msec
66
68 p_t2 = k_crt_task(t2, 10, s2, STK_SIZE);
69
70
71 // If you want to test bef start
72 // Serial.print("\nfree ram: ");
73 // ii = freeRam();
74 // Serial.println(ii);
75 Serial.println("hh");
76 k_start(1); // now we are runnning with timer
77 // main will not come back and will sleep rest of life
78}
79
80void loop(void) {
81 // no one will come here
82}
83
84/* QED :-) */
85
unsigned char s2[110]
Definition k03asleep.ino:25
unsigned char s1[110]
Definition k03asleep.ino:25
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
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
struct k_t * tSm1
Definition msg1.ino:15
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)
Definition semperf2.ino:80
void setup()
Definition semperf2.ino:58
void t2(void)
Definition semperf2.ino:42
void t1(void)
Definition semperf2.ino:21
Definition krnl.h:323