打印

求助有关uC/OS问题

[复制链接]
1400|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caiwenbin|  楼主 | 2007-11-2 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uC/os, ST, ui, ni, pc
小弟不明白任务栈结构初始化OSTaskInit()的具体作用,望各位大哥指点指点,我能看懂下面函数的意思,但不明白OSTaskInit()的具体作用,为什么要初始化一些0啊?下面是LPC2210的原程序:
uint32 *OSTaskInit(void (*task)(void *pd) , 
                   void *pada ,
                   uint32 *ptos,
                   uint16 opt)
{
  uint32 *stk;
  opt=opt;                      //opt没有使用
  stk=ptos;                     //获取堆栈指针

  /*建立任务环境,ADS1.2使用满递减堆栈*/
  *stk   = (uint32)task;        //PC
  *--stk = (uint32)task;        //LR
  *--stk = 0;                   //R12
  *--stk = 0;                   //R11
  *--stk = 0;                   //R10
  *--stk = 0;                   //R9
  *--stk = 0;                   //R8
  *--stk = 0;                   //R7
  *--stk = 0;                   //R6
  *--stk = 0;                   //R5
  *--stk = 0;                   //R4
  *--stk = 0;                   //R3
  *--stk = 0;                   //R2
  *--stk = 0;                   //R1
  *--stk = uint32 pdata;        //R0,第一个参数使用R0传递
  *--stk = (USER_USING_MODE | 0);    //SPSR,允许IRQ,FIQ中断
  *--stk = 0;                   //关中断计数OsEnterSum
  return(stk);
}

相关帖子

沙发
wishcom| | 2007-11-2 22:52 | 只看该作者

重要的不是那些0

你得明白uCOS的context(上下文)结构:
正式你贴出来的,uCOS的context由
PC;LR;R12;R11;R10;R9;R8;R7;R6;R5;R4;R3;R2;R1;R0;SPSR
组成,而且是有顺序的。
任务切换时就是将当前task的这些东西保存起来,然后把下一个task的这些东西读取进CPU就完成了Task的切换。
问题是:在新建议各task时,之前没有运行过这个task,也就没有保存过它的context,那么怎么才能调度到这个新的task呢?
答案很明显:就是用这个OSTaskInit,人工给他按照格式生成一个context,然后再调度就可以进这个task了。

context中其他的之所以是0,因为这个task新起的,当然初始化为0了。
重点关注context中的PC,LR,SPSR。因为在task调度的时候是由他们决定了调到新的task什么地方运行。在这个程序中,他们的值设置为了task的入口地址,这是很显然的,因为task刚开始跑肯定是要从入口处开始的。。。

建议LZ多了解:
1. 多任务切换原理
2. Task的上下文结构

使用特权

评论回复
板凳
caiwenbin|  楼主 | 2007-11-3 20:05 | 只看该作者

感谢楼上大哥!

使用特权

评论回复
地板
caiwenbin|  楼主 | 2007-11-3 20:11 | 只看该作者

再次感谢 wishcom

重点关注context中的PC,LR,SPSR。
一语惊醒梦中人啊!

使用特权

评论回复
5
wishcom| | 2007-11-5 00:48 | 只看该作者

不要这样客气嘛,我会不好意思的啦^^

使用特权

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

本版积分规则

67

主题

509

帖子

0

粉丝