28 uint32_t *stack, uint32_t stack_size,
29 uint32_t *data,
const char *name)
46 uint32_t *stack_top = &stack[stack_size - 1u];
48 *(stack_top--) = 0x01000000;
49 *(stack_top--) = (uint32_t)(uintptr_t)function;
63 for (uint32_t i = 0u; i < (stack_size - 16u); i++) {
64 stack[i] = 0xDEADC0DEu;
138 (void)printf(
"[INFO] %s committed suicide\r\n",
168 for (uint32_t i = 0u; i < (t->
stack_size - 16u); i++) {
175 *(stack_top--) = 0x01000000;
176 *(stack_top--) = (uint32_t)(uintptr_t)t->
function;
#define ICARUS_MAX_TASK_NAME_LEN
Maximum length of task name string (including null terminator)
#define ICARUS_MAX_TASKS
Maximum number of concurrent tasks.
#define ICARUS_STACK_WORDS
Stack size per task in 32-bit words.
ICARUS Kernel Core - State and Initialization.
uint8_t num_created_tasks
Total number of created tasks.
uint8_t running_task_count
Count of tasks in active states.
uint8_t current_task_index
Index of currently executing task.
icarus_task_t * task_list[128]
Array of pointers to all task control blocks.
int8_t current_cleanup_task_idx
Current cleanup queue write index.
uint32_t * __kernel_get_data(uint8_t task_idx)
Privileged implementation of kernel_get_data.
int8_t cleanup_task_idx[128]
Cleanup task index queue.
uint32_t * __kernel_get_stack(uint8_t task_idx)
Privileged implementation of kernel_get_stack.
ICARUS Scheduler - Task Scheduling and Timing.
void __os_yield(void)
Privileged implementation of os_yield.
icarus_task_priority_t task_priority
Task priority level.
uint32_t global_tick_paused
Tick count when blocked (offset 20)
char name[32]
Human-readable task name.
icarus_task_state_t task_state
Current task state (offset 16)
uint32_t dispatch_count
Times this task has been dispatched.
uint32_t * stack_base
Base address of task stack.
uint32_t stack_size
Stack size in 32-bit words.
uint32_t * data_pointer
Current data pointer (offset 28)
uint32_t * stack_pointer
Current stack pointer (offset 12)
uint32_t stack_watermark
Minimum free stack words observed.
void(* function)(void)
Task entry point function pointer.
uint32_t ticks_to_pause
Ticks to remain blocked (offset 24)
void os_create_task(icarus_task_t *task, void(*function)(void), uint32_t *stack, uint32_t stack_size, uint32_t *data, const char *name)
Create a task with explicit stack allocation.
void __os_kill_process(uint8_t task_index)
Privileged implementation of os_kill_process.
void __os_exit_task(void)
Privileged implementation of os_exit_task.
void __os_restart_task(uint8_t task_index)
Privileged implementation of os_restart_task.
void __os_register_task(void(*function)(void), const char *name)
Privileged implementation of os_register_task.
void __os_task_suicide(void)
Privileged implementation of os_task_suicide.
ICARUS Task Management - Creation and Lifecycle.
void os_exit_task(void)
Terminate current task normally.
@ TASK_STATE_FINISHED
Task completed execution normally.
@ TASK_STATE_KILLED
Task terminated by another task.
@ TASK_STATE_COLD
Task created but never started.
@ TASK_PRIORITY_LOW
Background/idle priority.