All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
sched.h File Reference

Scheduler API definition. More...

Detailed Description

Scheduler API definition.

Author
Kaspar Schleiser kaspa.nosp@m.r@sc.nosp@m.hleis.nosp@m.er.d.nosp@m.e
Hauke Petersen hauke.nosp@m..pet.nosp@m.ersen.nosp@m.@fu-.nosp@m.berli.nosp@m.n.de

Definition in file sched.h.

#include <stddef.h>
#include <inttypes.h>
#include "kernel_defines.h"
#include "native_sched.h"
#include "clist.h"
+ Include dependency graph for sched.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define MAXTHREADS   0
 The maximum number of threads to be scheduled.
 
#define KERNEL_PID_UNDEF   0
 Canonical identifier for an invalid PID.
 
#define KERNEL_PID_FIRST   (KERNEL_PID_UNDEF + 1)
 The first valid PID (inclusive).
 
#define KERNEL_PID_LAST   (KERNEL_PID_FIRST + MAXTHREADS - 1)
 The last valid PID (inclusive).
 
#define PRIkernel_pid   PRIi16
 Macro for printing formatter.
 
#define SCHED_TEST_STACK   1
 Enables detection of stack overflows and measures stack usage when != 0.
 
#define SCHED_PRIO_LEVELS   16
 The number of thread priority levels.
 

Typedefs

typedef int16_t kernel_pid_t
 Unique process identifier.
 
typedef struct _thread thread_t
 forward declaration for thread_t, defined in thread.h
 
typedef void(* sched_callback_t) (kernel_pid_t active, kernel_pid_t next)
 Scheduler run callback.
 

Functions

static int pid_is_valid (kernel_pid_t pid)
 Determine if the given pid is valid.
 
thread_tsched_run (void)
 Triggers the scheduler to schedule the next thread.
 
void sched_set_status (thread_t *process, thread_status_t status)
 Set the status of the specified process.
 
void sched_switch (uint16_t other_prio)
 Yield if appropriate.
 
NORETURN void cpu_switch_context_exit (void)
 Call context switching at thread exit.
 
NORETURN void sched_task_exit (void)
 Removes thread from scheduler and set status to STATUS_STOPPED.
 
void sched_change_priority (thread_t *thread, uint8_t priority)
 Change the priority of the given thread.
 
void sched_arch_idle (void)
 Set CPU to idle mode (CPU dependent)
 
void sched_register_cb (sched_callback_t callback)
 Register a callback that will be called on every scheduler run.
 
static void sched_runq_advance (uint8_t prio)
 Advance a runqueue.
 
void sched_runq_callback (uint8_t prio)
 Scheduler runqueue (change) callback.
 
static int sched_runq_is_empty (uint8_t prio)
 Tell if the number of threads in a runqueue is 0.
 
static int sched_runq_exactly_one (uint8_t prio)
 Tell if the number of threads in a runqueue is 1.
 
static int sched_runq_more_than_one (uint8_t prio)
 Tell if the number of threads in a runqueue greater than 1.
 

Variables

volatile unsigned int sched_context_switch_request
 Flag indicating whether a context switch is necessary after handling an interrupt.
 
volatile thread_tsched_threads [KERNEL_PID_LAST+1]
 Thread table.
 
volatile int sched_num_threads
 Number of running (non-terminated) threads.
 
clist_node_t sched_runqueues [SCHED_PRIO_LEVELS]
 List of runqueues per priority level.
 

Helpers to work with thread states

#define STATUS_ON_RUNQUEUE   STATUS_RUNNING
 to check if on run queue: st >= STATUS_ON_RUNQUEUE

 
#define STATUS_NOT_FOUND   ((thread_status_t)~0)
 Describes an illegal thread status.
 

Thread states supported by RIOT

  Keep in sync with OpenOCD src/rtos/riot.c
enum  thread_status_t {
  STATUS_STOPPED , STATUS_ZOMBIE , STATUS_SLEEPING , STATUS_MUTEX_BLOCKED ,
  STATUS_RECEIVE_BLOCKED , STATUS_SEND_BLOCKED , STATUS_REPLY_BLOCKED , STATUS_FLAG_BLOCKED_ANY ,
  STATUS_FLAG_BLOCKED_ALL , STATUS_MBOX_BLOCKED , STATUS_COND_BLOCKED , STATUS_RUNNING ,
  STATUS_PENDING , STATUS_NUMOF
}