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::test::condvar::TimeoutExpiresTask< _AccessMode > Class Template Reference

Tests that Wait() returns false within the expected time when no notification arrives. More...

Inheritance diagram for stk::test::condvar::TimeoutExpiresTask< _AccessMode >:
Collaboration diagram for stk::test::condvar::TimeoutExpiresTask< _AccessMode >:

Public Types

enum  

Public Member Functions

 TimeoutExpiresTask (uint8_t task_id, int32_t)
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.

Private Member Functions

void Run ()
 Entry point of the user task.

Private Attributes

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

Detailed Description

template<EAccessMode _AccessMode>
class stk::test::condvar::TimeoutExpiresTask< _AccessMode >

Tests that Wait() returns false within the expected time when no notification arrives.

Note
Task 1 calls Wait() with a short timeout and verifies: return value is false, elapsed time is within the expected window. Task 2 then calls Wait() after the producer fires NotifyOne() to confirm that a post-timeout notification still works.

Definition at line 176 of file test_condvar.cpp.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
inherited

Definition at line 52 of file stk_helper.h.

Partial implementation of the user task.
Definition stk_helper.h:50

Constructor & Destructor Documentation

◆ TimeoutExpiresTask()

template<EAccessMode _AccessMode>
stk::test::condvar::TimeoutExpiresTask< _AccessMode >::TimeoutExpiresTask ( uint8_t task_id,
int32_t  )
inline

Definition at line 181 of file test_condvar.cpp.

182 {}
Tests that Wait() returns false within the expected time when no notification arrives.

References m_task_id.

Member Function Documentation

◆ GetAccessMode()

EAccessMode stk::Task< _StackSize, _AccessMode >::GetAccessMode ( ) const
inlinevirtualinherited

Get hardware access mode of the user task.

Implements stk::ITask.

Definition at line 57 of file stk_helper.h.

57{ return _AccessMode; }

◆ GetId()

virtual TId stk::Task< _StackSize, _AccessMode >::GetId ( ) const
inlinevirtualinherited

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

◆ GetStack()

Word * stk::Task< _StackSize, _AccessMode >::GetStack ( ) const
inlinevirtualinherited

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); }

◆ GetStackSize()

size_t stk::Task< _StackSize, _AccessMode >::GetStackSize ( ) const
inlinevirtualinherited

Get number of elements of the stack memory array.

Implements stk::IStackMemory.

Definition at line 55 of file stk_helper.h.

55{ return _StackSize; }

◆ GetStackSizeBytes()

size_t stk::Task< _StackSize, _AccessMode >::GetStackSizeBytes ( ) const
inlinevirtualinherited

Get size of the memory in bytes.

Implements stk::IStackMemory.

Definition at line 56 of file stk_helper.h.

56{ return _StackSize * sizeof(Word); }

◆ GetTraceName()

virtual const char * stk::Task< _StackSize, _AccessMode >::GetTraceName ( ) const
inlinevirtualinherited

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; }

◆ GetWeight()

virtual int32_t stk::Task< _StackSize, _AccessMode >::GetWeight ( ) const
inlinevirtualinherited

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; }

◆ OnDeadlineMissed()

virtual void stk::Task< _StackSize, _AccessMode >::OnDeadlineMissed ( uint32_t duration)
inlinevirtualinherited

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.

Definition at line 62 of file stk_helper.h.

62{ (void)duration; }

◆ Run()

template<EAccessMode _AccessMode>
void stk::test::condvar::TimeoutExpiresTask< _AccessMode >::Run ( )
inlineprivatevirtual

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

Implements stk::ITask.

Definition at line 185 of file test_condvar.cpp.

186 {
187 if (m_task_id == 1)
188 {
189 // Wait with a short timeout; no producer fires, so it must expire
191
192 g_TestMutex.Lock();
194 bool woken = g_TestCond.Wait(g_TestMutex, 50);
196 g_TestMutex.Unlock();
197
198 // Must return false (timeout), and elapsed must be within the 50-tick window
199 if (!woken && elapsed >= 45 && elapsed <= 65)
200 ++g_SharedCounter; // 1: timeout returned false in correct time
201 }
202 else
203 if (m_task_id == 2)
204 {
205 // Wait with generous timeout; producer fires after task 1's timeout expires
206 stk::Sleep(120); // well past task 1's 50-tick timeout
207
208 g_TestMutex.Lock();
210 g_TestMutex.Unlock();
211
212 if (woken)
213 ++g_SharedCounter; // 2: correctly woken by producer
214 }
215 else
216 if (m_task_id == 0)
217 {
218 // Producer: fires after both task 1 timeout and task 2 block
219 stk::Sleep(130);
220
221 g_TestMutex.Lock();
222 g_TestCond.NotifyOne();
223 g_TestMutex.Unlock();
224
226
227 printf("timeout expires: counter=%d (expected 2)\n", (int)g_SharedCounter);
228
229 if (g_SharedCounter == 2)
230 g_TestResult = 1;
231 }
232 }
static int64_t GetTimeNowMs()
Get current time in milliseconds since kernel start.
Definition stk_helper.h:281
void Sleep(uint32_t ticks)
Put calling process into a sleep state.
Definition stk_helper.h:298

References _STK_CV_TEST_SHORT_SLEEP, _STK_CV_TEST_TIMEOUT, stk::test::condvar::g_SharedCounter, stk::test::condvar::g_TestCond, stk::test::condvar::g_TestMutex, stk::test::condvar::g_TestResult, stk::GetTimeNowMs(), m_task_id, and stk::Sleep().

Here is the call graph for this function:

Member Data Documentation

◆ m_stack

StackMemoryDef<_StackSize>::Type stk::Task< _StackSize, _AccessMode >::m_stack
privateinherited

Stack memory region, 16-byte aligned.

Definition at line 98 of file stk_helper.h.

◆ m_task_id

template<EAccessMode _AccessMode>
uint8_t stk::test::condvar::TimeoutExpiresTask< _AccessMode >::m_task_id
private

Definition at line 178 of file test_condvar.cpp.

Referenced by Run(), and TimeoutExpiresTask().


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