krnl 1
Loading...
Searching...
No Matches
akrnltaskblink3.ino
Go to the documentation of this file.
1/* (C) 2012,2013,2014,2015 *
2* *
3* Jens Dalsgaard Nielsen <jdn@es.aau.dk> *
4* http://es.aau.dk/staff/jdn *
5* Section of Automation & Control *
6* Aalborg University, *
7* Denmark *
8* *
9* "THE BEER-WARE LICENSE" (frit efter PHK) *
10* <jdn@es.aau.dk> wrote this file. As long as you *
11* retain this notice you can do whatever you want *
12* with this stuff. If we meet some day, and you think*
13* this stuff is worth it ... *
14* you can buy me a beer in return :-) *
15* or if you are real happy then ... *
16* single malt will be well received :-) *
17* *
18* Use it at your own risk - no warranty *
19* *
20* tested with duemilanove w/328, uno R3, *
21* seeduino 1280 and mega2560 *
22*****************************************************/
23
24/*
25Demonstrates krnl usage with semaphore clip detection and scheduler breakout
26*/
27
28#include <krnl.h>
29
30struct k_t * pt1, *pt2, *pt3,
32
33#define TICKSPEED 10
34
35#define STK 100
36char st1[STK], st2[STK], st3[STK];
37
38volatile unsigned char led13 = 0;
39
41{
42 int clip;
43 Serial.println("hello");
44 k_set_sem_timer(sem1, 200 / TICKSPEED); // 200 millisek
45 while (1) {
46 k_wait(sem1, 0);
47 k_eat_time(50); // lets eat 200 milliseconds
48 }
49}
50
51
52void medprio()
53{
54 int clip;
55 k_set_sem_timer(sem2, 1000 / TICKSPEED); //
56 while (1) {
57 k_wait(sem2, 0);
58 k_eat_time(200); // lets eat 5 milliseconds
59 }
60}
61
62void lowprio()
63{
64 int clip;
65 k_set_sem_timer(sem3, 3000 / TICKSPEED); //
66 while (1) {
67 k_wait(sem3, 0);
68 k_eat_time(2500);
69 led13 = 0; // reset
70 }
71}
72
73
74void setup()
75{
76 {
77 int i;
78 for (i = 8; i <= 13; i++) { // init PORTB for driving LEDs
79 pinMode(i, OUTPUT);
80 digitalWrite(i, LOW);
81 }
82 }
83 // LED13 is pin5 at PORTB
84 k_init(4, 3, 0); // dummy get tasknr 0
85
86 pt3 = k_crt_task(lowprio, 30, st3, STK); //declared first so it get tasknr 1
87 pt2 = k_crt_task(medprio, 20, st2, STK); // 2 ...
88 pt1 = k_crt_task(highprio, 10, st1, STK); // 3
89
90 sem1 = k_crt_sem(0, -1); // so 1 is highest value
91 sem2 = k_crt_sem(0, -1); // so 1 is highest value
92 sem3 = k_crt_sem(0, 0); // so 1 is highest value
93 k_start(10); // 10 millisecond heartbeat
94}
95
96void loop() {}
97
98// must be extern C ! its not mandatory to supply with these functions - only if you need
99
100extern "C" {
101
102 // called when a semphore is clipping - nr is id of semaphore and i os nr of times clip has occured
103 void k_sem_clip(unsigned char nr, int i)
104 {
105 led13 = 0x20; // LED13 is bit 5 so sem overflow will in fct below switch on LED13
106 }
107
108 /* void k_send_Q_clip(unsigned char nr, int i) {} */
109
110 void k_breakout() // called every task shift from dispatcher
111 {
112 unsigned char c;
113 PORTB = (1 << pRun->nr) | led13; // arduino uno !! specific usage of PORTB
114 }
115
116}
117
118
119
120
unsigned char led13
Definition k02.ino:59
#define STK
volatile int i
struct k_t * pt2
struct k_t * pt1
struct k_t * sem1
char st2[110]
char st1[110]
struct k_t * sem2
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
char st3[110]
#define TICKSPEED
struct k_t * sem3
void highprio()
struct k_t * pt3
void medprio()
void lowprio()
void setup()
void k_breakout()
void highprio()
void k_sem_clip(unsigned char nr, int i)
void medprio()
void lowprio()
void loop()
Definition krnl.h:323
unsigned char nr
Definition krnl.h:327
volatile int clip
Definition krnl.h:339