1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #include "all-headers.h"
- #define ENABLE_TASK_LIST_ASSERTIONS
- #ifdef ENABLE_TASK_LIST_ASSERTIONS
- #define TASK_LIST_ASSERT_NON_NULL_POINTER(ptr) assertNonNullPointer (ptr, __FILE__, __LINE__) ;
- #else
- #define TASK_LIST_ASSERT_NON_NULL_POINTER(ptr)
- #endif
- #ifdef ENABLE_TASK_LIST_ASSERTIONS
- #define TASK_LIST_ASSERT(condition,value) assertion (condition, value, __FILE__, __LINE__) ;
- #else
- #define TASK_LIST_ASSERT(condition,value)
- #endif
- // ENTER TASK IN LIST: inTask should be not null
- void TaskList::enterTask (SECTION_MODE_ TaskControlBlock * inTaskPtr) {
- TASK_LIST_ASSERT_NON_NULL_POINTER (inTaskPtr) ;
- const uint32_t taskIndex = indexForDescriptorTask (inTaskPtr) ;
- TASK_LIST_ASSERT (taskIndex < TASK_COUNT, taskIndex) ;
- const uint32_t mask = 1U << taskIndex ;
- mList |= mask ;
- }
- // REMOVE FIRST TASK FROM LIST: returns nullptr if list is empty *
- TaskControlBlock * TaskList::removeFirstTask (IRQ_MODE) {
- TaskControlBlock * taskPtr = nullptr ;
- if (mList != 0) {
- const uint32_t taskIndex = (uint32_t) __builtin_ctz (mList) ;
- TASK_LIST_ASSERT (taskIndex < TASK_COUNT, taskIndex) ;
- const uint32_t mask = 1U << taskIndex ;
- mList &= ~ mask ;
- taskPtr = descriptorPointerForTaskIndex (taskIndex) ;
- }
- return taskPtr ;
- }
- // REMOVE A TASK FROM LIST
- void TaskList::removeTask (SECTION_MODE_ TaskControlBlock * inTaskPtr) {
- TASK_LIST_ASSERT_NON_NULL_POINTER (inTaskPtr) ;
- const uint32_t taskIndex = indexForDescriptorTask (inTaskPtr) ;
- TASK_LIST_ASSERT (taskIndex < TASK_COUNT, taskIndex) ;
- const uint32_t mask = 1U << taskIndex ;
- mList &= ~ mask ;
- }
- // REMOVE FIRST TASK FROM LIST: returns nullptr if list is empty *
- TaskControlBlock * TaskList::Iterator::nextTask (IRQ_MODE) {
- TaskControlBlock * taskPtr = nullptr ;
- if (mIteratedList != 0) {
- const uint32_t taskIndex = (uint32_t) __builtin_ctz (mIteratedList) ;
- TASK_LIST_ASSERT (taskIndex < TASK_COUNT, taskIndex) ;
- const uint32_t mask = 1U << taskIndex ;
- mIteratedList &= ~ mask ;
- taskPtr = descriptorPointerForTaskIndex (taskIndex) ;
- }
- return taskPtr ;
- }
|