SuperTinyKernel™ RTOS 1.05.3
Lightweight, high-performance, deterministic, bare-metal C++ RTOS for resource-constrained embedded systems. MIT Open Source License.
Loading...
Searching...
No Matches
stk::ITask Class Referenceabstract

Interface for a user task. More...

#include <stk_common.h>

Inheritance diagram for stk::ITask:
Collaboration diagram for stk::ITask:

Public Member Functions

virtual void Run ()=0
 Entry point of the user task.
virtual EAccessMode GetAccessMode () const =0
 Get hardware access mode of the user task.
virtual void OnDeadlineMissed (uint32_t duration)=0
 Called by the scheduler if deadline of the task is missed when Kernel is operating in Hard Real-Time mode (see stk::KERNEL_HRT).
virtual void OnExit ()=0
 Called by the kernel before removal from the scheduling (see stk::KERNEL_DYNAMIC).
virtual int32_t GetWeight () const =0
 Get static base weight of the task.
virtual TId GetId () const =0
 Get task Id set by application.
virtual const char * GetTraceName () const =0
 Get task trace name set by application.
virtual WordGetStack () const =0
 Get pointer to the stack memory.
virtual size_t GetStackSize () const =0
 Get number of elements of the stack memory array.
virtual size_t GetStackSizeBytes () const =0
 Get size of the memory in bytes.
virtual size_t GetStackSpace ()
 Get available stack space.

Detailed Description

Interface for a user task.

Note
Inherit this interface by your thread/task class to make it schedulable by the Kernel.

Usage example:

class MyTask : public stk::Task<256, ACCESS_USER>
{
void Run() override
{
while (true)
{
// task logic here
}
}
};
MyTask task1, task2;
kernel.AddTask(&task1);
kernel.AddTask(&task2);
static TestTask< ACCESS_PRIVILEGED > task2(1)
virtual void Run()=0
Entry point of the user task.
Partial implementation of the user task.
Definition stk_helper.h:50

Definition at line 490 of file stk_common.h.

Member Function Documentation

◆ GetAccessMode()

◆ GetId()

virtual TId stk::ITask::GetId ( ) const
pure virtual

Get task Id set by application.

Returns
Application-defined task identifier. Return 0 if unused.
Note
Used for debugging and tracing only. The kernel does not interpret this value.

Implemented in stk::Task< _StackSize, _AccessMode >, stk::Task< 256, _AccessMode >, stk::Task< STACK_SIZE_MIN, _AccessMode >, stk::TaskW< _Weight, _StackSize, _AccessMode >, stk::TaskW< _Weight, STACK_SIZE_MIN, _AccessMode >, stk::time::TimerHost::TimerWorkerTask, StkThread, and TaskWrapper.

Referenced by stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::Bind().

Here is the caller graph for this function:

◆ GetStack()

◆ GetStackSize()

◆ GetStackSizeBytes()

◆ GetStackSpace()

virtual size_t stk::IStackMemory::GetStackSpace ( )
inlinevirtualinherited

Get available stack space.

Returns
Number of elements of the stack memory array remaining on the stack (computed via the watermark pattern). Returns 0 if the stack has been fully used or the watermark STK_STACK_MEMORY_FILLER was overwritten.
Warning
Stack type: Bottom to Top (index[0]).

Definition at line 252 of file stk_common.h.

253 {
254 const Word *stack = GetStack();
255 const size_t stack_size = GetStackSize();
256
257 // count leading Words equal to STK_STACK_MEMORY_FILLER (watermark)
258 size_t space = 0U;
259 for ( ; (space < stack_size) && (stack[space] == STK_STACK_MEMORY_FILLER); ++space)
260 {}
261
262 return space;
263 }
#define STK_STACK_MEMORY_FILLER
Sentinel value written to the entire stack region at initialization (stack watermark pattern).
Definition stk_defs.h:377
uintptr_t Word
Native processor word type.
Definition stk_common.h:113
virtual size_t GetStackSize() const =0
Get number of elements of the stack memory array.
virtual Word * GetStack() const =0
Get pointer to the stack memory.

References GetStack(), GetStackSize(), and STK_STACK_MEMORY_FILLER.

Referenced by osThreadGetStackSpace(), and stk::test::TEST().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetTraceName()

virtual const char * stk::ITask::GetTraceName ( ) const
pure virtual

Get task trace name set by application.

Returns
Null-terminated name string, or NULL if unused.
Note
Used for debugging and tracing only (e.g. SEGGER SystemView). Kernel does not interpret this value.

Implemented in stk::Task< _StackSize, _AccessMode >, stk::Task< 256, _AccessMode >, stk::Task< STACK_SIZE_MIN, _AccessMode >, stk::TaskW< _Weight, _StackSize, _AccessMode >, stk::TaskW< _Weight, STACK_SIZE_MIN, _AccessMode >, stk::time::TimerHost::TimerWorkerTask, StkThread, and TaskWrapper.

◆ GetWeight()

virtual int32_t stk::ITask::GetWeight ( ) const
pure virtual

◆ OnDeadlineMissed()

virtual void stk::ITask::OnDeadlineMissed ( uint32_t duration)
pure virtual

Called by the scheduler if deadline of the task is missed when Kernel is operating in Hard Real-Time mode (see stk::KERNEL_HRT).

Parameters
[in]durationElapsed active time in ticks at the point the deadline was detected. Always greater than the task's configured deadline (ticks).
Note
Optional handler. Use it for fault logging.
After this call returns, IPlatform::ProcessHardFault() is invoked and the system enters a safe state. This function should not attempt to recover scheduling.

Implemented in stk::Task< _StackSize, _AccessMode >, stk::Task< 256, _AccessMode >, stk::Task< STACK_SIZE_MIN, _AccessMode >, stk::TaskW< _Weight, _StackSize, _AccessMode >, stk::TaskW< _Weight, STACK_SIZE_MIN, _AccessMode >, stk::test::TaskMock< _AccessMode >, stk::test::TaskMock< ACCESS_USER >, stk::time::TimerHost::TimerWorkerTask, StkThread, and TaskWrapper.

◆ OnExit()

virtual void stk::ITask::OnExit ( )
pure virtual

Called by the kernel before removal from the scheduling (see stk::KERNEL_DYNAMIC).

Note
The task's stack is no longer in use but the ITask object itself is still valid.
The default no-op implementation is sufficient for detached tasks. Override to implement join semantics (signal a waiting joiner).
Called in kernel/tick context - keep it short. ISR-safe primitives only (e.g. stk::sync::Semaphore::Signal(), stk::sync::EventFlags::Set()).
KERNEL_DYNAMIC only. Never called in KERNEL_STATIC mode.

Implemented in stk::Task< _StackSize, _AccessMode >, stk::Task< 256, _AccessMode >, stk::Task< STACK_SIZE_MIN, _AccessMode >, stk::TaskW< _Weight, _StackSize, _AccessMode >, stk::TaskW< _Weight, STACK_SIZE_MIN, _AccessMode >, stk::time::TimerHost::TimerWorkerTask, StkThread, and TaskWrapper.

Referenced by stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >::RemoveTask().

Here is the caller graph for this function:

◆ Run()

virtual void stk::ITask::Run ( )
pure virtual

Entry point of the user task.

Note
Called by the Kernel when the task is scheduled for execution. Implement this method with the task's main logic.
Warning
If Kernel is configured as KERNEL_STATIC, the body must contain an infinite loop.
void Run()
{
while (true)
{
// task logic here
}
}

Implemented in stk::test::blockpool::AlignBlockSizeTask< _AccessMode >, stk::test::blockpool::BlockingAllocTask< _AccessMode >, stk::test::blockpool::ConcurrentAllocFreeTask< _AccessMode >, stk::test::blockpool::ExhaustPoolTask< _AccessMode >, stk::test::blockpool::FreeNullTask< _AccessMode >, stk::test::blockpool::StorageModeTask< _AccessMode >, stk::test::blockpool::StressTask< _AccessMode >, stk::test::blockpool::TimedAllocSuccessTask< _AccessMode >, stk::test::blockpool::TimedAllocTimeoutTask< _AccessMode >, stk::test::blockpool::TryAllocFreeTask< _AccessMode >, stk::test::blockpool::TypedAllocTask< _AccessMode >, stk::test::chain::TestTask< _AccessMode >, stk::test::chain::TestTask< _AccessMode >, stk::test::condvar::MutexReacquiredTask< _AccessMode >, stk::test::condvar::NotifyAllWakesTask< _AccessMode >, stk::test::condvar::NotifyOneOrderTask< _AccessMode >, stk::test::condvar::NotifyOneWakesTask< _AccessMode >, stk::test::condvar::NoWaitTimeoutTask< _AccessMode >, stk::test::condvar::PredicateLoopTask< _AccessMode >, stk::test::condvar::StressTestTask< _AccessMode >, stk::test::condvar::TimeoutExpiresTask< _AccessMode >, stk::test::event::AutoResetBasicTask< _AccessMode >, stk::test::event::InitialStateTask< _AccessMode >, stk::test::event::ManualResetBasicTask< _AccessMode >, stk::test::event::PulseAutoResetTask< _AccessMode >, stk::test::event::PulseManualResetTask< _AccessMode >, stk::test::event::ResetManualTask< _AccessMode >, stk::test::event::TimeoutWaitTask< _AccessMode >, stk::test::event::TryWaitTask< _AccessMode >, stk::test::eventflags::ClearTask< _AccessMode >, stk::test::eventflags::GetTask< _AccessMode >, stk::test::eventflags::InitialFlagsTask< _AccessMode >, stk::test::eventflags::MultiWaiterAllTask< _AccessMode >, stk::test::eventflags::MultiWaiterAnyTask< _AccessMode >, stk::test::eventflags::NoClearTask< _AccessMode >, stk::test::eventflags::SetWaitAllTask< _AccessMode >, stk::test::eventflags::SetWaitAnyTask< _AccessMode >, stk::test::eventflags::TimeoutTask< _AccessMode >, stk::test::eventflags::TryWaitTask< _AccessMode >, stk::test::hrt::TestTask< _AccessMode >, stk::test::msgqueue::AccessorsTask< _AccessMode >, stk::test::msgqueue::BlockingGetTask< _AccessMode >, stk::test::msgqueue::BlockingPutTask< _AccessMode >, stk::test::msgqueue::FillDrainTask< _AccessMode >, stk::test::msgqueue::PingPongTask< _AccessMode >, stk::test::msgqueue::ResetTask< _AccessMode >, stk::test::msgqueue::StressTask< _AccessMode >, stk::test::msgqueue::TimedGetSuccessTask< _AccessMode >, stk::test::msgqueue::TimedGetTimeoutTask< _AccessMode >, stk::test::msgqueue::TimedPutTimeoutTask< _AccessMode >, stk::test::msgqueue::TryPutGetTask< _AccessMode >, stk::test::msgqueue::WrapAroundTask< _AccessMode >, stk::test::mutex::BasicLockUnlockTask< _AccessMode >, stk::test::mutex::FIFOOrderTask< _AccessMode >, stk::test::mutex::InterTaskCoordinationTask< _AccessMode >, stk::test::mutex::RecursiveDepthTask< _AccessMode >, stk::test::mutex::RecursiveLockTask< _AccessMode >, stk::test::mutex::StressTestTask< _AccessMode >, stk::test::mutex::TimedLockTask< _AccessMode >, stk::test::mutex::TryLockTask< _AccessMode >, stk::test::pipe::BasicWriteReadTask< _AccessMode >, stk::test::pipe::BulkWriteReadTask< _AccessMode >, stk::test::pipe::GetSizeIsEmptyTask< _AccessMode >, stk::test::pipe::MultiProducerConsumerTask< _AccessMode >, stk::test::pipe::ReadBlocksWhenEmptyTask< _AccessMode >, stk::test::pipe::StressTestTask< _AccessMode >, stk::test::pipe::TimeoutTask< _AccessMode >, stk::test::pipe::WriteBlocksWhenFullTask< _AccessMode >, stk::test::rwmutex::ConcurrentReadersTask< _AccessMode >, stk::test::rwmutex::ReaderWriterAlternationTask< _AccessMode >, stk::test::rwmutex::ReadUnlockWakesWriterTask< _AccessMode >, stk::test::rwmutex::StressTestTask< _AccessMode >, stk::test::rwmutex::TimedReadLockTask< _AccessMode >, stk::test::rwmutex::TimedWriteLockTask< _AccessMode >, stk::test::rwmutex::TryReadLockWhileWriterTask< _AccessMode >, stk::test::rwmutex::WriterExclusivityTask< _AccessMode >, stk::test::rwmutex::WriterPriorityTask< _AccessMode >, stk::test::rwmutex::WriterStarvationTask< _AccessMode >, stk::test::semaphore::BasicSignalWaitTask< _AccessMode >, stk::test::semaphore::BoundedBufferTask< _AccessMode >, stk::test::semaphore::FIFOOrderTask< _AccessMode >, stk::test::semaphore::InitialCountTask< _AccessMode >, stk::test::semaphore::SignalBeforeWaitTask< _AccessMode >, stk::test::semaphore::StressTestTask< _AccessMode >, stk::test::semaphore::TimeoutWaitTask< _AccessMode >, stk::test::semaphore::ZeroTimeoutTask< _AccessMode >, stk::test::sleep::TestTask< _AccessMode >, stk::test::spinlock::MutualExclusionTask< _AccessMode >, stk::test::spinlock::RecursiveLockTask< _AccessMode >, stk::test::spinlock::RecursiveTryLockTask< _AccessMode >, stk::test::spinlock::StressTestTask< _AccessMode >, stk::test::spinlock::TryLockContendedTask< _AccessMode >, stk::test::spinlock::TryLockFreeTask< _AccessMode >, stk::test::spinlock::UnlockTransferTask< _AccessMode >, stk::test::spinlock::YieldUnderContentionTask< _AccessMode >, stk::test::switch_::TestTask< _AccessMode >, stk::test::TaskMock< _AccessMode >, stk::test::TaskMock< ACCESS_USER >, stk::test::TaskMockW< _Weight, _AccessMode >, stk::test::timer::MultipleTimersTask< _AccessMode >, stk::test::timer::OneShotTimerTask< _AccessMode >, stk::test::timer::PeriodicTimerTask< _AccessMode >, stk::test::timer::ResetPeriodicTimerTask< _AccessMode >, stk::test::timer::RestartTimerTask< _AccessMode >, stk::test::timer::SetPeriodTask< _AccessMode >, stk::test::timer::StartOrResetTask< _AccessMode >, stk::test::timer::StopTimerTask< _AccessMode >, stk::test::timer::StressTestTask< _AccessMode >, stk::time::TimerHost::TimerWorkerTask, StkThread, and TaskWrapper.


The documentation for this class was generated from the following file: