请教高手,应该怎样去确定一个task的stack的大小?
是可以计算的吗?还是要不断的测试才得出来的,取task的stack的大小有什么技巧的?
共5条
1/1 1 跳转至页

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 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 |