[应用相关] ucos的问题

[复制链接]
2611|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 | 显示全部楼层

任务第一次运行时

任务第一次运行时不保存寄存器,而是从这个函数初始化好的堆栈中弹出各个寄存器的值。
computer00 发表于 2009-6-4 10:10 | 显示全部楼层

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

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

谢谢三位的点拨

谢谢三位的指点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

142

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部