
ucos_ii 的任务堆栈大小
正如我们所知道的,操作系统在任务调度时,首先会先把运行任务的寄存器值压栈(保存现场),下次运行时先出栈(恢复现场)。我想请教一个问题:ucos_ii每个任务的堆栈只是用来...
正如我们所知道的,操作系统在任务调度时,首先会先把运行任务的寄存器值压栈(保存现场),下次运行时先出栈(恢复现场)。我想请教一个问题:ucos_ii每个任务的堆栈只是用来保存现场?还是除了保存现场,这个任务中的局部变量也在堆栈中分配?或者说任务栈的大小是和寄存器的大小相等,还是要大于寄存器的大小?
展开
展开全部
任务堆栈的大小 肯定是要大于 所有寄存器数量 因为任务堆栈还要保存局部变量 和 返回地址等
追问
为局部变量分配内存的机制是什么样的?
追答
比如:
unsigned char add(unsigned char a,unsigned char b)
{
unsigned char c;
c = a + b;
return c;
}
进入后a,b,c都是要入栈的,程序退出前a,b,c出栈。
说远一点,也许你用一些编译器调试时,发现函数的局部变量并没有入栈,这样的函数称为“不可重入性”,这样的程序是不能用在操作系统里的。就说你们多,你要是有问题我们再讨论
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询