fsfw/tasks/TaskBase.h
2016-06-15 23:48:49 +02:00

87 lines
3.0 KiB
C++

/**
* @file TaskBase.h
*
* @date 11/05/2012
* @author Bastian Baetz
*
* @brief This file contains the definition of the TaskBase class.
* It is a reviewed and updated version of a file originally created
* by Claas Ziemke in 2010.
*/
#ifndef TASKBASE_H_
#define TASKBASE_H_
#include <framework/osal/OSAL.h>
#include <framework/returnvalues/HasReturnvaluesIF.h>
#include <framework/tasks/TaskIF.h>
/**
* @brief This is the basic task handling class.
*
* @details The virtual parent class contains attributes and methods to perform basic task operations.
* The task is created in the constructor. Next to the main methods to set the functionality
* and start the task, it also contains methods to stop execution safely and to return its
* identifier.
* The whole class was undergoing a major redesign by Bastian Baetz in November 2012 where
* unnecessary attributes were removed and task creation was simplified. Also, the class
* implements the TaskIF now.
*
* @author Claas Ziemke
*
* @date 07/23/2010
*
* @ingroup task_handling
*/
class TaskBase : public TaskIF, public HasReturnvaluesIF {
protected:
/**
* @brief The task's name -a user specific information for the operating system- is
* generated automatically with the help of this static counter.
*/
static uint8_t taskCounter;
/**
* @brief The class stores the task id it got assigned from the operating system in this attribute.
* If initialization fails, the id is set to zero.
*/
TaskId_t id;
/**
* @brief The isRunning information can be used by child classes to change its operational behavior.
* @details It is not used in the TaskBase class itself, but for example in periodic tasks to leave
* the periodic activity.
*/
bool isRunning;
public:
/**
* @brief The constructor creates and initializes a task.
* @details This is accomplished by using the operating system call to create a task. The name is
* created automatically with the help od taskCounter. Priority and stack size are
* adjustable, all other attributes are set with default values.
* @param priority Sets the priority of a task. Values range from a low 0 to a high 99.
* @param stack_size The stack size reserved by the operating system for the task.
* @param nam The name of the Task, as a null-terminated String. Currently max 4 chars supported (excluding Null-terminator), rest will be truncated
*/
TaskBase( TaskPriority_t priority, size_t stack_size, const char *name);
/**
* @brief In the destructor, the created task is deleted.
*/
virtual ~TaskBase();
/**
* @brief This abstract method must be implemented by child classes to successfully start a task.
*/
virtual ReturnValue_t startTask() = 0;
/**
* @brief This method returns the task id of this class.
*/
TaskId_t getId();
/**
* @brief With this method, the task "running" state can be set.
* @details This typically involves leaving any kind of periodic activity.
*/
void setRunning( bool set );
};
#endif /* TASKBASE_H_ */