#ifndef FRAMEWORK_OSAL_LINUX_FIXEDTIMESLOTTASK_H_ #define FRAMEWORK_OSAL_LINUX_FIXEDTIMESLOTTASK_H_ #include #include #include #include class FixedTimeslotTask: public FixedTimeslotTaskIF, public PosixThread { public: FixedTimeslotTask(const char* name_, int priority_, size_t stackSize_, uint32_t periodMs_); virtual ~FixedTimeslotTask(); virtual ReturnValue_t startTask(); virtual ReturnValue_t sleepFor(uint32_t ms); virtual uint32_t getPeriodMs() const; virtual ReturnValue_t addSlot(object_id_t componentId, uint32_t slotTimeMs, int8_t executionStep); virtual ReturnValue_t checkSequence() const; /** * This static function can be used as #deadlineMissedFunc. * It counts missedDeadlines and prints the number of missed deadlines every 10th time. */ static void missedDeadlineCounter(); /** * A helper variable to count missed deadlines. */ static uint32_t deadlineMissedCount; protected: /** * @brief This function holds the main functionality of the thread. * * * @details Holding the main functionality of the task, this method is most important. * It links the functionalities provided by FixedSlotSequence with the OS's System Calls * to keep the timing of the periods. */ virtual void taskFunctionality(); private: /** * @brief This is the entry point in a new thread. * * @details This method, that is the entry point in the new thread and calls taskFunctionality of the child class. * Needs a valid pointer to the derived class. */ static void* taskEntryPoint(void* arg); FixedSlotSequence pst; bool started; }; #endif /* FRAMEWORK_OSAL_LINUX_FIXEDTIMESLOTTASK_H_ */