打印

RL-ARM的rt_init_stack模块是注释有问题还是我没理解?

[复制链接]
1713|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
onsunsl|  楼主 | 2012-8-11 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void rt_init_stack (P_TCB p_TCB, FUNCP task_body) {
/* Prepare TCB and saved context for a first time start of a task. */

U32 *stk,i,size;

/* Prepare a complete interrupt frame for first task start */

size = p_TCB->priv_stack >> 2;
//这里为什么要除以4?
if (size == 0) {
    size = (U16)os_stackinfo >> 2;
}


/* Write to the top of stack. */

stk = &p_TCB->stack[size];

/* Auto correct to 8-byte ARM stack alignment. */

if
((U32)stk & 0x04) {
     //-1把不对齐部分跳过
    stk--;
}


stk -= 16;

/* Default xPSR and initial PC */

stk[15] = INITIAL_xPSR;
//xPSR
stk[14] = (U32)task_body;
//RL

/* Clear R1-R12,LR registers. */

for
(i = 0; i < 14; i++) {
//这是R1~R13?
    stk = 0;
}


/* Assign a void pointer to R0. */

stk[8] = (U32)p_TCB->msg;
//这是R0?

/* Initial Task stack pointer. */

p_TCB->tsk_stack = (U32)stk;
//任务栈起始位置

/* Task entry point. */

p_TCB->ptask = task_body;
//任务函数体

/* Set a magic word for checking of stack overflow. */

p_TCB->stack[0] = MAGIC_WORD;
//栈溢出测量字
}
沙发
onsunsl|  楼主 | 2012-8-11 21:52 | 只看该作者
本帖最后由 onsunsl 于 2012-8-11 21:55 编辑

stack top
          --------------   
          | 0             |   
          | 1             |   
          | 2             |   
          | 3             |   
          | .              |   
          | .              |   
          | .              |   
stk -->| size - 16  |   stk[0]  = 0
          | size - 15  |   stk[1]  = 0
          | size - 14  |   stk[2]  = 0
          | size - 13  |   stk[3]  = 0
          | size - 12  |   stk[4]  = 0
          | size - 11  |   stk[5]  = 0
          | size - 10  |   stk[6]  = 0
          | size - 9   |   stk[7]  = 0
          | size - 8   |   stk[8]  = p_TCB->msg;
          | size - 7   |   stk[9]  = 0
          | size - 6   |   stk[10] = 0
          | size - 5   |   stk[11] = 0
          | size - 4   |   stk[12] = 0
          | size - 3   |   stk[13] = 0
          | size - 2   |   stk[14] = PC
          | size - 1   |   stk[15] = xPSR
          | size - 0   |   stk[16]
         --------------栈内存是不是这样分布的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

27

帖子

1

粉丝