X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fkern%2Fproc.h;h=af193546a81cce6db08f2b3790ae2f2139d570c5;hb=600b1b193f906964b3676c3cdc43f5ff20d438ac;hp=e9a910d4d5fbc466ae7bc217f7e651103b4532a5;hpb=e62ca0b357f09804d7d894949df44224c9d74bb7;p=bertos.git diff --git a/bertos/kern/proc.h b/bertos/kern/proc.h index e9a910d4..af193546 100644 --- a/bertos/kern/proc.h +++ b/bertos/kern/proc.h @@ -30,15 +30,23 @@ * Copyright 1999, 2000, 2001, 2008 Bernie Innocenti * --> * - * \brief Process scheduler (public interface). + * \brief BeRTOS Kernel core (Process scheduler). * * \version $Id$ * \author Bernie Innocenti + * + * $WIZ$ module_name = "kernel" + * $WIZ$ module_configuration = "bertos/cfg/cfg_proc.h" + * $WIZ$ module_depends = "switch_ctx", "coop" + * $WIZ$ module_supports = "not atmega103" */ + #ifndef KERN_PROC_H #define KERN_PROC_H -#include "cfg/cfg_kern.h" +#include "cfg/cfg_proc.h" +#include "cfg/cfg_monitor.h" + #include #if CONFIG_KERN_PREEMPT @@ -54,9 +62,8 @@ */ struct Process; -/* Task scheduling services */ void proc_init(void); -struct Process *proc_new_with_name(const char* name, void (*entry)(void), iptr_t data, size_t stacksize, cpu_stack_t *stack); +struct Process *proc_new_with_name(const char *name, void (*entry)(void), iptr_t data, size_t stacksize, cpu_stack_t *stack); #if !CONFIG_KERN_MONITOR #define proc_new(entry,data,size,stack) proc_new_with_name(NULL,(entry),(data),(size),(stack)) @@ -66,16 +73,27 @@ struct Process *proc_new_with_name(const char* name, void (*entry)(void), iptr_t void proc_exit(void); void proc_yield(void); +void proc_rename(struct Process *proc, const char *name); +const char *proc_name(struct Process *proc); +const char *proc_currentName(void); +iptr_t proc_currentUserData(void); int proc_testSetup(void); int proc_testRun(void); int proc_testTearDown(void); -struct Process *proc_current(void); -iptr_t proc_currentUserData(void); -void proc_rename(struct Process *proc, const char *name); -const char *proc_name(struct Process *proc); -const char *proc_currentName(void); +/** + * Return the context structure of the currently running process. + * + * The details of the Process structure are private to the scheduler. + * The address returned by this function is an opaque pointer that can + * be passed as an argument to other process-related functions. + */ +INLINE struct Process *proc_current(void) +{ + extern struct Process *CurrentProcess; + return CurrentProcess; +} #if CONFIG_KERN_PRI void proc_setPri(struct Process *proc, int pri); @@ -222,7 +240,7 @@ INLINE bool proc_allowed(void) */ #define CONFIG_KERN_MINSTACKSIZE \ (CPU_SAVED_REGS_CNT * 2 * sizeof(cpu_stack_t) \ - + 32 * sizeof(int)) + + 48 * sizeof(int)) #endif #endif