waking 发表于 2013-2-13 10:51:34

请问 UCOS切换时将保存局部变量和返回地址入栈函数是哪个?

在OSSched中指看到了断点指针和CPU通用寄存器的入栈,没有看到函数局部变量的入栈,刚刚学习很多疑惑,请大家不吝赐教。谢谢,祝大家新年快乐!

waking 发表于 2013-2-13 11:12:19

在运行任务时SP的值就自动改变了,临时变量就自动压到堆栈中了,是这样的吗?
另外,如何合理的设计一个合适的堆栈大小呢,避免浪费。

mitchell 发表于 2013-2-13 11:32:15

局部变量本来就在线程堆栈中。

i55x 发表于 2013-2-13 14:34:21

各种cpu移植方法不同,如果是arm应该放在pendsv中断里面保存上下文,实际上arm处理器的pendsv中断就是给rtos的上下文切换设计的。

wanghusheng2008 发表于 2013-2-13 10:51:35

每个任务有自己的任务栈,这个任务栈负责保存这个任务运行中调用的函数以及局部变量的值。而这个任务栈是在创建任务时指定给SP寄存器的。任务切换实际上是切换运行环境,这个运行环境包括通用寄存器以及控制寄存器。一个运行中的程序需要两个部分,一个是CPUI,这里CPU包括通用寄存器以及控制寄存器,另一个部分是内存,这个内存包括全局变量和局部变量。全局变量不提,局部变量就是SP。所以运行中的程序要获取CPU,只需要获得CPU的通用寄存器和控制寄存器以及局部内存。CPU使用SP寄存器来保证程序在获得CPU的同时也获得相应的局部内存。

wanghusheng2008 发表于 2013-2-17 14:14:41

不知道你说的“临时变量”是指你任务中的临时变量还是UCOS自己的临时变量?

waking 发表于 2013-2-17 20:08:54

wanghusheng2008 发表于 2013-2-13 10:51 static/image/common/back.gif
每个任务有自己的任务栈,这个任务栈负责保存这个任务运行中调用的函数以及局部变量的值。而这个任务栈是在 ...

谢谢你的回复

waking 发表于 2013-2-17 21:31:53

wanghusheng2008 发表于 2013-2-17 14:14 static/image/common/back.gif
不知道你说的“临时变量”是指你任务中的临时变量还是UCOS自己的临时变量? ...

我说的是指局部变量,一开始没有理解现在理解了。
页: [1]
查看完整版本: 请问 UCOS切换时将保存局部变量和返回地址入栈函数是哪个?