ICARUS OS (Intelligent Cooperative Architecture for Real-time Unified Systems) 0.1.0
Preemptive Real-Time Operating System for ARM Cortex-M7
Loading...
Searching...
No Matches
kernel.h
Go to the documentation of this file.
1
17#ifndef ICARUS_KERNEL_H
18#define ICARUS_KERNEL_H
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24#include <stdint.h>
25#include <stdbool.h>
26#include "bsp/retarget_hal.h"
27#include "icarus/config.h"
28#include "icarus/types.h"
29
30/* ============================================================================
31 * KERNEL STATE (extern declarations)
32 * ========================================================================= */
33
36
39
42
44extern uint8_t current_task_index;
45
47extern uint8_t running_task_count;
48
50extern uint8_t num_created_tasks;
51
53extern volatile uint32_t current_task_ticks_remaining;
54
56extern volatile uint32_t ticks_per_task;
57
59extern volatile uint32_t os_tick_count;
60
62extern volatile uint8_t os_running;
63
65extern volatile bool scheduler_enabled;
66
69
71extern int8_t current_cleanup_task_idx;
72
73/* ============================================================================
74 * KERNEL INITIALIZATION
75 * ========================================================================= */
76
89void os_init(void);
90
101void os_start(void);
102
103/* Forward declarations for scheduler functions used by kernel */
104void os_yield(void);
105uint32_t task_active_sleep(uint32_t ticks);
106const char* os_get_current_task_name(void);
107
108/* ============================================================================
109 * CRITICAL SECTION API
110 * ========================================================================= */
111
116void enter_critical(void);
117
121void exit_critical(void);
122
128uint32_t* kernel_get_stack(uint8_t task_idx);
129
135uint32_t* kernel_get_data(uint8_t task_idx);
136
137
138void* kernel_protected_data(uint16_t num_words);
139
140/* ============================================================================
141 * BKPRAM WRITE GATE
142 * ========================================================================= */
143
159bool bkpram_write(const void *src, uint32_t offset, uint32_t len);
160
161/* ============================================================================
162 * PRIVILEGED IMPLEMENTATIONS (Internal - Do Not Call Directly)
163 * ========================================================================= */
164
165void __enter_critical(void);
166void __exit_critical(void);
167void __os_init(void);
168void __os_start(void);
169void* __kernel_protected_data(uint16_t num_words);
170uint32_t* __kernel_get_stack(uint8_t task_idx);
171uint32_t* __kernel_get_data(uint8_t task_idx);
172
173#ifdef __cplusplus
174}
175#endif
176
177#endif /* ICARUS_KERNEL_H */
#define ICARUS_MAX_SEMAPHORES
Maximum number of semaphores.
Definition config.h:61
#define ICARUS_MAX_TASKS
Maximum number of concurrent tasks.
Definition config.h:54
#define ICARUS_MAX_MESSAGE_QUEUES
Maximum number of message queues (pipes)
Definition config.h:68
ICARUS OS Configuration Header.
void os_yield(void)
Voluntarily yield CPU to scheduler.
Definition svc.c:511
void * __kernel_protected_data(uint16_t num_words)
Privileged implementation of kernel_protected_data.
Definition kernel.c:295
uint8_t num_created_tasks
Total number of created tasks.
Definition kernel.c:65
volatile uint32_t current_task_ticks_remaining
Ticks remaining in current task's time slice.
Definition kernel.c:66
void __exit_critical(void)
Privileged implementation of exit_critical.
Definition kernel.c:124
uint8_t running_task_count
Count of tasks in active states.
Definition kernel.c:64
void os_start(void)
Start the ICARUS scheduler.
Definition svc.c:502
uint8_t current_task_index
Index of currently executing task.
Definition kernel.c:63
const char * os_get_current_task_name(void)
Get name of currently executing task.
Definition svc.c:575
void exit_critical(void)
Exit critical section (re-enable scheduler if outermost)
Definition svc.c:489
icarus_pipe_t * message_pipe_list[64]
Array of pointers to all message pipes.
Definition kernel.c:52
uint32_t * kernel_get_data(uint8_t task_idx)
Get data pointer for task index (internal use)
Definition svc.c:734
uint32_t * kernel_get_stack(uint8_t task_idx)
Get stack pointer for task index (internal use)
Definition svc.c:714
volatile uint8_t os_running
Flag indicating OS is running.
Definition kernel.c:70
icarus_task_t * task_list[128]
Array of pointers to all task control blocks.
Definition kernel.c:50
int8_t current_cleanup_task_idx
Current cleanup queue write index.
Definition kernel.c:73
void os_init(void)
Initialize the ICARUS kernel.
Definition svc.c:501
void __os_init(void)
Privileged implementation of os_init.
Definition kernel.c:212
void __enter_critical(void)
Privileged implementation of enter_critical.
Definition kernel.c:114
void enter_critical(void)
Enter critical section (disable scheduler)
Definition svc.c:478
uint32_t * __kernel_get_data(uint8_t task_idx)
Privileged implementation of kernel_get_data.
Definition kernel.c:282
void __os_start(void)
Privileged implementation of os_start.
Definition kernel.c:253
void * kernel_protected_data(uint16_t num_words)
Allocate protected data words for current task.
Definition svc.c:754
icarus_semaphore_t * semaphore_list[64]
Array of pointers to all semaphores.
Definition kernel.c:51
int8_t cleanup_task_idx[128]
Cleanup task index queue.
Definition kernel.c:57
volatile uint32_t os_tick_count
System tick counter.
Definition kernel.c:69
uint32_t task_active_sleep(uint32_t ticks)
Sleep for specified ticks (cooperative, via SVC)
Definition svc.c:522
uint32_t * __kernel_get_stack(uint8_t task_idx)
Privileged implementation of kernel_get_stack.
Definition kernel.c:269
volatile uint32_t ticks_per_task
Configured ticks per time slice.
Definition kernel.c:67
volatile bool scheduler_enabled
Scheduler enable flag.
Definition kernel.c:72
bool bkpram_write(const void *src, uint32_t offset, uint32_t len)
Copy data into battery-backed RAM (RAM_D3) via SVC.
Definition svc.c:1737
ICARUS OS Hardware Abstraction Layer Interface.
Message Pipe (Queue)
Definition types.h:169
Counting Semaphore.
Definition types.h:151
Task Control Block (TCB)
Definition types.h:115
ICARUS OS Core Type Definitions.