打印
[应用相关]

ucos的问题

[复制链接]
1807|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
runmo420|  楼主 | 2009-6-3 22:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uc/os的堆栈初始化函数(OSTaskInit())似乎没什么实质性的作用,这个函数返回的是栈顶的位置,那么后来如果发生任务切换或中断而需要保存寄存器,肯定是从这个栈顶开始的,而先前初始化过的堆栈不就没用了吗?
沙发
andrew.xu| | 2009-6-4 09:03 | 只看该作者

有这个函数么?

使用特权

评论回复
板凳
runmo420|  楼主 | 2009-6-4 09:44 | 只看该作者

应该是OSTaskStkInit()

不好意思,弄错了,各位见笑了。

使用特权

评论回复
地板
arm_fan168| | 2009-6-4 09:58 | 只看该作者

任务第一次运行时

任务第一次运行时不保存寄存器,而是从这个函数初始化好的堆栈中弹出各个寄存器的值。

使用特权

评论回复
5
computer00| | 2009-6-4 10:10 | 只看该作者

任务创建时,堆栈要做成好象已经发生过任务切换的样子,

这个就是堆栈初始化要做的工作。原因如4楼所说,任务第一次运行时,并没有发生任务切换,而接下来的运行,则是发生过切换的,所以在第一次运行前,要把堆栈弄成发生过切换的样子。这样不管任务是第一运行,还是以后的切换,都可以直接从堆栈直接弹出环境变量,而不用分别处理。

使用特权

评论回复
6
runmo420|  楼主 | 2009-6-4 10:48 | 只看该作者

谢谢三位的点拨

谢谢三位的指点。

使用特权

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

本版积分规则

48

主题

142

帖子

0

粉丝