📄 taskinit.c
字号:
/*************************************************************************
Copyright (c) 1999 Mentor Graphics Corporation.
IMPORTANT - USE OF THIS SOFTWARE IS SUBJECT TO LICENSE RESTRICTIONS
CAREFULLY READ THE LICENSE AGREEMENT BEFORE USING THE SOFTWARE
*************************************************************************/
/* %M% - Allocates and initilizes the stack of a new thread */
#include "task.h"
#include "kernel.h"
#include "processor.h"
/*---------------------------------------------------------------------------*/
/*
* vmc_taskinit - Initializes the stack and start address for the thread.
*/
extern void vmc_ARMTaskStartup(void);
#define StackSlop 256
void vmc_taskinit(tcbp, stk, stksize, taskaddr, arg)
struct tentry *tcbp;
char *stk;
int stksize;
void (*taskaddr)(void *);
int arg;
{
struct vmc_frame *frame;
tcbp->pregs = ((char *) stack_align(stk+stksize)) - sizeof(struct vmc_frame);
/* Initialize stack pointer */
frame = (struct vmc_frame *) (tcbp->pregs);
frame->cpsr = SVCMode; /* Supervisor32 mode, IRQ & FIQ enable */
frame->r4 = 0;
frame->r5 = 0;
frame->r6 = 0;
frame->r7 = 0;
frame->r8 = 0;
frame->r9 = 0; /* sb - stack base */
frame->r10 = (int) (stk + StackSlop); /* sl - stack limit */
frame->r11 = 0; /* fp - frame pointer */
frame->startup_pc = vmc_ARMTaskStartup;
frame->task_arg = arg;
frame->return_pc = vmc_userexit_ptr;
frame->task_pc = taskaddr;
}
/*---------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -