X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fkern%2Fproc.c;h=37b36e07d664c9509f9d920c51357b6b5c027f75;hb=33b33ae4a68da6dba63e2cdff3c42edfcfc5ba89;hp=1d36ab0b16cdb482c65d894470d892e36f482a0d;hpb=e178e43b399c056990d8592f62385e1924b86b3c;p=bertos.git diff --git a/bertos/kern/proc.c b/bertos/kern/proc.c index 1d36ab0b..37b36e07 100644 --- a/bertos/kern/proc.c +++ b/bertos/kern/proc.c @@ -63,7 +63,6 @@ * \note This function *MUST* preserve also the status of the interrupts. */ EXTERN_C void asm_switch_context(cpustack_t **new_sp, cpustack_t **save_sp); -EXTERN_C int asm_switch_version(void); /* * The scheduer tracks ready and waiting processes @@ -129,8 +128,6 @@ void proc_init(void) proc_init_struct(&MainProcess); CurrentProcess = &MainProcess; - /* Make sure the assembly routine is up-to-date with us */ - ASSERT(asm_switch_version() == 1); MOD_INIT(proc); } @@ -145,7 +142,7 @@ struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(voi { Process *proc; size_t i; - size_t proc_size_words = ROUND2(sizeof(Process), sizeof(cpustack_t)) / sizeof(cpustack_t); + const size_t PROC_SIZE_WORDS = ROUND2(sizeof(Process), sizeof(cpustack_t)) / sizeof(cpustack_t); #if CONFIG_KERN_HEAP bool free_stack = false; #endif @@ -184,13 +181,13 @@ struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(voi if (CPU_STACK_GROWS_UPWARD) { proc = (Process*)stack_base; - proc->stack = stack_base + proc_size_words; + proc->stack = stack_base + PROC_SIZE_WORDS; if (CPU_SP_ON_EMPTY_SLOT) proc->stack++; } else { - proc = (Process*)(stack_base + stack_size / sizeof(cpustack_t) - proc_size_words); + proc = (Process*)(stack_base + stack_size / sizeof(cpustack_t) - PROC_SIZE_WORDS); proc->stack = (cpustack_t*)proc; if (CPU_SP_ON_EMPTY_SLOT) proc->stack--; @@ -199,11 +196,13 @@ struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(voi proc_init_struct(proc); proc->user_data = data; -#if CONFIG_KERN_HEAP +#if CONFIG_KERN_HEAP | CONFIG_KERN_MONITOR | (ARCH & ARCH_EMUL) proc->stack_base = stack_base; proc->stack_size = stack_size; + #if CONFIG_KERN_HEAP if (free_stack) proc->flags |= PF_FREESTACK; + #endif #endif /* Initialize process stack frame */ @@ -218,7 +217,7 @@ struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(voi ATOMIC(SCHED_ENQUEUE(proc)); #if CONFIG_KERN_MONITOR - monitor_add(proc, name, stack_base, stack_size); + monitor_add(proc, name); #endif return proc;