这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 如何确定task的stack大小?

共5条 1/1 1 跳转至

如何确定task的stack大小?

菜鸟
2007-01-25 01:50:31     打赏
请教高手,应该怎样去确定一个task的stack的大小?
是可以计算的吗?还是要不断的测试才得出来的,取task的stack的大小有什么技巧的?



关键词: 如何     确定     stack     大小    

菜鸟
2007-01-26 21:15:00     打赏
2楼
个人觉得,堆栈大小的下限比较好确定,上限需要估算,或通过测试进行确定。工程性的问题,大部分都是先近似,然后通过实际的验证,留出裕量,确定最终的值。从工程的角度考虑,应该是这样吧。

菜鸟
2007-02-01 01:56:00     打赏
3楼
这个要根据你对TASK复杂程度(功能)的要求来看了,如果只需简单的服务功能,并且任务本身也并不复杂,那么够用即可,具体数字上的量化,支持2楼的说法。

菜鸟
2007-03-02 16:54:00     打赏
4楼

堆栈的消耗主要在函数调用层次和局部变量上,优化一下局部变量,缺省的20K一般都够用


菜鸟
2007-03-02 22:03:00     打赏
5楼

stack大小可以用以下方法估算,在计算前,先定义两个概念:

叶子函数:

不再调用其他函数的函数.

叶子调用:

这是一个跟执行相关的概念,即运行过程中不再调用函数的函数,调用叶子函数肯定是叶子调用,有些函数会在if条件句里面调用函数,因此非叶子函数也可能因为if条件不成立而成为叶子调用。

叶子路径:

从main函数一直到叶子调用所经过的函数调用路径称为叶子路径.

一个函数调用所需要的stack的计算方法,就是把该函数所有的参数和局部变量(static的不算)所占存储器的总和,再加一个指针空间,即得该函数调用所需的stack大小.一般编译器会用寄存器传递部分参数,所以这样计算的结果会比实际值稍大一些.

一个叶子路径所需要的stack,就是把该路径经过的所有函数调用需要的stack相加.

穷举所有叶子路径,找出stack最大的一条路径.如果你的系统中断使用独立stack,那么这就是该task的stack。如果中断与task共用stack,还要加上中断函数所需要的stack,才是task的stack。

当然,一个较复杂的系统,穷举叶子路径恐怕比较困难,但一般设计者都明白哪条路径定义的局部变量比较多,计算该路径并加上适当的裕量就可以了,尤其是内存比较充足是,不必那么斤斤计较。

[align=right][color=#000066][此贴子已经被作者于2007-3-2 14:04:46编辑过][/color][/align]

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]