X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/071e02c6b6b4837fa9cf0b6d4c749994e02638d7..77a9df36a77d2523dd2bc24fa17f9f04c6c175c5:/LUFA/Scheduler/Scheduler.c diff --git a/LUFA/Scheduler/Scheduler.c b/LUFA/Scheduler/Scheduler.c index 11ba5cc0f..56e1cf41e 100644 --- a/LUFA/Scheduler/Scheduler.c +++ b/LUFA/Scheduler/Scheduler.c @@ -1,21 +1,21 @@ /* LUFA Library - Copyright (C) Dean Camera, 2010. - + Copyright (C) Dean Camera, 2011. + dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -31,20 +31,23 @@ #include "Scheduler.h" volatile SchedulerDelayCounter_t Scheduler_TickCounter; -volatile uint8_t Scheduler_TotalTasks; +volatile uint_least8_t Scheduler_TotalTasks; -bool Scheduler_HasDelayElapsed(const uint16_t Delay, SchedulerDelayCounter_t* const DelayCounter) +bool Scheduler_HasDelayElapsed(const uint_least16_t Delay, + SchedulerDelayCounter_t* const DelayCounter) { SchedulerDelayCounter_t CurrentTickValue_LCL; SchedulerDelayCounter_t DelayCounter_LCL; - - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - CurrentTickValue_LCL = Scheduler_TickCounter; - } - + + uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); + GlobalInterruptDisable(); + + CurrentTickValue_LCL = Scheduler_TickCounter; + + SetGlobalInterruptMask(CurrentGlobalInt); + DelayCounter_LCL = *DelayCounter; - + if (CurrentTickValue_LCL >= DelayCounter_LCL) { if ((CurrentTickValue_LCL - DelayCounter_LCL) >= Delay) @@ -59,16 +62,17 @@ bool Scheduler_HasDelayElapsed(const uint16_t Delay, SchedulerDelayCounter_t* co { *DelayCounter = CurrentTickValue_LCL; return true; - } + } } - + return false; } -void Scheduler_SetTaskMode(const TaskPtr_t Task, const bool TaskStatus) +void Scheduler_SetTaskMode(const TaskPtr_t Task, + const bool TaskStatus) { TaskEntry_t* CurrTask = &Scheduler_TaskList[0]; - + while (CurrTask != &Scheduler_TaskList[Scheduler_TotalTasks]) { if (CurrTask->Task == Task) @@ -76,20 +80,22 @@ void Scheduler_SetTaskMode(const TaskPtr_t Task, const bool TaskStatus) CurrTask->TaskStatus = TaskStatus; break; } - + CurrTask++; } } -void Scheduler_SetGroupTaskMode(const uint8_t GroupID, const bool TaskStatus) +void Scheduler_SetGroupTaskMode(const uint_least8_t GroupID, + const bool TaskStatus) { TaskEntry_t* CurrTask = &Scheduler_TaskList[0]; - + while (CurrTask != &Scheduler_TaskList[Scheduler_TotalTasks]) { if (CurrTask->GroupID == GroupID) CurrTask->TaskStatus = TaskStatus; - + CurrTask++; } } +