krnl 1
Loading...
Searching...
No Matches
k10.ino
Go to the documentation of this file.
1
2/* k10
3
4 sampling with fixed frequency with timer on sempahore
5 two tasks !
6*/
7
8#include <krnl.h>
9
10#define STKSIZE 200
11
12#define TASKPRIO 10
13
15struct k_t * pTask, *pTask2, *sem1, *sem2;
16
17volatile char reg = 0;
18
19void task()
20{
21 int res;
22
23 k_set_sem_timer(sem1, 15); // krnl signals every 10 msec
24
25 while (1) {
26 res = k_wait(sem1, 0); // knock knock at sem1. timeout = 0 means forever
27 if (res == 0) {
28 DI();
29 reg = reg | 0x08; // reset crit reg pin
30 PORTB = (1 << pRun->nr) | reg;
31 EI();
32
33 k_eat_msec(4);
34
35 DI();
36 reg = reg & 0xf7; // reset crit reg pin
37 PORTB = (1 << pRun->nr) | reg;
38 EI();
39 }
40 }
41}
42
43void task2()
44{
45 int res;
46
47 k_set_sem_timer(sem2, 10); // krnl signals every 10 msec
48
49 while (1) {
50 res = k_wait(sem2, 0); // knock knock at sem1. timeout = 0 means forever
51 if (res == 0) {
52 DI(); // just for setting bit for critical region for osc
53 reg = reg | 0x10;
54 PORTB = (1 << pRun->nr) | reg;
55 EI();
56
57 k_eat_msec(3);
58
59 DI();
60 reg = reg & 0xef; // reset crit reg pin
61 PORTB = (1 << pRun->nr) | reg;
62 EI();
63 }
64 }
65}
66
67
68void setup() {
69 // for debugging
70 for (int i = 8; i < 14; i++)
71 pinMode(i, OUTPUT);
72
73 Serial.begin(9600);
74
75 k_init(2, 2, 0); // 2 task, 1 semaphores, 0 messageQueues */
78 sem1 = k_crt_sem(0, 0); // 1: start value, 10: max value (clipping)
79 sem2 = k_crt_sem(0, 0); // 1: start value, 10: max value (clipping)k_start(); /* start krnl timer speed 1 milliseconds*/
80
81 k_start();
82 Serial.println("If you see this then krnl didnt start :-( ");
83}
84
85void loop() {}
86
87/***** DEBUGGING PART - LED ON 8-12**********/
88/************************ DEBUG CALLBACK BREAKOUT PART ****************/
89// must be extern C ! its not mandatory to supply with these functions - only if you need
90
91extern "C" {
92
93 // called when a semphore is clipping - nr is id of semaphore and i os nr of times clip has occured
94 unsigned char led13;
95
96 void k_sem_clip(unsigned char nr, int i)
97 {
98 return;
99 if (nr == 2)
100 led13 |= 0x20;
101 }
102
103 void k_sem_unclip(unsigned char nr)
104 {
105 return;
106 if (nr == 2)
107 led13 = 0x00;
108 }
109
110
111 /* void k_send_Q_clip(unsigned char nr, int i) {} */
112
113 // task numbering is in creation order: dummy: 0, first of yours 1, next 2,...
114 void k_breakout() // called every task shift from dispatcher
115 {
116 unsigned char c;
117 PORTB = (1 << pRun->nr) | reg; // arduino uno !! specific usage of PORTB
118 }
119 // for a MEGA you have to find another port :-)
120 // port K (adc8-15) seems feasible
121 // get inspired at http://kom.aau.dk/~jdn/edu/doc/arduino/ards.html
122}
123
124
125
126
#define STKSIZE
Definition k02.ino:8
char stak[100]
Definition k02.ino:12
unsigned char led13
Definition k02.ino:59
volatile char reg
Definition k05.ino:17
struct k_t * pTask
volatile int i
char stak2[STKSZ]
struct k_t * sem1
struct k_t * sem2
void task2()
#define TASKPRIO
Definition k08isrsem.ino:14
struct k_t * pTask2
Definition k09msgq.ino:11
void setup()
Definition k10.ino:68
void k_breakout()
Definition k10.ino:114
void k_sem_clip(unsigned char nr, int i)
Definition k10.ino:96
void task()
Definition k10.ino:19
void k_sem_unclip(unsigned char nr)
Definition k10.ino:103
void task2()
Definition k10.ino:43
void loop()
Definition k10.ino:85
void k_eat_msec(unsigned int eatTime)
eat milliseconds - to mimik time consuming code
Definition krnl.c:246
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
#define DI()
Definition krnl.h:478
#define EI()
Definition krnl.h:479
struct k_t * task
Definition krnl.h:323
unsigned char nr
Definition krnl.h:327