嵌入式操作系统中任务的堆栈大小应该如何分配
我用的freeRTOS,建了8个任务,其中7个给的堆栈大小是512*4Bytes,最后一个给的是4096*4Bytes,再新建任务的时候,发现内存就不够用了。最后这个任务,之前也是给的512,结果发现任务执行就不对,一直增大到4096才正常运行。
之前都没有用过嵌入式操作系统,这是第一次用。不知道对于任务的堆栈大小的设置应该采用什么方法,还望论坛的朋友们能够传授一点知识! 要那么大内存? 没用过,不了解, 是不是你的任务本身需要那个的内存? freeRTOS中有一个 uxTaskGetStackHighWaterMark 函数,它可以查看当前任务的堆栈剩余大小。
链接是这个函数的使用说明:http://www.freertos.org/uxTaskGetStackHighWaterMark.html lxm 发表于 2014-12-24 22:34
要那么大内存? 没用过,不了解, 是不是你的任务本身需要那个的内存?
应该是我分配的过大了,刚才用 uxTaskGetStackHighWaterMark 这个函数测了一下,好像不需要那么大的堆栈。
只是对这大小的分配还是感觉到有些迷惑,没有方向感。
我记得KEIL会生成一个函数调用以及堆栈的相关的文件,htm格式的 —— Static Call Graph for image
不知道这个文件是否有帮助,不太会看这个东西 考虑任务的局部变量有多少 ludikn 发表于 2014-12-24 22:56
考虑任务的局部变量有多少
任务当中调用的函数的局部变量也得考虑进来吧,感觉这有点庞大啊 IAR有FreeRTOS插件,任务的各种信息都有显示哦 局部变量,调用层数还有递归都会影响栈大小 tomyqg 发表于 2014-12-25 08:34
IAR有FreeRTOS插件,任务的各种信息都有显示哦
用的是KEIL,这个开发环境有这个工具吗? 论坛里搜"freertos trace" 同样想知道 以前也有这问题 关注下 IAR里有插件
有助调试UCOS之类的
页:
[1]