* Initilial the thread stack. * * @author LXZ (2014/11/8) * * @param void* tentry * @param void* parameter * @param rt_uint8_t* stack_addr * @param void* texit * * @return rt_uint8_t* */
| 67 | * @return rt_uint8_t* |
| 68 | */ |
| 69 | rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, |
| 70 | rt_uint8_t *stack_addr, void *texit) |
| 71 | { |
| 72 | unsigned long *stk; |
| 73 | struct stack_frame *stack_frame; |
| 74 | unsigned long i; |
| 75 | |
| 76 | stk = (unsigned long *)stack_addr; |
| 77 | *(stk) = (unsigned long)texit; |
| 78 | stack_frame = (struct stack_frame *)(stack_addr - sizeof(struct stack_frame)) ; |
| 79 | |
| 80 | //Initilial all register |
| 81 | for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_uint32_t); i ++) |
| 82 | { |
| 83 | ((rt_uint32_t *)stack_frame)[i] = 0xdeadbeef; |
| 84 | } |
| 85 | |
| 86 | stack_frame->PSW = (unsigned long)0x00030000 ; /* psw */ |
| 87 | stack_frame->PC = (unsigned long)tentry; /* thread entery*/ |
| 88 | stack_frame->R1 = (unsigned long )parameter; /* r1 : parameter */ |
| 89 | stack_frame->FPSW = 0x00000100; /* fpsw */ |
| 90 | |
| 91 | return(rt_uint8_t *)stack_frame; |
| 92 | } |
| 93 | |
| 94 | #if defined(RT_USING_FINSH) && defined(MSH_USING_BUILT_IN_COMMANDS) |
| 95 | extern void list_thread(void); |
no outgoing calls
no test coverage detected