From 68fc39b5b96bb0afdcf5fe6d7a2c443f26a57f64 Mon Sep 17 00:00:00 2001 From: sasan-golchin <ahmad.golchin@mail.polimi.it> Date: Mon, 7 Nov 2016 14:55:40 +0100 Subject: [PATCH] Priority Scheduler FIX - returns the correct nextPreemptionTime --- .../scheduler/priority/priority_scheduler.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/miosix/kernel/scheduler/priority/priority_scheduler.cpp b/miosix/kernel/scheduler/priority/priority_scheduler.cpp index 1ecefc64..8fbee9b6 100644 --- a/miosix/kernel/scheduler/priority/priority_scheduler.cpp +++ b/miosix/kernel/scheduler/priority/priority_scheduler.cpp @@ -215,16 +215,12 @@ static void IRQsetNextPreemption(bool curIsIdleThread){ else firstWakeupInList = sleepingList->front()->wakeup_time; - if (curIsIdleThread){ - timer.IRQsetNextInterrupt(firstWakeupInList); - nextPeriodicPreemption = std::numeric_limits<long long>::max(); - }else{ - nextPeriodicPreemption = timer.IRQgetCurrentTime() + preemptionPeriodNs; - if (firstWakeupInList < nextPeriodicPreemption ) - timer.IRQsetNextInterrupt(firstWakeupInList); - else - timer.IRQsetNextInterrupt(nextPeriodicPreemption); - } + if (curIsIdleThread) + nextPeriodicPreemption = firstWakeupInList; + else + nextPeriodicPreemption = std::min(firstWakeupInList, timer.IRQgetCurrentTime() + preemptionPeriodNs); + + timer.IRQsetNextInterrupt(nextPeriodicPreemption); } unsigned int PriorityScheduler::IRQfindNextThread() -- GitLab