修复不稳定的问题
This commit is contained in:
+30
-28
@@ -49,38 +49,39 @@ typedef struct {
|
||||
os_uintptr_t mepc; /* zero, 用于 epc 保存 */
|
||||
os_uintptr_t ra; /* 返回地址 */
|
||||
os_uintptr_t mstatus; /* 栈指针, 用于mstatus */
|
||||
os_uintptr_t gp; /* 全局指针 */
|
||||
os_uintptr_t tp; /* 线程指针 */
|
||||
os_uintptr_t t0; /* 临时寄存器0 */
|
||||
os_uintptr_t t1; /* 临时寄存器1 */
|
||||
os_uintptr_t t2; /* 临时寄存器2 */
|
||||
os_uintptr_t s0; /* s0/fp */
|
||||
os_uintptr_t s1; /* 保存寄存器1 */
|
||||
os_uintptr_t x3; /* 全局指针 */
|
||||
os_uintptr_t x4; /* 线程指针 */
|
||||
os_uintptr_t x5; /* 临时寄存器0 */
|
||||
os_uintptr_t x6; /* 临时寄存器1 */
|
||||
os_uintptr_t x7; /* 临时寄存器2 */
|
||||
os_uintptr_t x8; /* s0/fp */
|
||||
os_uintptr_t x9; /* 保存寄存器1 */
|
||||
os_uintptr_t a0; /* 函数参数/返回值 */
|
||||
os_uintptr_t a1; /* 函数参数 */
|
||||
os_uintptr_t a2; /* 函数参数 */
|
||||
os_uintptr_t a3; /* 函数参数 */
|
||||
os_uintptr_t a4; /* 函数参数 */
|
||||
os_uintptr_t a5; /* 函数参数 */
|
||||
os_uintptr_t a6; /* 函数参数 */
|
||||
os_uintptr_t a7; /* 函数参数 */
|
||||
os_uintptr_t s2; /* 保存寄存器 */
|
||||
os_uintptr_t s3; /* 保存寄存器 */
|
||||
os_uintptr_t s4; /* 保存寄存器 */
|
||||
os_uintptr_t s5; /* 保存寄存器 */
|
||||
os_uintptr_t s6; /* 保存寄存器 */
|
||||
os_uintptr_t s7; /* 保存寄存器 */
|
||||
os_uintptr_t s8; /* 保存寄存器 */
|
||||
os_uintptr_t s9; /* 保存寄存器 */
|
||||
os_uintptr_t s10; /* 保存寄存器 */
|
||||
os_uintptr_t s11; /* 保存寄存器 */
|
||||
os_uintptr_t t3; /* 临时寄存器 */
|
||||
os_uintptr_t t4; /* 临时寄存器 */
|
||||
os_uintptr_t t5; /* 临时寄存器 */
|
||||
os_uintptr_t t6; /* 临时寄存器 */
|
||||
os_uintptr_t x11; /* 函数参数 */
|
||||
os_uintptr_t x12; /* 函数参数 */
|
||||
os_uintptr_t x13; /* 函数参数 */
|
||||
os_uintptr_t x14; /* 函数参数 */
|
||||
os_uintptr_t x15; /* 函数参数 */
|
||||
os_uintptr_t x16; /* 函数参数 */
|
||||
os_uintptr_t x17; /* 函数参数 */
|
||||
os_uintptr_t x18; /* 保存寄存器 */
|
||||
os_uintptr_t x19; /* 保存寄存器 */
|
||||
os_uintptr_t x20; /* 保存寄存器 */
|
||||
os_uintptr_t x21; /* 保存寄存器 */
|
||||
os_uintptr_t x22; /* 保存寄存器 */
|
||||
os_uintptr_t x23; /* 保存寄存器 */
|
||||
os_uintptr_t x24; /* 保存寄存器 */
|
||||
os_uintptr_t x25; /* 保存寄存器 */
|
||||
os_uintptr_t x26; /* 保存寄存器 */
|
||||
os_uintptr_t x27; /* 保存寄存器 */
|
||||
os_uintptr_t x28; /* 临时寄存器 */
|
||||
os_uintptr_t x29; /* 临时寄存器 */
|
||||
os_uintptr_t x30; /* 临时寄存器 */
|
||||
os_uintptr_t x31; /* 临时寄存器 */
|
||||
}os_stack_frame_t;
|
||||
|
||||
#define STACK_FRAME_SIZE sizeof(os_stack_frame_t)
|
||||
#define MSTATUS_MPIE (1<<7)
|
||||
|
||||
os_stack_t os_port_cpu_stack_init(os_task_entry_t entry, void* param
|
||||
, void* stack_base, os_size_t stack_size, void(*exit_entry)(void)){
|
||||
@@ -93,6 +94,7 @@ os_stack_t os_port_cpu_stack_init(os_task_entry_t entry, void* param
|
||||
((os_uintptr_t*)(p_frame))[i] = 0x5ac0ffee;
|
||||
}
|
||||
|
||||
p_frame->mstatus = MSTATUS_MPIE;
|
||||
p_frame->mepc = (os_uintptr_t)entry;
|
||||
p_frame->a0 = (os_uintptr_t)param;
|
||||
p_frame->ra = (os_uintptr_t)exit_entry;
|
||||
|
||||
Reference in New Issue
Block a user