12 void setup_task(
void *sp,
int stack_size,
void (* process)(
void),
18 tcb->
sp = (
void *)((
unsigned int)sp + stack_size -
sizeof(
union st_regs));
21 regs->name.r0 = (
unsigned int)tcb;
34 regs->name.sp = (
unsigned int)tcb->
sp;
35 regs->name.lr = (
unsigned int)process;
36 regs->name.ilr = 0xFFFFFFF9;
37 regs->name.pc = (
unsigned int)process;
38 regs->name.xpsr = 0x01000000;
41 void disp_regs(
void *sp)
45 tkprintf(
"xPSR= %08lX\n", regs->name.xpsr);
46 tkprintf(
"R0 = %08lX ", regs->name.r0);
47 tkprintf(
"R1 = %08lX ", regs->name.r1);
48 tkprintf(
"R2 = %08lX ", regs->name.r2);
49 tkprintf(
"R3 = %08lX ", regs->name.r3);
51 tkprintf(
"R4 = %08lX ", regs->name.r4);
52 tkprintf(
"R5 = %08lX ", regs->name.r5);
53 tkprintf(
"R6 = %08lX ", regs->name.r6);
54 tkprintf(
"R7 = %08lX ", regs->name.r7);
56 tkprintf(
"R8 = %08lX ", regs->name.r8);
57 tkprintf(
"R9 = %08lX ", regs->name.r9);
58 tkprintf(
"R10 = %08lX ", regs->name.r10);
59 tkprintf(
"R11 = %08lX ", regs->name.r11);
61 tkprintf(
"R12 = %08lX ", regs->name.r12);
62 tkprintf(
"SP = %08lX ", regs->name.sp);
63 tkprintf(
"LR = %08lX ", regs->name.lr);
64 tkprintf(
"PC = %08lX ", regs->name.pc);
70 extern void _dispatch(
void *sp);
72 if(((
union st_regs *)(tcb->
sp))->name.pc >= 0x20000000) {
73 SYSERR_PRINT(
"Stack Error ?\n");
int tkprintf(const char *fmt,...)
非タスクコンテキスト実行用メッセージ出力