scheduler_task.hpp
Go to the documentation of this file.
1 /*
2  * SocialLedge.com - Copyright (C) 2013
3  *
4  * This file is part of free software framework for embedded processors.
5  * You can use it and/or distribute it as long as this copyright header
6  * remains unmodified. The code is free for personal use and requires
7  * permission to use in a commercial product.
8  *
9  * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
10  * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
12  * I SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
13  * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
14  *
15  * You can reach the author of this software at :
16  * p r e e t . w i k i @ g m a i l . c o m
17  */
18 
37 #ifndef CPP_TASK_HPP_
38 #define CPP_TASK_HPP_
39 #include <stdint.h>
40 
41 #include "FreeRTOS.h"
42 #include "queue.h"
43 #include "task.h"
44 
45 
46 
48 class scheduler_task;
49 
50 
59 
70 void scheduler_start(bool dbg_print=false, bool register_internal_tlm=false);
71 
72 
117 {
118  public :
128  static scheduler_task* getTaskPtrByName(const char *);
129 
135  inline const char* getTaskName(void) const { return mName; }
136  inline uint32_t getFreeStack(void) const { return mFreeStack; }
137  inline uint32_t getRunCount(void) const { return mRunCount; }
138  inline TaskHandle_t getTaskHandle(void) const { return mHandle; }
139  inline uint8_t getTaskPriority(void) const { return mPriority; }
145  uint8_t getTaskCpuPercent(void) const;
146  static uint8_t getSysCpuPercent (void);
147  static uint8_t getSysIdlePercent(void);
148 
154  inline void suspend(void) const { vTaskSuspend(mHandle); }
155  inline void resume (void) const { vTaskResume(mHandle); }
187  static bool addSharedObject(const char *name, void *obj_ptr);
188  static void* getSharedObject(const char *name);
226  static bool addSharedObject(uint8_t index, void *obj_ptr);
227  static void* getSharedObject(uint8_t index);
230  protected:
238  scheduler_task(const char *name, uint32_t stack, uint8_t priority, void *param=0);
239  virtual ~scheduler_task() {}
240 
249  virtual bool init(void) { return true; }
250 
256  virtual bool regTlm(void) { return true; }
257 
268  virtual bool taskEntry(void) { return true; }
269 
276  virtual bool run(void *param)=0;
277 
288  inline void setRunDuration(uint32_t milliseconds) { mTaskDelayMs = milliseconds; }
289 
291  inline uint32_t getRunDuration(void) const { return mTaskDelayMs; }
292 
293  #if (0 != configUSE_QUEUE_SETS)
294 
311  void initQueueSet(uint32_t queueSetSize, uint32_t count, ...);
312 
336  inline void setQueueSetBlockTime(TickType_t t) { mQueueSetBlockTime = t; }
337  inline QueueSetHandle_t getQueueSetSelection(void) { return mQueueSetType; }
339  #endif
340 
345  inline void setStatUpdateRate(uint32_t rateMs) { mStatUpdateRateMs = rateMs; }
346 
347  private:
348  /* Hide the constructor that user is not supposed to use.
349  * Need this for const member initialization
350  */
351  scheduler_task() :
352  #if (0 != configUSE_QUEUE_SETS)
353  mQueueSet(0), mQueueSetType(0), mQueueSetBlockTime(0),
354  #endif
355  mHandle(0), mFreeStack(0), mRunCount(0), mTaskDelayMs(0), mStatUpdateRateMs(0),
356  mName(0), mParam(0), mStackSize(0), mPriority(0) {}
357 
358  #if (0 != configUSE_QUEUE_SETS)
359 
360  QueueSetHandle_t mQueueSet;
361  QueueSetMemberHandle_t mQueueSetType;
362  TickType_t mQueueSetBlockTime;
363 
364  #endif
365 
367  TaskHandle_t mHandle;
368  uint32_t mFreeStack;
369  uint32_t mRunCount;
370  uint32_t mTaskDelayMs;
371  uint32_t mStatUpdateRateMs;
372 
375  const char *mName;
376  const void *mParam;
377  const uint32_t mStackSize;
378  const uint8_t mPriority;
379 
382  friend bool scheduler_init_all(bool register_task_tlm);
383  friend void scheduler_c_task_private(void *param);
385 };
386 
387 
388 
389 #endif /* CPP_TASK_HPP_ */
uint32_t getFreeStack(void) const
Definition: scheduler_task.hpp:136
void * QueueSetMemberHandle_t
Definition: queue.h:102
uint32_t getRunCount(void) const
Definition: scheduler_task.hpp:137
TaskHandle_t getTaskHandle(void) const
Definition: scheduler_task.hpp:138
static uint8_t getSysIdlePercent(void)
Get total system IDLE percent.
Definition: scheduler_task.cpp:381
static void * getSharedObject(const char *name)
Definition: scheduler_task.cpp:454
static uint8_t getSysCpuPercent(void)
Get total system CPU percent.
Definition: scheduler_task.cpp:375
void * QueueSetHandle_t
Definition: queue.h:95
static scheduler_task * getTaskPtrByName(const char *)
Definition: scheduler_task.cpp:408
uint32_t TickType_t
Definition: portmacro.h:105
void resume(void) const
Definition: scheduler_task.hpp:155
virtual bool regTlm(void)
Definition: scheduler_task.hpp:256
virtual bool taskEntry(void)
Definition: scheduler_task.hpp:268
void suspend(void) const
Definition: scheduler_task.hpp:154
const char * getTaskName(void) const
Definition: scheduler_task.hpp:135
virtual bool init(void)
Definition: scheduler_task.hpp:249
void setRunDuration(uint32_t milliseconds)
Definition: scheduler_task.hpp:288
uint8_t getTaskPriority(void) const
Definition: scheduler_task.hpp:139
Definition: scheduler_task.hpp:116
void vTaskSuspend(TaskHandle_t xTaskToSuspend) PRIVILEGED_FUNCTION
void * TaskHandle_t
Definition: task.h:103
void vTaskResume(TaskHandle_t xTaskToResume) PRIVILEGED_FUNCTION
static bool addSharedObject(const char *name, void *obj_ptr)
Definition: scheduler_task.cpp:422
void scheduler_add_task(scheduler_task *task)
Definition: scheduler_task.cpp:316
virtual ~scheduler_task()
Definition: scheduler_task.hpp:239
void scheduler_start(bool dbg_print=false, bool register_internal_tlm=false)
Definition: scheduler_task.cpp:330
virtual bool run(void *param)=0
uint32_t getRunDuration(void) const
Definition: scheduler_task.hpp:291
friend void scheduler_c_task_private(void *param)
Definition: scheduler_task.cpp:117
uint8_t getTaskCpuPercent(void) const
Get CPU usage of this task.
Definition: scheduler_task.cpp:369
void setStatUpdateRate(uint32_t rateMs)
Definition: scheduler_task.hpp:345
friend bool scheduler_init_all(bool register_task_tlm)
Definition: scheduler_task.cpp:190