伍师傅32 发表于 2014-12-24 21:41:58

嵌入式操作系统中任务的堆栈大小应该如何分配

我用的freeRTOS,建了8个任务,其中7个给的堆栈大小是512*4Bytes,最后一个给的是4096*4Bytes,再新建任务的时候,发现内存就不够用了。

最后这个任务,之前也是给的512,结果发现任务执行就不对,一直增大到4096才正常运行。

之前都没有用过嵌入式操作系统,这是第一次用。不知道对于任务的堆栈大小的设置应该采用什么方法,还望论坛的朋友们能够传授一点知识!

lxm 发表于 2014-12-24 22:34:37

要那么大内存? 没用过,不了解, 是不是你的任务本身需要那个的内存?

伍师傅32 发表于 2014-12-24 22:38:15

freeRTOS中有一个 uxTaskGetStackHighWaterMark 函数,它可以查看当前任务的堆栈剩余大小。

链接是这个函数的使用说明:http://www.freertos.org/uxTaskGetStackHighWaterMark.html

伍师傅32 发表于 2014-12-24 22:42:24

lxm 发表于 2014-12-24 22:34
要那么大内存? 没用过,不了解, 是不是你的任务本身需要那个的内存?

应该是我分配的过大了,刚才用 uxTaskGetStackHighWaterMark 这个函数测了一下,好像不需要那么大的堆栈。

只是对这大小的分配还是感觉到有些迷惑,没有方向感。

我记得KEIL会生成一个函数调用以及堆栈的相关的文件,htm格式的 —— Static Call Graph for image

不知道这个文件是否有帮助,不太会看这个东西

ludikn 发表于 2014-12-24 22:56:26

考虑任务的局部变量有多少

伍师傅32 发表于 2014-12-24 23:10:26

ludikn 发表于 2014-12-24 22:56
考虑任务的局部变量有多少

任务当中调用的函数的局部变量也得考虑进来吧,感觉这有点庞大啊

tomyqg 发表于 2014-12-25 08:34:41

IAR有FreeRTOS插件,任务的各种信息都有显示哦

zylaputa 发表于 2014-12-25 08:35:19

局部变量,调用层数还有递归都会影响栈大小

伍师傅32 发表于 2014-12-25 09:15:40

tomyqg 发表于 2014-12-25 08:34
IAR有FreeRTOS插件,任务的各种信息都有显示哦

用的是KEIL,这个开发环境有这个工具吗?

tomyqg 发表于 2014-12-25 11:17:54

论坛里搜"freertos trace"

315936392 发表于 2014-12-25 11:21:19

同样想知道 以前也有这问题

fengyunyu 发表于 2014-12-25 12:52:09

关注下   

demonye 发表于 2014-12-31 11:03:05

IAR里有插件
有助调试UCOS之类的
页: [1]
查看完整版本: 嵌入式操作系统中任务的堆栈大小应该如何分配