From 7cb85561bf4f2993b1017871ea5a794729b11a98 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Sat, 8 Mar 2014 18:54:22 +0400 Subject: [PATCH] Scheduler checks its timing configs --- libuavcan/include/uavcan/scheduler.hpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/libuavcan/include/uavcan/scheduler.hpp b/libuavcan/include/uavcan/scheduler.hpp index fc17deec42..ebf674b7dd 100644 --- a/libuavcan/include/uavcan/scheduler.hpp +++ b/libuavcan/include/uavcan/scheduler.hpp @@ -59,7 +59,12 @@ public: class Scheduler : Noncopyable { enum { DefaultMonotonicDeadlineResolutionMs = 5 }; + enum { MinMonotonicDeadlineResolutionMs = 1 }; + enum { MaxMonotonicDeadlineResolutionMs = 100 }; + enum { DefaultCleanupPeriodMs = 1000 }; + enum { MinCleanupPeriodMs = 10 }; + enum { MaxCleanupPeriodMs = 10000 }; MonotonicDeadlineScheduler deadline_scheduler_; Dispatcher dispatcher_; @@ -89,10 +94,20 @@ public: uint64_t getUtcTimestamp() const { return dispatcher_.getSystemClock().getUtcMicroseconds(); } uint64_t getMonotonicDeadlineResolution() const { return monotonic_deadline_resolution_; } - void setMonotonicDeadlineResolution(uint64_t res_usec) { monotonic_deadline_resolution_ = res_usec; } + void setMonotonicDeadlineResolution(uint64_t res_usec) + { + res_usec = std::min(res_usec, MaxMonotonicDeadlineResolutionMs * uint64_t(1000)); + res_usec = std::max(res_usec, MinMonotonicDeadlineResolutionMs * uint64_t(1000)); + monotonic_deadline_resolution_ = res_usec; + } uint64_t getCleanupPeriod() const { return cleanup_period_; } - void setCleanupPeriod(uint64_t period_usec) { cleanup_period_ = period_usec; } + void setCleanupPeriod(uint64_t period_usec) + { + period_usec = std::min(period_usec, MaxCleanupPeriodMs * uint64_t(1000)); + period_usec = std::max(period_usec, MinCleanupPeriodMs * uint64_t(1000)); + cleanup_period_ = period_usec; + } }; }