![]() |
SuperTinyKernel™ RTOS 1.08.x
Lightweight, high-performance, deterministic, bare-metal C++ RTOS for resource-constrained embedded systems. MIT Open Source License.
|
Namespace of STK package. More...
Namespaces | |
| namespace | hw |
| Hardware Abstraction Layer (HAL) for architecture-specific operations. | |
| namespace | memory |
| Memory-related primitives. | |
| namespace | tz |
| namespace | util |
| Internal utility namespace containing data structure helpers (linked lists, etc.) used by the kernel implementation. Not part of the public user API. | |
| namespace | sync |
| Synchronization primitives for task coordination and resource protection. | |
| namespace | time |
| Time-related primitives. | |
| namespace | interop_c_helper |
| namespace | pthread |
Classes | |
| class | PlatformArmCortexM |
| Concrete implementation of IPlatform driver for the Arm Cortex-M0, M3, M4, M7 processors. More... | |
| struct | FaultContext |
| ARMv7-M/ARMv8-M system fault exception context state capture. More... | |
| class | PlatformRiscV |
| Concrete implementation of IPlatform driver for the Risc-V processors. More... | |
| class | PlatformContext |
| Base platform context for all platform implementations. More... | |
| class | PlatformX86Win32 |
| Concrete implementation of IPlatform driver for the x86 Win32 platform. More... | |
| class | Kernel |
| Concrete implementation of IKernel. More... | |
| class | ArrayView |
| Lightweight, non-owning view over a contiguous sequence of elements. More... | |
| class | Stack |
| Stack descriptor. More... | |
| class | IStackMemory |
| Interface for a stack memory region. More... | |
| class | IWaitObject |
| Wait object. More... | |
| class | ITraceable |
| Traceable object. More... | |
| class | ISyncObject |
| Synchronization object interface. More... | |
| class | IMutex |
| Interface for mutex synchronization primitive. More... | |
| class | ITask |
| Interface for a user task. More... | |
| class | IKernelTask |
| Scheduling-strategy-facing interface for a kernel task slot. More... | |
| class | IPlatform |
| Interface for a platform driver. More... | |
| class | ITaskSwitchStrategy |
| Interface for a task switching strategy implementation. More... | |
| class | IKernel |
| Interface for the implementation of the kernel of the scheduler. It supports Soft and Hard Real-Time modes. More... | |
| class | IKernelService |
| Interface for the kernel services exposed to the user processes during run-time when Kernel started scheduling the processes. More... | |
| class | StackMemoryDef |
| Stack memory type definition. More... | |
| class | Task |
| Partial implementation of the user task. More... | |
| class | TaskW |
| Partial implementation of the user task with a compile-time scheduling weight. Use when the kernel is configured with SwitchStrategySmoothWeightedRoundRobin. More... | |
| class | StackMemoryWrapper |
| Adapts an externally-owned stack memory array to the IStackMemory interface. More... | |
| class | SyncObjectBase |
| Default, storage-owning implementation of ISyncObject. More... | |
| class | SwitchStrategyEDF |
| Earliest Deadline First (EDF) scheduling strategy: always selects the runnable task with the least time remaining before its deadline expires. More... | |
| class | SwitchStrategyFixedPriority |
| Fixed-priority preemptive scheduling strategy with round-robin arbitration within each priority level. More... | |
| class | SwitchStrategyMonotonic |
| Monotonic scheduling strategy: Rate-Monotonic (RM) or Deadline-Monotonic (DM), selected at compile time by the TStrategyType template parameter. More... | |
| class | SchedulabilityCheck |
| Utility class providing static methods for Worst-Case Response Time (WCRT) schedulability analysis of a monotonic HRT task set. More... | |
| class | SwitchStrategyPreemptionThreshold |
Fixed-priority scheduling with Preemption-Threshold (PTS), modelled on Azure RTOS / ThreadX. Each task has a priority P and a threshold T with T >= P. While a task is running it can be preempted only by tasks whose priority is strictly greater than T. With T == P the task behaves like a normal fixed-priority task. More... | |
| class | SwitchStrategyRoundRobinT |
| class | SwitchStrategySmoothWeightedRoundRobinT |
| Smooth Weighted Round-Robin (SWRR) task-switching strategy: distributes CPU time proportionally to per-task weights while avoiding execution bursts by spreading selections evenly over time. More... | |
Functions | |
| static __stk_forceinline Cycles | ConvertTimeUsToClockCycles (uint32_t clock_freq, Ticks time_us) |
| Convert time (microseconds) to core clock cycles. | |
| template<bool TicklessMode> | |
| Timeout | GetInitialSleepTicks () |
| template<> | |
| Timeout | GetInitialSleepTicks< true > () |
| template<> | |
| Timeout | GetInitialSleepTicks< false > () |
| static void | STK_KERNEL_PANIC (stk::EKernelPanicId id) |
| Called when the kernel detects an unrecoverable internal fault. | |
| static constexpr TId | GetTidFromUserTask (const ITask *task) noexcept |
| Get task identifier from ITask instance. | |
| static constexpr ITask * | GetUserTaskFromTid (TId task_id) noexcept |
| Get task instance from its identifier. | |
| static bool | IsIsrTid (TId id) |
| Test whether a task identifier represents an ISR context. | |
| template<typename T> | |
| static constexpr T | Min (T a, T b) noexcept |
| Compile-time minimum of two values. | |
| template<typename T> | |
| static constexpr T | Max (T a, T b) noexcept |
| Compile-time maximum of two values. | |
| template<typename T> | |
| static constexpr T | Align (T v, T align) noexcept |
| Aligns a value towards the next larger size multiple. | |
| template<typename T> | |
| static constexpr T | AlignPow2 (T v, T align) noexcept |
| Fast compile-time alignment for power-of-two boundaries. | |
| static uint32_t | CountLeadingZeros (const uint32_t value) noexcept |
| Count leading zeros. | |
| static TId | GetTid () |
| Get task/thread Id of the calling task. | |
| static uint32_t | GetTickResolution () |
| Get number of microseconds in one tick. | |
| static Time | GetMsFromTicks (Ticks tick_count, uint32_t resolution) |
| Convert ticks to milliseconds. | |
| static Ticks | GetTicksFromMs (Time ms, uint32_t resolution) |
| Convert milliseconds to ticks. | |
| static Ticks | GetTicksFromMs (Time ms) |
| Convert milliseconds to ticks using the current kernel tick resolution. | |
| static Timeout | GetTicksFromMsClampedToTimeout (Timeout ms) |
| Convert milliseconds to ticks and clamp the result to a Timeout type. | |
| static Ticks | GetTicks () |
| Get number of ticks elapsed since kernel start. | |
| static Time | GetTimeNowMs () |
| Get current time in milliseconds since kernel start. | |
| static Cycles | GetSysTimerCount () |
| Get system timer count value. | |
| static uint32_t | GetSysTimerFrequency () |
| Get system timer frequency. | |
| static void | Sleep (Timeout tick_count) |
| Put calling process into a sleep state. | |
| static void | SleepMs (Timeout ms) |
| Put calling process into a sleep state. | |
| static bool | SleepUntil (Ticks timestamp) |
| Put calling process into a sleep state until the specified timestamp. | |
| static void | SleepCancel (TId task_id) |
| Cancel sleep of the task. | |
| static void | Yield () |
| Notify scheduler to switch to the next runnable task. | |
| static Weight | SetWeight (TId tid, Weight weight) |
| Change the base scheduling weight of a task at run-time. | |
| static Weight | SetWeight (Weight weight) |
| Change the base scheduling weight of the calling task at run-time. | |
| static void | Delay (Timeout tick_count) |
| Delay calling process by busy-waiting until the deadline expires. | |
| static void | DelayMs (Timeout ms) |
| Delay calling process by busy-waiting until the deadline expires. | |
| template<typename T, typename Mem, typename... Args> | |
| static T * | ConstructIn (Mem &mem, Args &&... args) |
| Construct object T in-place inside a C memory container. | |
Variables | |
| static constexpr TId | TID_ISR_N = static_cast<TId>(0xFFFFF000U) |
| Bitmask sentinel for ISR-context task identifiers. | |
| static constexpr TId | TID_NONE = static_cast<TId>(0U) |
| Reserved task/thread id representing zero/none thread id. | |
| static constexpr Timeout | WAIT_INFINITE = INT32_MAX |
| Timeout value: block indefinitely until the synchronization object is signaled. | |
| static constexpr Timeout | NO_WAIT = 0 |
| Timeout value: return immediately if the synchronization object is not yet signaled (non-blocking poll). | |
| static constexpr Weight | NO_WEIGHT = -1 |
| Weight value: weight is not set. | |
| static constexpr Weight | DEFAULT_WEIGHT = 1 |
Weight value: default weight of value (1) (see SwitchStrategySmoothWeightedRoundRobin). | |
Namespace of STK package.
| typedef uint64_t stk::Cycles |
Cycles value.
Definition at line 169 of file stk_common.h.
| typedef PlatformX86Win32 stk::PlatformDefault |
Default platform implementation.
Definition at line 170 of file stk_arch_arm-cortex-m.h.
Shorthand alias for SwitchStrategyMonotonic<MSS_TYPE_DEADLINE>: Deadline-Monotonic scheduling (shorter execution deadline -> higher priority).
Definition at line 546 of file stk_strategy_monotonic.h.
| typedef SwitchStrategyFixedPriority<32> stk::SwitchStrategyFP32 |
Shorthand alias for SwitchStrategyFixedPriority<32>: 32 priority levels (0..31), using a single 32-bit m_ready_bitmap for O(1) highest-priority lookup.
Definition at line 450 of file stk_strategy_fpriority.h.
| typedef SwitchStrategyFixedPriority<32, true> stk::SwitchStrategyFP32_NSY |
Shorthand alias for SwitchStrategyFixedPriority<32, true>: same as SwitchStrategyFP32 but Yield() keeps the task runnable and hands the CPU to same-priority peers only (NOSLEEP_YIELD_API = 1).
Definition at line 457 of file stk_strategy_fpriority.h.
SwitchStrategyPreemptionThreshold with 32 priority levels.
Definition at line 472 of file stk_strategy_pthreshold.h.
Shorthand alias for SwitchStrategyMonotonic<MSS_TYPE_RATE>: Rate-Monotonic scheduling (shorter scheduling period -> higher priority).
Definition at line 539 of file stk_strategy_monotonic.h.
| typedef SwitchStrategyRoundRobinT<false> stk::SwitchStrategyRoundRobin |
Shorthand alias for SwitchStrategyRoundRobinT<>.
Definition at line 289 of file stk_strategy_rrobin.h.
Round-Robin strategy where Yield() keeps the task runnable (NOSLEEP_YIELD_API = 1).
Definition at line 301 of file stk_strategy_rrobin.h.
| typedef SwitchStrategyRoundRobinT<false> stk::SwitchStrategyRR |
Shorthand alias for SwitchStrategyRoundRobin.
Definition at line 295 of file stk_strategy_rrobin.h.
| typedef SwitchStrategyRoundRobinT<true> stk::SwitchStrategyRR_NSY |
Shorthand for SwitchStrategyRoundRobinNoSleepYield.
Definition at line 307 of file stk_strategy_rrobin.h.
Shorthand alias for SwitchStrategySmoothWeightedRoundRobinT<false>.
Definition at line 368 of file stk_strategy_swrrobin.h.
| typedef SwitchStrategySmoothWeightedRoundRobinT<true> stk::SwitchStrategySmoothWeightedRoundRobinNoSleepYield |
Smooth Weighted Round-Robin strategy where Yield() keeps the task runnable (NOSLEEP_YIELD_API = 1).
Definition at line 380 of file stk_strategy_swrrobin.h.
| typedef SwitchStrategySmoothWeightedRoundRobinT<false> stk::SwitchStrategySWRR |
Shorthand alias for SwitchStrategySmoothWeightedRoundRobin.
Definition at line 374 of file stk_strategy_swrrobin.h.
Shorthand for SwitchStrategySmoothWeightedRoundRobinNoSleepYield.
Definition at line 386 of file stk_strategy_swrrobin.h.
| typedef int64_t stk::Ticks |
Ticks value.
Definition at line 159 of file stk_common.h.
Task (thread) id.
Definition at line 149 of file stk_common.h.
| typedef int64_t stk::Time |
Time value.
Definition at line 164 of file stk_common.h.
| typedef int32_t stk::Timeout |
Timeout time (ticks).
Definition at line 154 of file stk_common.h.
| typedef int32_t stk::Weight |
Weight value (aka priority).
Definition at line 174 of file stk_common.h.
| typedef uintptr_t stk::Word |
Native processor word type.
Represents natural data width of the CPU (matching uintptr_t). Used for stack allocation, register storage, pointer value storage, and memory alignment to ensure atomic access, optimal performance, and hardware compatibility.
Definition at line 144 of file stk_common.h.
| enum stk::EAccessMode : uint32_t |
Hardware access modes by the task.
Definition at line 35 of file stk_common.h.
| enum stk::EConsts : uint32_t |
Constants.
| Enumerator | |
|---|---|
| PERIODICITY_MAX | Maximum periodicity (microseconds), 99 milliseconds (note: this value is the highest working on a real hardware and QEMU). |
| PERIODICITY_DEFAULT | Default periodicity (microseconds), 1 millisecond. |
| STACK_SIZE_MIN | Minimum stack size in elements of Word. Used as a lower bound for all stack allocations (user task, sleep trap, exit trap). See: StackMemoryDef, StackMemoryWrapper. |
Definition at line 88 of file stk_common.h.
| enum stk::EHwException : int8_t |
Hardware exception id (see IPlatform::IEventOverrider::OnException).
| Enumerator | |
|---|---|
| HW_EXCEPT_FATAL | HardFault on ARM / Unhandled Fatal Trap on RISC-V. |
| HW_EXCEPT_MEMACCESS | MemManage on ARM / Page Fault or PMP violation on RISC-V. |
Definition at line 131 of file stk_common.h.
| enum stk::EKernelMode : uint8_t |
Kernel operating mode.
Definition at line 45 of file stk_common.h.
| enum stk::EKernelPanicId : uint8_t |
Identifies the source of a kernel panic.
| Enumerator | |
|---|---|
| KERNEL_PANIC_NONE | Panic is absent (no fault). |
| KERNEL_PANIC_SPINLOCK_DEADLOCK | Spin-lock timeout expired: lock owner never released. |
| KERNEL_PANIC_STACK_CORRUPT | Stack integrity check failed. |
| KERNEL_PANIC_ASSERT | Internal assertion failed (maps from STK_ASSERT). |
| KERNEL_PANIC_HRT_HARD_FAULT | Kernel running in KERNEL_HRT mode reported deadline failure of the task. |
| KERNEL_PANIC_CPU_EXCEPTION | CPU reported an exception and halted execution. |
| KERNEL_PANIC_CS_NESTING_OVERFLOW | Critical section nesting limit exceeded: violation of STK_CS_NESTINGS_MAX. |
| KERNEL_PANIC_UNKNOWN_SVC | Unknown service command received by SVC handler. |
| KERNEL_PANIC_BAD_STATE | Kernel entered unexpected (bad) state. |
| KERNEL_PANIC_BAD_MODE | Kernel is in bad/unsupported mode for the current operation. |
| KERNEL_PANIC_BAD_STACK_TYPE | Stack type is unknown. |
| KERNEL_PANIC_NS_ACCESS | Non-secure access to protected resource. |
| KERNEL_PANIC_BAD_MEMORY_REGION | Bad memory region (ARM TrustZone: provided memory region overlaps with another one). |
Definition at line 57 of file stk_common.h.
Policy selector for SwitchStrategyMonotonic: determines the timing attribute used to assign fixed priorities to tasks at AddTask() time.
Definition at line 27 of file stk_strategy_monotonic.h.
| enum stk::EStackType : uint8_t |
Stack type.
| Enumerator | |
|---|---|
| STACK_USER_TASK | Stack of the user task. |
| STACK_SLEEP_TRAP | Stack of the Sleep trap. |
| STACK_EXIT_TRAP | Stack of the Exit trap. |
Definition at line 78 of file stk_common.h.
| enum stk::ESystemTaskId : uint32_t |
System task id.
| Enumerator | |
|---|---|
| SYS_TASK_ID_SLEEP | Sleep trap. |
| SYS_TASK_ID_EXIT | Exit trap. |
Definition at line 98 of file stk_common.h.
| enum stk::ETraceEventId : uint32_t |
Trace event identifiers for tracing task suspension and resume with debugging tools (e.g. SEGGER SystemView).
| Enumerator | |
|---|---|
| TRACE_EVENT_UNKNOWN | Unknown / uninitialized trace event. |
| TRACE_EVENT_SWITCH | Task blocked by the context switch. |
| TRACE_EVENT_SLEEP | Task entered a sleep state. |
| TRACE_EVENT_WAIT | Task suspended on a sync object. |
| TRACE_EVENT_SUSPEND | Task suspended via Suspend. |
Definition at line 108 of file stk_common.h.
| enum stk::EWaitResult : int8_t |
Wait result (see IKernelService::Wait).
| Enumerator | |
|---|---|
| WAIT_RESULT_FAIL | IKernelService::Wait returned with error without waiting. |
| WAIT_RESULT_SIGNAL | The wake was caused by a signal. |
| WAIT_RESULT_TIMEOUT | The wake was caused by a timeout expiry. |
| WAIT_RESULT_CANCELED | The wait was cancelled by another task via IKernel::CancelTaskWait(), independent of signal/timeout. |
Definition at line 120 of file stk_common.h.
|
staticconstexprnoexcept |
Aligns a value towards the next larger size multiple.
Definition at line 765 of file stk_defs.h.
|
staticconstexprnoexcept |
Fast compile-time alignment for power-of-two boundaries.
Definition at line 774 of file stk_defs.h.
|
inlinestatic |
Construct object T in-place inside a C memory container.
Compile-time checks that the container is large and aligned enough for T, run-time check that the actual storage address is aligned.
| [in] | mem | Memory container (stk_*_mem_t), must expose a data member. |
| [in] | args | Constructor arguments of T. |
Definition at line 2198 of file stk_c.h.
References STK_ASSERT, and STK_STATIC_ASSERT_DESC.
Referenced by stk::pthread::EnsureObject(), stk::pthread::EnsureReaper(), pthread_barrier_init(), pthread_cond_init(), pthread_create(), pthread_mutex_init(), pthread_rwlock_init(), pthread_spin_init(), stk_barrier_create(), stk_blockpool_create(), stk_blockpool_create_static(), stk_cv_create(), stk_ef_create(), stk_event_create(), stk_msgq_create(), stk_mutex_create(), stk_periodic_trigger_create(), stk_pipe_create(), stk_rwmutex_create(), stk_sem_create(), and stk_spinlock_create().
|
static |
Convert time (microseconds) to core clock cycles.
| [in] | clock_freq | Clock frequency. |
| [in] | time_us | Time (microseconds). |
Definition at line 108 of file stk_arch_common.h.
References __stk_forceinline.
|
inlinestaticnoexcept |
Count leading zeros.
| [in] | value | Value must be non 0. |
Definition at line 783 of file stk_defs.h.
References __stk_forceinline.
Referenced by stk::SwitchStrategyFixedPriority< 32 >::GetHighestReadyPriority(), and stk::SwitchStrategyPreemptionThreshold< 32 >::GetHighestReadyPriority().
|
inlinestatic |
Delay calling process by busy-waiting until the deadline expires.
| [in] | tick_count | Delay time (in ticks). Negative will cause an assertion. |
Definition at line 575 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::Delay(), and stk::IKernelService::GetInstance().
Referenced by DelayMs(), and stk_delay().
|
inlinestatic |
Delay calling process by busy-waiting until the deadline expires.
| [in] | ms | Delay time (milliseconds). Negative will cause an assertion. |
Definition at line 586 of file stk_helper.h.
References __stk_forceinline, Delay(), and GetTicksFromMsClampedToTimeout().
Referenced by stk_delay_ms().
|
inline |
|
inline |
|
inline |
Definition at line 41 of file stk.h.
References __stk_forceinline, and STK_TICKLESS_TICKS_MAX.
Convert ticks to milliseconds.
| [in] | tick_count | Tick count to convert. |
| [in] | resolution | Microseconds per tick, as returned by IKernelService::GetTickResolution(). |
Definition at line 379 of file stk_helper.h.
References __stk_forceinline.
|
inlinestatic |
Get system timer count value.
Definition at line 459 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::GetSysTimerCount().
Referenced by osKernelGetSysTimerCount(), osKernelGetSysTimerCount64(), and stk_sys_timer_count().
|
inlinestatic |
Get system timer frequency.
Definition at line 468 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::GetSysTimerFrequency().
Referenced by osKernelGetSysTimerFreq(), and stk_sys_timer_frequency().
|
inlinestatic |
Get number of microseconds in one tick.
Definition at line 368 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::GetTickResolution().
Referenced by GetTicksFromMs(), osKernelGetTickFreq(), stk_tick_resolution(), and stk_ticks_from_ms().
|
inlinestatic |
Get number of ticks elapsed since kernel start.
Definition at line 434 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::GetTicks().
Referenced by stk::sync::MessageQueue::Get(), stk::time::TimerHost::Timer::GetRemainingTicks(), osKernelGetTickCount(), stk::sync::MessageQueue::Peek(), stk::sync::MessageQueue::PeekFront(), stk::time::PeriodicTrigger::Poll(), stk::sync::MessageQueue::Put(), stk::sync::MessageQueue::PutFront(), stk::sync::Pipe::Read(), stk::sync::PipeT< Timer *, 32U >::Read(), stk::sync::Pipe::ReadBulk(), stk::sync::PipeT< Timer *, 32U >::ReadBulk(), stk::sync::Pipe::ReadBulkTriggered(), stk::time::TimerHost::Reset(), stk::time::PeriodicTrigger::Restart(), stk::time::TimerHost::Restart(), stk::time::TimerHost::Start(), stk::time::TimerHost::StartOrReset(), stk_ticks(), stk::memory::BlockMemoryPool::TimedAlloc(), stk::sync::RWMutex::TimedLock(), stk::sync::RWMutex::TimedReadLock(), stk::time::TimerHost::UpdateTime(), stk::sync::EventFlags::Wait(), stk::sync::Pipe::Write(), stk::sync::PipeT< Timer *, 32U >::Write(), stk::sync::Pipe::WriteBulk(), stk::sync::PipeT< Timer *, 32U >::WriteBulk(), xTaskGetTickCount(), and xTaskGetTickCountFromISR().
Convert milliseconds to ticks using the current kernel tick resolution.
| [in] | ms | Time in milliseconds to convert. |
Definition at line 409 of file stk_helper.h.
References __stk_forceinline, GetTickResolution(), and GetTicksFromMs().
Convert milliseconds to ticks.
| [in] | ms | Time in milliseconds to convert. |
| [in] | resolution | Microseconds per tick, as returned by IKernelService::GetTickResolution(). |
Definition at line 390 of file stk_helper.h.
References __stk_forceinline.
Referenced by GetTicksFromMs(), and GetTicksFromMsClampedToTimeout().
Convert milliseconds to ticks and clamp the result to a Timeout type.
| [in] | ms | Time in milliseconds to convert. |
Definition at line 419 of file stk_helper.h.
References __stk_forceinline, GetTicksFromMs(), and WAIT_INFINITE.
Referenced by DelayMs(), SleepMs(), stk_ticks_from_ms_clamped_to_timeout(), and stk::pthread::TimespecToRelativeTimeout().
|
inlinestatic |
Get task/thread Id of the calling task.
TID_ISR_N | exception_number (see TID_ISR_N) rather than asserting; use IsIsrTid() to test for this. Definition at line 358 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::GetTid().
Referenced by eTaskGetState(), stk::sync::SpinLock::Lock(), osThreadGetId(), SetWeight(), stk_tid(), stk::sync::SpinLock::TryLock(), stk::sync::Mutex::Unlock(), stk::sync::SpinLock::Unlock(), uxTaskGetStackHighWaterMark(), uxTaskGetStackHighWaterMark2(), uxTaskGetSystemState(), uxTaskPriorityGet(), vTaskDelete(), vTaskList(), vTaskPrioritySet(), vTaskSuspend(), and xTaskGetCurrentTaskHandle().
Get task identifier from ITask instance.
Definition at line 716 of file stk_arch.h.
References stk::hw::PtrToWord().
Referenced by stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::GetTid(), and stk_task_get_id().
|
inlinestatic |
Get current time in milliseconds since kernel start.
Definition at line 445 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), stk::IKernelService::GetTickResolution(), and stk::IKernelService::GetTicks().
Referenced by stk_time_now_ms(), and stk::pthread::TimespecToRelativeTimeout().
Get task instance from its identifier.
Definition at line 725 of file stk_arch.h.
References stk::hw::WordToPtr().
Referenced by stk::ISyncObject::FindWeightHigherThan(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnInheritWeight(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnRestoreWeight(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnSetWeight(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnTaskSleepCancel(), stk::sync::FastMutex::TimedLock(), stk::sync::Mutex::TimedLock(), stk::sync::FastMutex::Unlock(), and stk::sync::Mutex::Unlock().
|
inlinestatic |
Test whether a task identifier represents an ISR context.
Returns true if tid was produced by GetTid() called from an interrupt service routine, i.e. its upper 20 bits match TID_ISR_N. Use this predicate instead of comparing against TID_ISR_N directly.
| [in] | id | Task identifier to test. |
true if tid encodes an ISR context, false otherwise. Definition at line 241 of file stk_common.h.
References __stk_forceinline, and TID_ISR_N.
|
staticconstexprnoexcept |
Compile-time maximum of two values.
Definition at line 759 of file stk_defs.h.
Referenced by stk::memory::BlockMemoryPool::AlignBlockSize(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::GetSleepTicks(), and osThreadNew().
|
staticconstexprnoexcept |
Compile-time minimum of two values.
Definition at line 753 of file stk_defs.h.
Referenced by stk::sync::Pipe::DrainLocked(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::EnumerateKernelTasks(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::EnumerateTasks(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::GetSleepTicks(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnTaskSleepUntil(), osSemaphoreNew(), and stk::memory::MemoryAllocator::Stats::RecordAllocate().
Change the base scheduling weight of a task at run-time.
| [in] | tid | Id of the task. |
| [in] | weight | New base weight (must not be NO_WEIGHT, must be valid for the active strategy, e.g. built with SwitchStrategyPreemptionThreshold::MakeWeight). |
Definition at line 550 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::SetWeight().
Referenced by SetWeight().
Change the base scheduling weight of the calling task at run-time.
| [in] | weight | New base weight, see SetWeight(TId, Weight). |
Definition at line 564 of file stk_helper.h.
References __stk_forceinline, GetTid(), and SetWeight().
|
inlinestatic |
Put calling process into a sleep state.
| [in] | tick_count | Sleep time (in ticks). 0 does not cause yield, use Yield instead. Negative will cause an assertion. |
Definition at line 479 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::Sleep().
Referenced by osDelay(), pthread_exit(), SleepMs(), stk_sleep(), and vTaskDelay().
|
inlinestatic |
Cancel sleep of the task.
| [in] | task_id | Id of the task. |
Definition at line 514 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::SleepCancel().
Referenced by stk_sleep_cancel(), and xTaskAbortDelay().
|
inlinestatic |
Put calling process into a sleep state.
| [in] | ms | Sleep time (milliseconds). 0 does not cause yield, use Yield instead. Negative will cause an assertion. |
Definition at line 492 of file stk_helper.h.
References __stk_forceinline, GetTicksFromMsClampedToTimeout(), and Sleep().
Referenced by stk_sleep_ms(), and stk::pthread::WaitForTaskExit().
|
inlinestatic |
Put calling process into a sleep state until the specified timestamp.
| [in] | timestamp | Absolute timestamp (ticks). 0 does not cause yield, use Yield instead. Negative will cause an assertion. |
Definition at line 504 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::SleepUntil().
Referenced by osDelayUntil(), stk_sleep_until(), and xTaskDelayUntil().
|
inlinestatic |
Called when the kernel detects an unrecoverable internal fault.
| [in] | id | EKernelPanicId value identifying the fault. |
Definition at line 183 of file stk_arch.h.
References __stk_debug_break(), __stk_forceinline, and STK_PANIC_HANDLER.
Referenced by stk::sync::SpinLock::MakeLocked(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnStart(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnTaskExit(), stk::sync::FastMutex::TimedLock(), stk::sync::Mutex::TimedLock(), stk::sync::RWMutex::TimedLock(), and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::UpdateFsmState().
|
inlinestatic |
Notify scheduler to switch to the next runnable task.
A cooperative scheduling mechanism: the calling task voluntarily gives up the remainder of its time slice. Behavior depends on the kernel mode and the active strategy:
Definition at line 536 of file stk_helper.h.
References __stk_forceinline, stk::IKernelService::GetInstance(), and stk::IKernelService::SwitchToNext().
Referenced by osThreadExit(), osThreadYield(), pthread_yield(), stk_yield(), taskYIELD_impl(), and vTaskEndScheduler().
|
staticconstexpr |
Weight value: default weight of value (1) (see SwitchStrategySmoothWeightedRoundRobin).
Definition at line 228 of file stk_common.h.
Referenced by stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::GetBaseWeight(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::GetCurrentWeight(), stk::ITask::GetWeight(), stk::pthread::PthreadTask::GetWeight(), stk::time::TimerHost::TimerWorkerTask::Initialize(), TaskWrapper::Initialize(), TaskWrapper::TaskWrapper(), and stk::time::TimerHost::TimerWorkerTask::TimerWorkerTask().
|
staticconstexpr |
Timeout value: return immediately if the synchronization object is not yet signaled (non-blocking poll).
Definition at line 218 of file stk_common.h.
Referenced by stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::WaitObject::Cancel(), CmsisTimeoutToStk(), FrtosTimeoutToStk(), stk::sync::MessageQueue::Get(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::GetSleepTicks(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::KernelTask(), osMessageQueueGet(), osMessageQueuePut(), osMutexAcquire(), osSemaphoreAcquire(), stk::sync::MessageQueue::Peek(), stk::sync::MessageQueue::PeekFront(), stk::time::TimerHost::ProcessCommands(), stk::time::TimerHost::PushCommand(), stk::sync::MessageQueue::Put(), stk::sync::MessageQueue::PutFront(), stk::sync::Pipe::Read(), stk::sync::PipeT< Timer *, 32U >::Read(), stk::sync::Pipe::ReadBulk(), stk::sync::PipeT< Timer *, 32U >::ReadBulk(), stk::sync::Pipe::ReadBulkTriggered(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::WaitObject::Tick(), stk::memory::BlockMemoryPool::TimedAlloc(), stk::sync::FastMutex::TimedLock(), stk::sync::Mutex::TimedLock(), stk::sync::RWMutex::TimedLock(), stk::sync::RWMutex::TimedReadLock(), stk::memory::BlockMemoryPool::TryAlloc(), stk::memory::BlockMemoryPool::TryAllocT(), stk::sync::MessageQueue::TryGet(), stk::sync::FastMutex::TryLock(), stk::sync::Mutex::TryLock(), stk::sync::RWMutex::TryLock(), stk::sync::MessageQueue::TryPeek(), stk::sync::MessageQueue::TryPeekFront(), stk::sync::MessageQueue::TryPut(), stk::sync::MessageQueue::TryPutFront(), stk::sync::Pipe::TryRead(), stk::sync::PipeT< Timer *, 32U >::TryRead(), stk::sync::Pipe::TryReadBulk(), stk::sync::PipeT< Timer *, 32U >::TryReadBulk(), stk::sync::Pipe::TryReadBulkTriggered(), stk::sync::RWMutex::TryReadLock(), stk::sync::EventFlags::TryWait(), stk::sync::Semaphore::TryWait(), stk::sync::Pipe::TryWrite(), stk::sync::PipeT< Timer *, 32U >::TryWrite(), stk::sync::Pipe::TryWriteBulk(), stk::sync::PipeT< Timer *, 32U >::TryWriteBulk(), stk::time::TimerHost::UpdateTime(), stk::sync::Event::Wait(), stk::sync::EventFlags::Wait(), stk::sync::Semaphore::Wait(), stk::sync::ConditionVariable::WaitEx(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::WaitObject::WaitObject(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::WaitObject::Wake(), stk::sync::Pipe::Write(), stk::sync::PipeT< Timer *, 32U >::Write(), stk::sync::Pipe::WriteBulk(), stk::sync::PipeT< Timer *, 32U >::WriteBulk(), xMessageBufferSend(), and xMessageBufferSendFromISR().
|
staticconstexpr |
Weight value: weight is not set.
Definition at line 223 of file stk_common.h.
Referenced by stk::SwitchStrategySmoothWeightedRoundRobinT< false >::AddTask(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::Bind(), stk::ISyncObject::FindWeightHigherThan(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::GetBaseWeight(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::GetWeight(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnInheritWeight(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnRestoreWeight(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnSetWeight(), and stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelService::SetWeight().
Bitmask sentinel for ISR-context task identifiers.
The upper 20 bits of the TId space are reserved for ISR contexts. When GetTid() is called from an interrupt service routine, it returns TID_ISR_N | exception_number, where exception_number is the raw value:
This encoding guarantees uniqueness per exception, so two ISRs at different priority levels or with different exception numbers are never treated as the same owner by synchronization primitives.
Task TIds are word-aligned pointers. On all supported Cortex-M and RISC-V targets they fall in the range 0x00000000..0xEFFFFFFF, so no overlap with the 0xFFFFF000..0xFFFFFFFF sentinel range is possible.
IsIsrTid() to test for this sentinel rather than comparing against this constant directly. Definition at line 201 of file stk_common.h.
Referenced by IsIsrTid().
Reserved task/thread id representing zero/none thread id.
Definition at line 206 of file stk_common.h.
Referenced by stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::Bind(), stk::sync::FastMutex::FastMutex(), stk::sync::FastMutex::IsLocked(), stk::sync::SpinLock::MakeLocked(), stk::sync::Mutex::Mutex(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnInheritWeight(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnRestoreWeight(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnSetWeight(), stk::sync::SpinLock::SpinLock(), stk::sync::FastMutex::TimedLock(), stk::sync::Mutex::TimedLock(), stk::sync::FastMutex::Unlock(), stk::sync::Mutex::Unlock(), stk::sync::SpinLock::Unlock(), uxSemaphoreGetCount(), xSemaphoreGetMutexHolder(), xSemaphoreGetMutexHolderFromISR(), and stk::sync::SpinLock::~SpinLock().
|
staticconstexpr |
Timeout value: block indefinitely until the synchronization object is signaled.
Definition at line 212 of file stk_common.h.
Referenced by stk::memory::BlockMemoryPool::Alloc(), stk::memory::BlockMemoryPool::AllocT(), CmsisTimeoutToStk(), FrtosTimeoutToStk(), stk::sync::MessageQueue::Get(), GetTicksFromMsClampedToTimeout(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::IsSleepInfinite(), stk::sync::FastMutex::Lock(), stk::sync::Mutex::Lock(), stk::sync::RWMutex::Lock(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnTaskSleepUntil(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::OnTaskWait(), osThreadJoin(), stk::sync::MessageQueue::Peek(), stk::sync::MessageQueue::PeekFront(), stk::time::TimerHost::ProcessCommands(), pthread_exit(), stk::sync::MessageQueue::Put(), stk::sync::MessageQueue::PutFront(), stk::sync::Pipe::Read(), stk::sync::PipeT< Timer *, 32U >::Read(), stk::sync::Pipe::ReadBulk(), stk::sync::PipeT< Timer *, 32U >::ReadBulk(), stk::sync::Pipe::ReadBulkTriggered(), stk::sync::RWMutex::ReadLock(), stk::time::TimerHost::Restart(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::ScheduleRemoval(), stk::sync::RWMutex::ScopedTimedLock::ScopedTimedLock(), stk::sync::RWMutex::ScopedTimedReadMutex::ScopedTimedReadMutex(), stk::time::TimerHost::SetPeriod(), stk::time::TimerHost::Start(), stk::time::TimerHost::StartOrReset(), stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >::SuspendTask(), stk::Kernel< TMode, TSize, TStrategy, TPlatform >::KernelTask::WaitObject::Tick(), stk::memory::BlockMemoryPool::TimedAlloc(), stk::sync::RWMutex::TimedLock(), stk::sync::RWMutex::TimedReadLock(), stk::time::TimerHost::UpdateTime(), stk::sync::EventFlags::Wait(), stk::sync::Barrier::WaitEx(), stk::sync::Pipe::Write(), stk::sync::PipeT< Timer *, 32U >::Write(), stk::sync::Pipe::WriteBulk(), stk::sync::PipeT< Timer *, 32U >::WriteBulk(), stk::sync::EventFlags::~EventFlags(), stk::sync::MessageQueue::~MessageQueue(), and stk::sync::Pipe::~Pipe().