![]() |
SuperTinyKernel™ RTOS 1.06.x
Lightweight, high-performance, deterministic, bare-metal C++ RTOS for resource-constrained embedded systems. MIT Open Source License.
|
Interface for the implementation of the kernel of the scheduler. It supports Soft and Hard Real-Time modes. More...
#include <stk_common.h>
Public Types | |
| enum | EKernelState : uint8_t { KSTATE_INACTIVE = 0 , KSTATE_READY , KSTATE_RUNNING , KSTATE_SUSPENDED } |
| Kernel state. More... | |
Public Member Functions | |
| virtual void | Initialize (uint32_t resolution_us=PERIODICITY_DEFAULT)=0 |
| Initialize kernel. | |
| virtual void | AddTask (ITask *user_task)=0 |
| Add user task. | |
| virtual void | AddTask (ITask *user_task, Timeout periodicity_tc, Timeout deadline_tc, Timeout start_delay_tc)=0 |
| Add user task. | |
| virtual void | RemoveTask (ITask *user_task)=0 |
| Remove a previously added task from the kernel before Start(). | |
| virtual void | ScheduleTaskRemoval (ITask *user_task)=0 |
| Schedule task removal from scheduling (exit). | |
| virtual void | SuspendTask (ITask *user_task, bool &suspended)=0 |
| Suspend task. | |
| virtual void | ResumeTask (ITask *user_task)=0 |
| Resume task. | |
| virtual size_t | EnumerateKernelTasks (ArrayView< IKernelTask * > tasks)=0 |
| Enumerate kernel tasks. | |
| virtual size_t | EnumerateTasks (ArrayView< ITask * > user_tasks)=0 |
| Enumerate user tasks. | |
| template<size_t TMaxCount, typename TCallback> | |
| size_t | EnumerateTasksT (TCallback &&callback) |
| Enumerate tasks, invoking a callback for each active task. | |
| virtual void | Start ()=0 |
| Start kernel scheduling. | |
| virtual EKernelState | GetState () const =0 |
| Get a snapshot of the kernel state. | |
| virtual IPlatform * | GetPlatform ()=0 |
| Get platform driver instance. | |
| virtual ITaskSwitchStrategy * | GetSwitchStrategy ()=0 |
| Get switch strategy instance. | |
Protected Member Functions | |
| ~IKernel ()=default | |
| Destructor. | |
Interface for the implementation of the kernel of the scheduler. It supports Soft and Hard Real-Time modes.
Definition at line 1125 of file stk_common.h.
| enum stk::IKernel::EKernelState : uint8_t |
Kernel state.
| Enumerator | |
|---|---|
| KSTATE_INACTIVE | Not ready, IKernel::Initialize() must be called. |
| KSTATE_READY | Ready to start, IKernel::Start() must be called. |
| KSTATE_RUNNING | Initialized and running, IKernel::Start() was called successfully. |
| KSTATE_SUSPENDED | Scheduling is suspended with IKernelService::Suspend(). |
Definition at line 1131 of file stk_common.h.
|
protecteddefault |
Destructor.
|
pure virtual |
Add user task.
KERNEL_HRT must not be set in the kernel mode flags). | [in] | user_task | Pointer to the user task to add. |
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Referenced by stk::time::TimerHost::Initialize(), stk_kernel_add_task(), and stk_kernel_add_task_hrt().
|
pure virtual |
Add user task.
| [in] | user_task | Pointer to the user task to add. |
| [in] | periodicity_tc | Periodicity time at which task is scheduled (ticks). |
| [in] | deadline_tc | Deadline time within which a task must complete its work (ticks). |
| [in] | start_delay_tc | Initial start delay for the task (ticks). |
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
|
pure virtual |
Enumerate kernel tasks.
| [in] | tasks | Reference to the ArrayView of IKernelTask pointers. |
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Enumerate user tasks.
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Referenced by EnumerateTasksT(), and stk_kernel_enumerate_tasks().
|
inline |
Enumerate tasks, invoking a callback for each active task.
| TMaxCount | Maximum number of tasks to enumerate. Should match or exceed the kernel's task capacity. Determines the size of the internal stack-allocated buffer (TMaxCount * sizeof(ITask*) bytes on the stack). |
| TCallback | Callable type, deduced automatically. Must satisfy: bool(ITask*) |
| [in] | callback | Callable invoked for each active task. Return true to continue, false to stop early. |
TMaxCount). Example:
Definition at line 1235 of file stk_common.h.
References EnumerateTasks(), and STK_STATIC_ASSERT.
|
pure virtual |
Get platform driver instance.
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Referenced by SetEventOverrider(), stk_kernel_process_hard_fault(), stk_kernel_process_tick(), stk_kernel_resume(), and stk_kernel_suspend().
|
pure virtual |
Get a snapshot of the kernel state.
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Referenced by stk_kernel_get_state(), and stk_kernel_is_started().
|
pure virtual |
Get switch strategy instance.
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
|
pure virtual |
Initialize kernel.
| [in] | resolution_us | Resolution of the system tick (SysTick) timer in microseconds. Defaults to PERIODICITY_DEFAULT (1000 µs = 1 ms). |
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
References stk::PERIODICITY_DEFAULT.
Referenced by stk_kernel_init().
|
pure virtual |
Remove a previously added task from the kernel before Start().
| [in] | user_task | User task to remove. Must not be nullptr. |
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Referenced by stk_kernel_remove_task().
|
pure virtual |
Resume task.
| [in] | user_task | Pointer to the user task to resume. |
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Referenced by stk_kernel_resume_task().
|
pure virtual |
Schedule task removal from scheduling (exit).
| [in] | user_task | User task to remove. Must not be nullptr. |
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Referenced by stk_kernel_schedule_task_removal().
|
pure virtual |
Start kernel scheduling.
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Referenced by stk_kernel_start().
|
pure virtual |
Suspend task.
| [in] | user_task | Pointer to the user task to suspend. |
| [out] | suspended | Set to true if task is suspended. |
Implemented in stk::Kernel< TMode, TSize, TStrategy, TPlatform >, stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS, 16U, stk::SwitchStrategyFP32, stk::PlatformDefault >, and stk::Kernel< stk::KERNEL_DYNAMIC|stk::KERNEL_SYNC|stk::KERNEL_TICKLESS,(16U), stk::SwitchStrategyFP32, stk::PlatformDefault >.
Referenced by stk_kernel_suspend_task().