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

Partial implementation of the user task with a compile-time scheduling weight. Use when the kernel is configured with SwitchStrategySmoothWeightedRoundRobin. More...

#include <stk_helper.h>

Inheritance diagram for stk::TaskW< _Weight, _StackSize, _AccessMode >:
Collaboration diagram for stk::TaskW< _Weight, _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)
 Hard Real-Time mode is unsupported for weighted tasks. Triggers an assertion if called.
virtual int32_t GetWeight () const
 Returns the compile-time weight _Weight.
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

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

Private Attributes

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

Detailed Description

template<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
class stk::TaskW< _Weight, _StackSize, _AccessMode >

Partial implementation of the user task with a compile-time scheduling weight. Use when the kernel is configured with SwitchStrategySmoothWeightedRoundRobin.

Template Parameters
_WeightStatic scheduling weight (positive, non-zero 24-bit integer). Higher values cause this task to receive proportionally more CPU time.
_StackSizeStack size in elements of Word.
_AccessModeHardware access mode (ACCESS_USER or ACCESS_PRIVILEGED).
Note
Hard Real-Time mode (KERNEL_HRT) is not supported for weighted tasks. OnDeadlineMissed() will trigger an assertion if HRT scheduling is attempted.

See Task for full usage example and implementation guidance.

Definition at line 116 of file stk_helper.h.

Member Enumeration Documentation

◆ anonymous enum

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

Definition at line 119 of file stk_helper.h.

Partial implementation of the user task with a compile-time scheduling weight. Use when the kernel is...
Definition stk_helper.h:117

Constructor & Destructor Documentation

◆ TaskW() [1/2]

template<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
stk::TaskW< _Weight, _StackSize, _AccessMode >::TaskW ( const TaskW< _Weight, _StackSize, _AccessMode > & )
protecteddelete

Referenced by operator=().

Here is the caller graph for this function:

◆ TaskW() [2/2]

template<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
stk::TaskW< _Weight, _StackSize, _AccessMode >::TaskW ( )
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 153 of file stk_helper.h.

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

References m_stack.

◆ ~TaskW()

template<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
stk::TaskW< _Weight, _StackSize, _AccessMode >::~TaskW ( )
inlineprotected

Destructor.

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

Definition at line 158 of file stk_helper.h.

159 {}

Member Function Documentation

◆ GetAccessMode()

template<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
EAccessMode stk::TaskW< _Weight, _StackSize, _AccessMode >::GetAccessMode ( ) const
inlinevirtual

Get hardware access mode of the user task.

Implements stk::ITask.

Definition at line 124 of file stk_helper.h.

124{ return _AccessMode; }

◆ GetId()

template<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
virtual TId stk::TaskW< _Weight, _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 137 of file stk_helper.h.

137{ 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<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
Word * stk::TaskW< _Weight, _StackSize, _AccessMode >::GetStack ( ) const
inlinevirtual

Get pointer to the stack memory.

Implements stk::IStackMemory.

Definition at line 121 of file stk_helper.h.

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

References m_stack.

◆ GetStackSize()

template<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
size_t stk::TaskW< _Weight, _StackSize, _AccessMode >::GetStackSize ( ) const
inlinevirtual

Get number of elements of the stack memory array.

Implements stk::IStackMemory.

Definition at line 122 of file stk_helper.h.

122{ return _StackSize; }

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

Here is the caller graph for this function:

◆ GetStackSizeBytes()

template<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
size_t stk::TaskW< _Weight, _StackSize, _AccessMode >::GetStackSizeBytes ( ) const
inlinevirtual

Get size of the memory in bytes.

Implements stk::IStackMemory.

Definition at line 123 of file stk_helper.h.

123{ return _StackSize * sizeof(Word); }

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

Here is the caller graph for this function:

◆ GetTraceName()

template<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
virtual const char * stk::TaskW< _Weight, _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 141 of file stk_helper.h.

141{ return nullptr; }

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

Here is the caller graph for this function:

◆ GetWeight()

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

Returns the compile-time weight _Weight.

Implements stk::ITask.

Definition at line 133 of file stk_helper.h.

133{ return _Weight; }

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

Here is the caller graph for this function:

◆ OnDeadlineMissed()

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

Hard Real-Time mode is unsupported for weighted tasks. Triggers an assertion if called.

Warning
Do not use TaskW with KERNEL_HRT. Use Task instead.

Implements stk::ITask.

Definition at line 129 of file stk_helper.h.

129{ STK_ASSERT(false); (void)duration; }
#define STK_ASSERT(e)
Runtime assertion. Halts execution if the expression e evaluates to false.
Definition stk_defs.h:330

References STK_ASSERT.

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

Here is the caller graph for this function:

◆ operator=()

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

References TaskW().

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
}
}
virtual void Run()=0
Entry point of the user task.

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<int32_t _Weight, size_t _StackSize, EAccessMode _AccessMode>
StackMemoryDef<_StackSize>::Type stk::TaskW< _Weight, _StackSize, _AccessMode >::m_stack
private

Stack memory region, 16-byte aligned.

Definition at line 162 of file stk_helper.h.

Referenced by GetStack(), and TaskW().


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