打印
[ZLG-MCU]

请教大家一个关于移植的困惑

[复制链接]
1609|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ichb|  楼主 | 2007-1-6 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们在建立任务时都会给每个任务设定一个堆栈,发生任务切换时就会把当前cpu的寄存器保存至该任务堆栈中,然后把高优先级任务堆栈的内容放置到cpu寄存器中,完成任务切换。
但是zlgarm的移植代码当中,任务发生切换时,会把当前cpu寄存器保存到StackUsr中,而不是保存到任务的堆栈中,而高优先级的任务则从任务堆栈中恢复cpu的内容。是我理解代码错误,还是stackuar和任务堆栈有一定关系?
请教各位仁兄帮忙解惑。

相关帖子

沙发
ichb|  楼主 | 2007-1-6 16:48 | 只看该作者

原来这样

发现自己理解错了。
sp是什么指向指向任务的堆栈,我一直对此比较迷惑。
重新理了一遍代码,原来是这样子。
ucos-ii初始化过程中,用OSTaskCreate()创建一新任务,该任务所定义的堆栈位置就放到了该任务的tcb当中,然后调用OSStart(),启动多任务,该函数调用OSStartHighRdy() -〉__OSStartHighRdy() -> OSIntCtxSw_1,此时SP指针就指向该任务定义的堆栈了。再次发生任务切换时,就会调用OSIntCtxSw,任务寄存器就会保存在任务堆栈,然后在新任务堆栈中恢复cpu寄存器,实现了任务切换。

使用特权

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

本版积分规则

12

主题

21

帖子

0

粉丝