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::Task< _StackSize, _AccessMode > Class Template Referenceabstract

Partial implementation of the user task. More...

#include <stk_helper.h>

Inheritance diagram for stk::Task< _StackSize, _AccessMode >:
Collaboration diagram for stk::Task< _StackSize, _AccessMode >:

Public Types

enum  { STACK_SIZE = _StackSize }

Public Member Functions

WordGetStack () const
 Get pointer to the stack memory.
size_t GetStackSize () const
 Get number of elements of the stack memory array.
size_t GetStackSizeBytes () const
 Get size of the memory in bytes.
EAccessMode GetAccessMode () const
 Get hardware access mode of the user task.
virtual void OnDeadlineMissed (uint32_t duration)
 Default no-op handler. Override in subclass to log or handle missed deadlines.
virtual int32_t GetWeight () const
 Default weight of 1. Override in subclass if custom scheduling weight is needed.
virtual TId GetId () const
 Get object's own address as its Id. Unique per task instance, requires no manual assignment.
virtual const char * GetTraceName () const
 Override in subclass to supply a name for SEGGER SystemView tracing. Returns NULL by default.
virtual void Run ()=0
 Entry point of the user task.

Protected Member Functions

 Task (const Task &)=delete
Taskoperator= (const Task &)=delete
 Task ()
 Initializes task instance and zero-initializes its internal stack memory.
 ~Task ()
 Destructor.

Private Attributes

StackMemoryDef< _StackSize >::Type m_stack
 Stack memory region, 16-byte aligned.

Detailed Description

template<size_t _StackSize, EAccessMode _AccessMode>
class stk::Task< _StackSize, _AccessMode >

Partial implementation of the user task.

Provides stack storage and default implementations of all optional ITask methods. Inherit from this class and implement GetFunc() and GetFuncUserData() to make a schedulable task. Use ACCESS_USER for unprivileged tasks and ACCESS_PRIVILEGED for tasks requiring full hardware access.

Usage example:

template <stk::EAccessMode _AccessMode>
class MyTask : public stk::Task<256, _AccessMode>
{
private:
void Run()
{
while (true)
{
// do some work here ...
}
}
};
MyTask<ACCESS_PRIVILEGED> my_task;
virtual void Run()=0
Entry point of the user task.
Partial implementation of the user task.
Definition stk_helper.h:50

Definition at line 49 of file stk_helper.h.

Member Enumeration Documentation

◆ anonymous enum

template<size_t _StackSize, EAccessMode _AccessMode>
anonymous enum
Enumerator
STACK_SIZE 

Definition at line 52 of file stk_helper.h.

Constructor & Destructor Documentation

◆ Task() [1/2]

template<size_t _StackSize, EAccessMode _AccessMode>
stk::Task< _StackSize, _AccessMode >::Task ( const Task< _StackSize, _AccessMode > & )
protecteddelete

Referenced by operator=().

Here is the caller graph for this function:

◆ Task() [2/2]

template<size_t _StackSize, EAccessMode _AccessMode>
stk::Task< _StackSize, _AccessMode >::Task ( )
inlineprotected

Initializes task instance and zero-initializes its internal stack memory.

The constructor is protected to ensure that the Task class can only be instantiated through a derived subclass. It handles the allocation (if applicable) and zero-initialization of the m_stack member based on the _StackSize template parameter.

Definition at line 88 of file stk_helper.h.

88 : m_stack()
89 {}
StackMemoryDef< _StackSize >::Type m_stack
Stack memory region, 16-byte aligned.
Definition stk_helper.h:98

References m_stack.

◆ ~Task()

template<size_t _StackSize, EAccessMode _AccessMode>
stk::Task< _StackSize, _AccessMode >::~Task ( )
inlineprotected

Destructor.

Note
MISRA deviation: [STK-DEV-005] Rule 10-3-2.

Definition at line 94 of file stk_helper.h.

95 {}

Member Function Documentation

◆ GetAccessMode()

template<size_t _StackSize, EAccessMode _AccessMode>
EAccessMode stk::Task< _StackSize, _AccessMode >::GetAccessMode ( ) const
inlinevirtual

Get hardware access mode of the user task.

Implements stk::ITask.

Definition at line 57 of file stk_helper.h.

57{ return _AccessMode; }

◆ GetId()

template<size_t _StackSize, EAccessMode _AccessMode>
virtual TId stk::Task< _StackSize, _AccessMode >::GetId ( ) const
inlinevirtual

Get object's own address as its Id. Unique per task instance, requires no manual assignment.

Implements stk::ITask.

Definition at line 72 of file stk_helper.h.

72{ return hw::PtrToWord(this); }
__stk_forceinline Word PtrToWord(T *ptr) noexcept
Cast a pointer to a CPU register-width integer.
Definition stk_arch.h:94

References stk::hw::PtrToWord().

Referenced by stk::test::TEST().

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

◆ GetStack()

template<size_t _StackSize, EAccessMode _AccessMode>
Word * stk::Task< _StackSize, _AccessMode >::GetStack ( ) const
inlinevirtual

Get pointer to the stack memory.

Implements stk::IStackMemory.

Definition at line 54 of file stk_helper.h.

54{ return const_cast<Word *>(m_stack); }

References m_stack.

Referenced by stk::test::TEST(), stk::test::TEST(), stk::test::TEST(), stk::test::TEST(), stk::test::TEST(), stk::test::TEST(), stk::test::TEST(), stk::test::TEST(), stk::test::TEST(), stk::test::TEST(), stk::test::TestHrtTaskExitDuringSleepState(), and stk::test::TestTaskSleep().

Here is the caller graph for this function:

◆ GetStackSize()

template<size_t _StackSize, EAccessMode _AccessMode>
size_t stk::Task< _StackSize, _AccessMode >::GetStackSize ( ) const
inlinevirtual

Get number of elements of the stack memory array.

Implements stk::IStackMemory.

Definition at line 55 of file stk_helper.h.

55{ return _StackSize; }

Referenced by stk::test::TEST().

Here is the caller graph for this function:

◆ GetStackSizeBytes()

template<size_t _StackSize, EAccessMode _AccessMode>
size_t stk::Task< _StackSize, _AccessMode >::GetStackSizeBytes ( ) const
inlinevirtual

Get size of the memory in bytes.

Implements stk::IStackMemory.

Definition at line 56 of file stk_helper.h.

56{ return _StackSize * sizeof(Word); }

Referenced by stk::test::TEST().

Here is the caller graph for this function:

◆ GetTraceName()

template<size_t _StackSize, EAccessMode _AccessMode>
virtual const char * stk::Task< _StackSize, _AccessMode >::GetTraceName ( ) const
inlinevirtual

Override in subclass to supply a name for SEGGER SystemView tracing. Returns NULL by default.

Implements stk::ITask.

Definition at line 76 of file stk_helper.h.

76{ return nullptr; }

Referenced by stk::test::TEST().

Here is the caller graph for this function:

◆ GetWeight()

template<size_t _StackSize, EAccessMode _AccessMode>
virtual int32_t stk::Task< _StackSize, _AccessMode >::GetWeight ( ) const
inlinevirtual

Default weight of 1. Override in subclass if custom scheduling weight is needed.

Note
Only relevant when using SwitchStrategySmoothWeightedRoundRobin. Prefer TaskW for compile-time weight assignment.

Implements stk::ITask.

Definition at line 68 of file stk_helper.h.

68{ return 1; }

Referenced by stk::test::TEST().

Here is the caller graph for this function:

◆ OnDeadlineMissed()

template<size_t _StackSize, EAccessMode _AccessMode>
virtual void stk::Task< _StackSize, _AccessMode >::OnDeadlineMissed ( uint32_t duration)
inlinevirtual

Default no-op handler. Override in subclass to log or handle missed deadlines.

Note
HRT deadline misses are only possible when the kernel is started with KERNEL_HRT.

Implements stk::ITask.

Reimplemented in stk::test::TaskMock< _AccessMode >, and stk::test::TaskMock< ACCESS_USER >.

Definition at line 62 of file stk_helper.h.

62{ (void)duration; }

Referenced by stk::test::TaskMock< _AccessMode >::OnDeadlineMissed().

Here is the caller graph for this function:

◆ operator=()

template<size_t _StackSize, EAccessMode _AccessMode>
Task & stk::Task< _StackSize, _AccessMode >::operator= ( const Task< _StackSize, _AccessMode > & )
protecteddelete

References Task().

Here is the call graph for this function:

◆ Run()

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

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::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::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, and TaskWrapper.

Member Data Documentation

◆ m_stack

template<size_t _StackSize, EAccessMode _AccessMode>
StackMemoryDef<_StackSize>::Type stk::Task< _StackSize, _AccessMode >::m_stack
private

Stack memory region, 16-byte aligned.

Definition at line 98 of file stk_helper.h.

Referenced by GetStack(), and Task().


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