Skip to content

Commit 54c0ea1

Browse files
committed
add preempt_task
1 parent a665ac1 commit 54c0ea1

5 files changed

Lines changed: 13 additions & 15 deletions

File tree

examples/TaskBlink/TaskBlink.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ void Off(int) {
2121
delay(1000);
2222
_on = true;
2323
}
24-
}
24+
}
2525
}
2626

2727
void setup() {

src/BTaskSwitcher.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,21 @@ bool BTaskSwitcher::can_switch() {
127127
return _initialized && _current_task == _next_task;
128128
}
129129

130+
void BTaskSwitcher::preempt_task() {
131+
BDisableInterrupts cli;
132+
if (can_switch() && _current_slice <= 0) {
133+
schedule_task();
134+
} else {
135+
--_current_slice;
136+
}
137+
}
138+
130139
void BTaskSwitcher::yield_task() {
131140
BDisableInterrupts cli;
132141
if (can_switch()) {
133142
_yielded_task = _current_task;
134143
schedule_task();
135144
}
136-
return;
137145
}
138146

139147
void BTaskSwitcher::initialize(int tasks, int slice) {

src/BTaskSwitcher.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ class BTaskSwitcher {
8484
static void switch_context();
8585
static void schedule_task();
8686
static bool can_switch();
87+
static void preempt_task();
8788

8889
template<typename T>
8990
static BTaskInfoBase* alloc_task(BTask<T> task, typename BTask<T>::ArgumentType arg, unsigned stackSize) {

src/BTaskSwitcherAVR.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,7 @@ void BTaskSwitcher::init_arch() {
171171
using namespace Buratino;
172172

173173
ISR(TIMER0_COMPA_vect) {
174-
if (BTaskSwitcher::can_switch() && BTaskSwitcher::_current_slice <= 0) {
175-
BTaskSwitcher::schedule_task();
176-
} else {
177-
--BTaskSwitcher::_current_slice;
178-
}
174+
BTaskSwitcher::preempt_task();
179175
}
180176

181177
#endif

src/BTaskSwitcherSAMD.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,7 @@ extern "C" {
9999
}
100100

101101
int sysTickHook() {
102-
BTaskSwitcher::BDisableInterrupts cli;
103-
if (BTaskSwitcher::can_switch() && BTaskSwitcher::_current_slice <= 0) {
104-
BTaskSwitcher::schedule_task();
105-
}
106-
else
107-
{
108-
--BTaskSwitcher::_current_slice;
109-
}
102+
BTaskSwitcher::preempt_task();
110103
return 0;
111104
}
112105
}

0 commit comments

Comments
 (0)