Skip to content

Commit 883cd6f

Browse files
committed
added scheduler
1 parent a62b120 commit 883cd6f

File tree

3 files changed

+236
-5
lines changed

3 files changed

+236
-5
lines changed

extras/functions_generator_firmware/SKr3_waves/SKr3_waves.ino

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@
2222
#include "led_gauge.h"
2323
#include "led_range.h"
2424
#include "analogWave.h"
25+
#include "scheduler.h"
26+
2527

2628
/* __________________________ CONFIGURATION DEFINES _________________________ */
27-
// #define USE_FIZ
28-
// #define USE_TIME
29+
#define USE_CHAT_AT
30+
#define USE_TIMER
2931
#define USE_DEBUG_CODE
3032

3133

@@ -39,13 +41,15 @@
3941

4042
#ifdef USE_TIMER
4143
#include "FspTimer.h"
44+
#include "scheduler.h"
4245

4346
static FspTimer timer;
47+
static bool elapsed = false;
4448

4549
/* -------------------------------------------------------------------------- */
4650
void timer_callback(timer_callback_args_t *arg) {
4751
/* -------------------------------------------------------------------------- */
48-
Serial.println("Timer 1 callback");
52+
elapsed = true;
4953
}
5054

5155
/* -------------------------------------------------------------------------- */
@@ -70,6 +74,15 @@ void set_up_timer() {
7074
}
7175
}
7276

77+
/* -------------------------------------------------------------------------- */
78+
bool is_tick_elapsed() {
79+
/* -------------------------------------------------------------------------- */
80+
if(elapsed) {
81+
elapsed = false;
82+
return true;
83+
}
84+
return false;
85+
}
7386

7487
#endif
7588

@@ -158,10 +171,11 @@ void comm_request(){
158171
}
159172
}
160173

174+
/* ______________________________SETUP_______________________________________ */
161175

162-
163-
176+
/* -------------------------------------------------------------------------- */
164177
void setup() {
178+
/* -------------------------------------------------------------------------- */
165179
Serial.begin(115200);
166180

167181
#ifdef USE_DEBUG_CODE
@@ -203,8 +217,12 @@ void setup() {
203217
}
204218

205219

220+
/* _______________________________LOOP_______________________________________ */
206221

222+
223+
/* -------------------------------------------------------------------------- */
207224
void loop() {
225+
/* -------------------------------------------------------------------------- */
208226
#ifdef USE_DEBUG_CODE
209227
//Serial.println("Msin loop running");
210228
#endif
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
#include "scheduler.h"
2+
3+
extern bool is_tick_elapsed();
4+
5+
CScheduler& CScheduler::getInstance() {
6+
static CScheduler instance;
7+
return instance;
8+
}
9+
10+
11+
12+
CScheduler::CScheduler() {
13+
unsigned char i = 0;
14+
for(i = 0; i < TASK_DEFINED_TASK; i++ ){
15+
TaskList[i].task = nullptr;
16+
}
17+
}
18+
19+
20+
CScheduler::~CScheduler() {
21+
22+
23+
}
24+
25+
26+
void CScheduler::add(Task_f func, TaskNum_t tsk) {
27+
switch(tsk) {
28+
29+
#if(USE_TASK_2ms == 1)
30+
case TASK_2ms:
31+
TaskList[TASK_2ms].task = func;
32+
TaskList[TASK_2ms].time = 2;
33+
TaskList[TASK_2ms].restart_time = 2;
34+
break;
35+
#endif
36+
37+
#if(USE_TASK_5ms == 1)
38+
case TASK_5ms:
39+
TaskList[TASK_5ms].task = func;
40+
TaskList[TASK_5ms].time = 5;
41+
TaskList[TASK_5ms].restart_time = 5;
42+
break;
43+
#endif
44+
45+
#if(USE_TASK_10ms == 1)
46+
case TASK_10ms:
47+
TaskList[TASK_10ms].task = func;
48+
TaskList[TASK_10ms].time = 9;
49+
TaskList[TASK_10ms].restart_time = 10;
50+
break;
51+
#endif
52+
53+
#if(USE_TASK_15ms == 1)
54+
case TASK_15ms:
55+
TaskList[TASK_10ms].task = func;
56+
TaskList[TASK_10ms].time = 13;
57+
TaskList[TASK_10ms].restart_time = 15;
58+
break;
59+
#endif
60+
61+
#if(USE_TASK_20ms == 1)
62+
case TASK_20ms:
63+
TaskList[TASK_20ms].task = func;
64+
TaskList[TASK_20ms].time = 21;
65+
TaskList[TASK_20ms].restart_time = 20;
66+
break;
67+
#endif
68+
69+
#if(USE_TASK_50ms == 1)
70+
case TASK_50ms:
71+
TaskList[TASK_50ms].task = func;
72+
TaskList[TASK_50ms].time = 47;
73+
TaskList[TASK_50ms].restart_time = 50;
74+
break;
75+
#endif
76+
77+
#if(USE_TASK_100ms == 1)
78+
case TASK_100ms:
79+
TaskList[TASK_100ms].task = func;
80+
TaskList[TASK_100ms].time = 93;
81+
TaskList[TASK_100ms].restart_time = 100;
82+
break;
83+
#endif
84+
85+
#if(USE_TASK_200ms == 1)
86+
case TASK_200ms:
87+
TaskList[TASK_200ms].task = func;
88+
TaskList[TASK_200ms].time = 199;
89+
TaskList[TASK_200ms].restart_time = 200;
90+
break;
91+
#endif
92+
93+
#if(USE_TASK_500ms == 1)
94+
case TASK_500ms:
95+
TaskList[TASK_500ms].task = func;
96+
TaskList[TASK_500ms].time = 505;
97+
TaskList[TASK_500ms].restart_time = 500;
98+
break;
99+
#endif
100+
101+
#if(USE_TASK_1s == 1)
102+
case TASK_1sec:
103+
TaskList[TASK_1sec].task = func;
104+
TaskList[TASK_1sec].time = 997;
105+
TaskList[TASK_1sec].restart_time = 1000;
106+
break;
107+
#endif
108+
default:
109+
break;
110+
}
111+
}
112+
113+
void CScheduler::shedule() {
114+
unsigned char i = 0;
115+
unsigned char oneTaskExecuted = 0;
116+
117+
if(is_tick_elapsed()) {
118+
for(i = 0; i < TASK_DEFINED_TASK; i++) {
119+
120+
if(TaskList[i].task != nullptr) {
121+
122+
if(TaskList[i].time > 0) {
123+
TaskList[i].time--;
124+
}
125+
126+
if(oneTaskExecuted == 0 && TaskList[i].time == 0) {
127+
TaskList[i].task();
128+
TaskList[i].time = TaskList[i].restart_time;
129+
oneTaskExecuted = 1;
130+
}
131+
}
132+
}
133+
}
134+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#ifndef SCIENCE_KIT_SCHEDULER
2+
#define SCIENCE_KIT_SCHEDULER
3+
4+
extern bool is_tick_elapsed();
5+
6+
7+
typedef enum {
8+
#if(USE_TASK_2ms == 1)
9+
TASK_2ms,
10+
#endif
11+
#if(USE_TASK_5ms == 1)
12+
TASK_5ms,
13+
#endif
14+
#if(USE_TASK_10ms == 1)
15+
TASK_10ms,
16+
#endif
17+
#if(USE_TASK_15ms == 1)
18+
TASK_15ms,
19+
#endif
20+
#if(USE_TASK_20ms == 1)
21+
TASK_20ms,
22+
#endif
23+
#if(USE_TASK_50ms == 1)
24+
TASK_50ms,
25+
#endif
26+
#if(USE_TASK_100ms == 1)
27+
TASK_100ms,
28+
#endif
29+
#if(USE_TASK_200ms == 1)
30+
TASK_200ms,
31+
#endif
32+
#if(USE_TASK_500ms == 1)
33+
TASK_500ms,
34+
#endif
35+
#if(USE_TASK_1s == 1)
36+
TASK_1sec,
37+
#endif
38+
TASK_DEFINED_TASK
39+
} TaskNum_t;
40+
41+
42+
using Task_f = void (*)();
43+
44+
class CTask {
45+
public:
46+
Task_f task;
47+
unsigned short time;
48+
unsigned short restart_time;
49+
};
50+
51+
52+
class CScheduler {
53+
public:
54+
static CScheduler& getInstance();
55+
CScheduler(CScheduler const&) = delete;
56+
void operator=(CScheduler const&) = delete;
57+
~CScheduler();
58+
59+
void add(Task_f func, TaskNum_t tsk);
60+
void shedule();
61+
62+
63+
private:
64+
CScheduler();
65+
66+
CTask TaskList[TASK_DEFINED_TASK];
67+
68+
69+
70+
71+
};
72+
73+
74+
75+
76+
77+
78+
79+
#endif

0 commit comments

Comments
 (0)