24#include "hardware/sync.h"
25#include "pico/stdlib.h"
42#define PICCOLO_OS_STACK_SIZE 1024
45#define PICCOLO_OS_THREAD_PSP 0xFFFFFFFD
52#define PICCOLO_OS_TIME_SLICE 1000
59#define PICCOLO_OS_MAX_IDLE 700
71#define PICCOLO_OS_NO_IDLE_FOR_SIGNALS true
77#define PICCOLO_OS_MULTICORE true
87#define PICCOLO_OS_MAX_SIGNAL 10
90#define PICCOLO_SPIN_LOCK_ID PICO_SPINLOCK_ID_OS1
180 __asm
volatile (
"nop" );
181 __asm
volatile (
"svc 0");
182 __asm
volatile (
"nop" );
int32_t piccolo_send_signal_blocking_timeout(piccolo_os_task_t *toTask, uint32_t timeout_ms)
Send a signal to a specified task. If the channel is full, block with a timeout until it is not.
Definition: piccolo_os.c:360
void piccolo_syscall(void)
Same as piccolo_yield.
int32_t piccolo_get_signal_blocking()
Get a signal. If none are available, block until one arrives.
Definition: piccolo_os.c:451
int32_t piccolo_send_signal(piccolo_os_task_t *toTask)
Send a signal to the specified task.
Definition: piccolo_os.c:334
int32_t piccolo_get_signal_blocking_timeout(uint32_t timeout_ms)
Attempt to get a signal. If none are available, block with a timeout until one arrives.
Definition: piccolo_os.c:461
void piccolo_sleep(uint32_t sleep_time_ms)
sleeps for a specified number of milliseconds
Definition: piccolo_os.c:231
void piccolo_end_task()
Ends the current task, never returns.
Definition: piccolo_os.c:213
piccolo_os_task_t * piccolo_create_task(void(*pointer_to_task_function)(void))
Create a new task and initialize its stack.
Definition: piccolo_os.c:161
void piccolo_sleep_until(absolute_time_t until)
sleeps until an absolute time.
Definition: piccolo_os.c:256
int32_t piccolo_get_signal_all_blocking_timeout(uint32_t timeout_ms)
Get all the signals available. If none are available, block with a timeout until one arrives.
Definition: piccolo_os.c:499
static void piccolo_yield(void)
Yields the processor to another task.
Definition: piccolo_os.h:179
piccolo_os_task_t * piccolo_get_task_id()
Get the ID (task struct address) of the running task.
Definition: piccolo_os.c:67
int32_t piccolo_get_signal_all()
Get all the signals available.
Definition: piccolo_os.c:473
int32_t piccolo_send_signal_blocking(piccolo_os_task_t *toTask)
Send a signal to the specified task. If the signal channel is full, block until it is not.
Definition: piccolo_os.c:346
void piccolo_init()
Initialize the piccolo run time environment.
Definition: piccolo_os.c:559
int32_t piccolo_get_signal()
Attempt to get a signal.
Definition: piccolo_os.c:431
int32_t piccolo_get_signal_all_blocking()
Get all the signals available. If none are available, block until one arrives.
Definition: piccolo_os.c:485
void piccolo_start()
Start the Piccolo Task scheduler.
Definition: piccolo_os.c:659
piccolo_os_task_t * task_list_head
Definition: piccolo_os.h:117
volatile uint32_t task_flags
Definition: piccolo_os.h:99
piccolo_os_task_t * zombies
Definition: piccolo_os.h:121
struct piccolo_os_task_t * task_sending_to
Definition: piccolo_os.h:102
struct piccolo_os_task_t * prev_task
Definition: piccolo_os.h:101
spin_lock_t * piccolo_lock
Definition: piccolo_os.h:123
uint32_t * stack_ptr
Definition: piccolo_os.h:107
struct piccolo_os_task_t * next_task
Definition: piccolo_os.h:100
volatile uint32_t signal_in
Definition: piccolo_os.h:104
volatile piccolo_os_task_t * current_task
Definition: piccolo_os.h:120
uint32_t signal_limit
Definition: piccolo_os.h:106
volatile uint32_t signal_out
Definition: piccolo_os.h:105
piccolo_os_task_t * garbage_man
Definition: piccolo_os.h:122
uint32_t stack[PICCOLO_OS_STACK_SIZE]
Definition: piccolo_os.h:108
piccolo_os_task_t * task_list_tail
Definition: piccolo_os.h:118
absolute_time_t wakeup
Definition: piccolo_os.h:103
piccolo_task_flag_values
Definition: piccolo_os.h:128
#define PICCOLO_OS_STACK_SIZE
Size of a task stack in 32 bit words.
Definition: piccolo_os.h:42
@ PICCOLO_TASK_SLEEPING
Task has a timeout running.
Definition: piccolo_os.h:131
@ PICCOLO_TASK_BLOCKING
Mask to detect task blocked for some reason.
Definition: piccolo_os.h:134
@ PICCOLO_TASK_SEND_SIGNAL_BLOCKED
Task block sending signal.
Definition: piccolo_os.h:133
@ PICCOLO_TASK_ZOMBIE
Task has ended and should be removed by the scheduler.
Definition: piccolo_os.h:130
@ PICCOLO_TASK_RUNNING
Task is running.
Definition: piccolo_os.h:129
@ PICCOLO_TASK_GET_SIGNAL_BLOCKED
Task blocked getting signal.
Definition: piccolo_os.h:132
Piccolo OS internal data structure.
Definition: piccolo_os.h:116
Piccolo OS task data structure.
Definition: piccolo_os.h:98