Open jerrygzy opened 1 year ago
S_TASK_STACK_MAGIC 在栈最大空间处放置的魔数,当栈溢出时,这个数据就破坏了。在这样或许能检测栈是否完整。。
LDR sp,r2去掉是因为cortex m3 (v7m架构)可以直接将 [r1]复制到sp,然而cortex m0(v6m架构)不支持,只能先复制到r2,再从r2复制到sp。换到v7m这么写就没必要了。
[-10] 是sp的位置(根据swapcontext开头两句push,str可以计算出)。
@xhawk18 了解,感谢回复。
这边又做了点小优化 POP {r4-r12,pc}
实测运行正常, 可以省去 BX lr
这条指令
hawk 你好,
最近试用了一下s_task, 感觉很不错, 不过因为对代码的理解有限,还希望能请教几个问题。
我测试了一下,
64*5
的stack, 也可以运行, 但64*4
就出现了报错fprintf(stderr, "stack overflow in lower bits");
这里的 S_TASK_STACK_MAGIC ((int)0x5AA55AA5), 没有看到什么文档, 请问具体是什么含义。
另外,swapcontext 两个注释掉的指令, 请问被注释的原因是什么。
最后, 如果关于create_context, 的-1 和 -10 两个常数有相关说明就非常好了。