-
Notifications
You must be signed in to change notification settings - Fork 90
Open
Description
hawk 你好,
最近试用了一下s_task, 感觉很不错, 不过因为对代码的理解有限,还希望能请教几个问题。
char g_stack0[384]; // 64 * 6
char g_stack1[384];
我测试了一下, 64*5 的stack, 也可以运行, 但64*4 就出现了报错 fprintf(stderr, "stack overflow in lower bits");
if(((int *)real_stack)[0] != S_TASK_STACK_MAGIC) {
#ifndef NDEBUG
fprintf(stderr, "stack overflow in lower bits");
#endif
while(1); /* dead */
}
这里的 S_TASK_STACK_MAGIC ((int)0x5AA55AA5), 没有看到什么文档, 请问具体是什么含义。
另外,swapcontext 两个注释掉的指令, 请问被注释的原因是什么。
static void swapcontext(ucontext_t *old_tcb, const ucontext_t *new_tcb) {
__asm__ __volatile__(
"PUSH {r4-r12,lr}\n"
"STR sp, [r0]\n"
//"LDR r2, [r1]\n"
//"MOV sp, r2\n"
"LDR sp, [r1]\n"
"POP {r4-r12,lr}\n"
"BX lr\n"
);
}
最后, 如果关于create_context, 的-1 和 -10 两个常数有相关说明就非常好了。
static void create_context(ucontext_t *oucp, void *stack, size_t stack_size) {
uint32_t *top_sp;
uint32_t int_sp;
int_sp = (int )((char *)stack + stack_size);
int_sp = int_sp / 4 * 4; //alignment
top_sp = (uint32_t *)int_sp;
top_sp[-1] = (int)&s_task_context_entry;
oucp->sp = (int)&top_sp[-10];
}
Metadata
Metadata
Assignees
Labels
No labels