60 #if FREERTOSCPP_USE_NAMESPACE 98 configASSERT((static_cast<int>(p) + offset) >= 0);
99 configASSERT((static_cast<int>(p) + offset) < configMAX_PRIORITIES);
100 return static_cast<TaskPriority>(
static_cast<int>(p) + offset);
109 configASSERT((static_cast<int>(p) - offset) >= 0);
110 configASSERT((static_cast<int>(p) - offset) < configMAX_PRIORITIES);
111 return static_cast<TaskPriority>(
static_cast<int>(p) - offset);
148 #if INCLUDE_vTaskDelete 166 static void delay(TickType_t time) { vTaskDelay(time); }
167 #if FREERTOSCPP_USE_CHRONO 177 #if INCLUDE_xTaskDelayUntil 198 static bool delayUntil(TickType_t& prev, TickType_t time) {
return xTaskDelayUntil(&prev, time);}
199 #if FREERTOSCPP_USE_CHRONO 220 static bool delayUntil(TickType_t& prev,
Time_ms ms) {
return xTaskDelayUntil(&prev,
ms2ticks(ms)); }
222 #elif INCLUDE_vTaskDelayUntil 240 static void delayUntil(TickType_t& prev, TickType_t time) { vTaskDelay(&prev, time); }
241 #if FREERTOSCPP_USE_CHRONO 259 static void delayUntil(TickType_t& prev,
Time_ms ms) { vTaskDelay(&prev,
ms2ticks(ms)); }
263 #if INCLUDE_xTaskAbortDelay 268 bool abortDelay() {
return xTaskAbortDelay(
taskHandle); }
271 #if INCLUDE_uxTaskPriorityGet 281 #if INCLUDE_vTaskPrioritySet 291 #if INCLUDE_vTaskSuspend 307 # if INCLUDE_xTaskResumeFromISR 316 bool resume_ISR() {
return xTaskResumeFromISR(
taskHandle); }
324 bool notify(uint32_t value, eNotifyAction act)
325 {
return xTaskNotify(
taskHandle, value, act); }
326 bool notify_ISR(uint32_t value, eNotifyAction act, portBASE_TYPE& waswoken)
327 {
return xTaskNotifyFromISR(
taskHandle, value, act, &waswoken);}
329 {
return xTaskNotifyAndQuery(
taskHandle, value, act, &old); }
330 bool notify_query_ISR(uint32_t value, eNotifyAction act, uint32_t &old, portBASE_TYPE& waswoken)
331 {
return xTaskNotifyAndQueryFromISR(
taskHandle, value, act, &old, &waswoken); }
332 #if FREERTOS_VERSION_ALL >= 10'004'000 333 bool notifyIndex(UBaseType_t idx, uint32_t value, eNotifyAction act)
334 {
return xTaskNotifyIndexed(
taskHandle, idx, value, act); }
335 bool notifyIndex_ISR(UBaseType_t idx, uint32_t value, eNotifyAction act, portBASE_TYPE& waswoken)
336 {
return xTaskNotifyIndexedFromISR(
taskHandle, idx, value, act, &waswoken);}
337 bool notifyIndex_query(UBaseType_t idx, uint32_t value, eNotifyAction act, uint32_t &old)
338 {
return xTaskNotifyAndQueryIndexed(
taskHandle, idx, value, act, &old); }
339 bool notifyIndex_query_ISR(UBaseType_t idx, uint32_t value, eNotifyAction act, uint32_t &old, portBASE_TYPE& waswoken)
340 {
return xTaskNotifyAndQueryIndexedFromISR(
taskHandle, idx, value, act, &old, &waswoken); }
343 #if FREERTOS_VERSION_ALL >= 10'003'000 344 bool notifyStateClear() {
return xTaskNotifyStateClear(
taskHandle); }
345 uint32_t notifyValueClear(uint32_t bits) {
return ulTaskNotifyValueClear(
taskHandle, bits); }
346 #if FREERTOS_VERSION_ALL >= 10'004'000 347 bool notifyStateClearIndex(UBaseType_t idx) {
return xTaskNotifyStateClearIndexed(
taskHandle, idx); }
348 uint32_t notifyValueClearIndex(UBaseType_t idx, uint32_t bits) {
return ulTaskNotifyValueClearIndexed(
taskHandle, idx, bits); }
359 { vTaskNotifyGiveFromISR(
taskHandle, &waswoken); }
361 #if FREERTOS_VERSION_ALL >= 10'004'000 362 bool giveIndex(UBaseType_t idx) {
return xTaskNotifyGiveIndexed(
taskHandle, idx); }
363 void giveIndex_ISR(UBaseType_t idx, portBASE_TYPE& waswoken)
364 { vTaskNotifyGiveIndexedFromISR(
taskHandle, idx, &waswoken); }
370 static uint32_t
wait(uint32_t clearEnter, uint32_t clearExit = 0xFFFFFFFF, uint32_t* value =
nullptr, TickType_t ticks = portMAX_DELAY)
371 {
return xTaskNotifyWait(clearEnter, clearExit, value, ticks); }
372 #if FREERTOSCPP_USE_CHRONO 373 static uint32_t
wait(uint32_t clearEnter, uint32_t clearExit, uint32_t* value,
Time_ms ms)
374 {
return xTaskNotifyWait(clearEnter, clearExit, value,
ms2ticks(ms)); }
376 #if FREERTOS_VERSION_ALL >= 10'004'000 377 static uint32_t
waitIndex(UBaseType_t idx, uint32_t clearEnter, uint32_t clearExit = 0xFFFFFFFF, uint32_t* value =
nullptr, TickType_t ticks = portMAX_DELAY)
378 {
return xTaskNotifyWaitIndexed(idx, clearEnter, clearExit, value, ticks); }
379 #if FREERTOSCPP_USE_CHRONO 380 static uint32_t
waitIndex(UBaseType_t idx, uint32_t clearEnter, uint32_t clearExit, uint32_t* value,
Time_ms ms)
381 {
return xTaskNotifyWaitIndexed(idx, clearEnter, clearExit, value,
ms2ticks(ms)); }
382 #endif // FREERTOSCPP_USE_CHRONO 383 #endif // FREERTOS_VERSION_ALL >= 10'004'000 398 static uint32_t
take(
bool clear =
true, TickType_t ticks = portMAX_DELAY)
399 {
return ulTaskNotifyTake(clear, ticks); }
400 #if FREERTOSCPP_USE_CHRONO 415 {
return ulTaskNotifyTake(clear,
ms2ticks(ticks)); }
421 #if __cplusplus < 201101L 427 #endif // __cplusplus 441 template<uint32_t stackDepth
442 #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) 461 #if( configSUPPORT_STATIC_ALLOCATION == 1 ) 462 taskHandle = xTaskCreateStatic(taskfun, name, stackDepth, myParm, priority_, stack, &tcb);
464 xTaskCreate(taskfun, name, stackSize, myParm, priority_, &
taskHandle);
469 #if( configSUPPORT_STATIC_ALLOCATION == 1 ) 471 StackType_t stack[stackDepth];
479 #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) 496 unsigned portSHORT stackSize,
void * myParm =
nullptr) :
498 xTaskCreate(taskfun, name, stackSize, myParm, priority_, &
taskHandle);
516 virtual void task() = 0;
550 if(xTaskGetSchedulerState() != taskSCHEDULER_RUNNING) {
561 void task()
override = 0;
566 #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) 586 if(xTaskGetSchedulerState() != taskSCHEDULER_RUNNING) {
597 void task()
override = 0;
604 #if FREERTOSCPP_USE_NAMESPACE static uint32_t take(bool clear, Time_ms ticks)
Wait for a task Give notification.
Definition: TaskCPP.h:414
TaskPriority
Names for Base set of Priorities.
Definition: TaskCPP.h:83
Critical Tasks, Do NOW, must be quick (Used by FreeRTOS)
Definition: TaskCPP.h:89
static uint32_t waitIndex(UBaseType_t idx, uint32_t clearEnter, uint32_t clearExit=0xFFFFFFFF, uint32_t *value=nullptr, TickType_t ticks=portMAX_DELAY)
Definition: TaskCPP.h:377
TaskHandle_t taskHandle
Handle for the task we are managing.
Definition: TaskCPP.h:418
Dynamically Created Task Wrapper.
Definition: TaskCPP.h:508
TaskClassS(char const *name, TaskPriority priority_, unsigned portSHORT stackDepth_=0)
Constructor.
Definition: TaskCPP.h:545
Lowest Level Wrapper.
Definition: TaskCPP.h:125
Urgent tasks, short deadlines, not much processing.
Definition: TaskCPP.h:88
constexpr TickType_t ms2ticks(Time_ms ms)
Definition: FreeRTOScpp.h:81
bool notify_query(uint32_t value, eNotifyAction act, uint32_t &old)
Definition: TaskCPP.h:328
std::chrono::milliseconds Time_ms
Definition: FreeRTOScpp.h:79
void taskcpp_task_thunk(void *)
Thunk for FreeRTOS to C++ Task Wrapper.
Definition: TaskCpp.cpp:47
Definition: CallBack.h:63
static uint32_t take(bool clear=true, TickType_t ticks=portMAX_DELAY)
Wait for a task Give notification.
Definition: TaskCPP.h:398
static uint32_t waitIndex(UBaseType_t idx, uint32_t clearEnter, uint32_t clearExit, uint32_t *value, Time_ms ms)
Definition: TaskCPP.h:380
virtual ~TaskClassS()
Definition: TaskCPP.h:555
Normal User Interface Level.
Definition: TaskCPP.h:86
TaskBase()
Default Constructor: Needs a subclass to fill in the handle later, so protected.
Definition: TaskCPP.h:131
void suspend()
Suspend the Task.
Definition: TaskCPP.h:297
Non-Real Time operations. tasks that don't block.
Definition: TaskCPP.h:84
Statically Created Task Wrapper.
Definition: TaskCPP.h:445
~TaskClassBase()
Definition: TaskCPP.h:511
constexpr TaskPriority operator+(TaskPriority p, int offset)
Allow adjment to Task Priority.
Definition: TaskCPP.h:97
Make a class based task.
Definition: TaskCPP.h:530
static void delay(Time_ms ms)
Delay for a period of time, specified in milliseconds.
Definition: TaskCPP.h:174
virtual ~TaskBase()
Destructor.
Definition: TaskCPP.h:147
void resume()
Resume the Task.
Definition: TaskCPP.h:304
Semi-Critical, have deadlines, not a lot of processing.
Definition: TaskCPP.h:87
void priority(TaskPriority priority_)
Set Task priority.
Definition: TaskCPP.h:288
Non-Critical operations.
Definition: TaskCPP.h:85
void operator=(TaskBase const &)=delete
We are not assignable.
bool notify_query_ISR(uint32_t value, eNotifyAction act, uint32_t &old, portBASE_TYPE &waswoken)
Definition: TaskCPP.h:330
TaskBase(TaskHandle_t handle)
Constructor.
Definition: TaskCPP.h:138
bool notify(uint32_t value, eNotifyAction act)
Notify a Task.
Definition: TaskCPP.h:324
TaskClassBase()
Definition: TaskCPP.h:510
TaskS(char const *name, void(*taskfun)(void *), TaskPriority priority_, void *myParm=0)
Constructor.
Definition: TaskCPP.h:458
void give_ISR(portBASE_TYPE &waswoken)
Definition: TaskCPP.h:358
bool notify_ISR(uint32_t value, eNotifyAction act, portBASE_TYPE &waswoken)
Definition: TaskCPP.h:326
static uint32_t wait(uint32_t clearEnter, uint32_t clearExit=0xFFFFFFFF, uint32_t *value=nullptr, TickType_t ticks=portMAX_DELAY)
Wait for task notification.
Definition: TaskCPP.h:370
constexpr TaskPriority operator-(TaskPriority p, int offset)
Allow adjment to Task Priority.
Definition: TaskCPP.h:108
TaskHandle_t getTaskHandle() const
Get Task Handle.
Definition: TaskCPP.h:159
bool give()
Notify a Task as a semaphore.
Definition: TaskCPP.h:357
static void delay(TickType_t time)
Delay for a period of time.
Definition: TaskCPP.h:166
static uint32_t wait(uint32_t clearEnter, uint32_t clearExit, uint32_t *value, Time_ms ms)
Definition: TaskCPP.h:373