TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28377S: 怎么知道程序实际使用的stack和heap空间大小

Part Number:TMS320F28377S

如题。请耐心看完:

     1. 我想知道的是程序实际使用到的空间,不是分配了多少。因此,CCS工程属性–C2000 Linker–Basic Options里面设置的,或  cmd文件里设置的,或map文件里显示的,再或Memory  Allocation里面看到的。都不是我想问的。以及有帖子里讲述的哪里加断点,怎么判断堆栈是否溢出。我现在不想判断是否溢出,想知道不溢出的情况下,当前程序实际使用了多少空间的heap与stack?

     2. 看到有位大神解答的,View–Stack  usage,e2echina.ti.com/…/stack。

         帖中说不看最大的,看总共的,我把我生成的结果,每一项加起来,有1800个字节,不到1k*16.    针对这个结果,我有两个疑问:

        (1)为什么我把CCS工程属性里把stack空间设为0x0010(即很小),同时在cmd文件里也为stack分配一个这么小的空间之后,编译却没有报错?

        (2)我在CCS工程属性里把stack空间设为0x0800(2k*16),同时在cmd文件里也为stack分配一个0x0800的空间后,我的电机控制程序运行正常,但当我开启以太网功能后,(确实以太网函  数内部比较复杂,类的定义及调用关系也复杂),程序就会运行崩溃,除非进一步加大stack空间到4k*16才正常。可是按照stack uasge显示的2k就肯定够了啊?

         所以是不是可以怀疑stack usage 也不准,或者是也只是编译结果的静态分析,实际运行起来的stack完全不一样呢?

     3.接上,有没有一种可以一边跑程序,一边在线可以监控程序实际使用了多少stack和heap的方法呢?

   谢谢。

Susan Yang:

user5229665 说:看到有位大神解答的,View–Stack  usage,e2echina.ti.com/…/stack。

无法打开您的链接,能否重新上传一下?

user5229665 说:,或者是也只是编译结果的静态分析,实际运行起来的stack完全不一样呢?

我也是这样认为的

user5229665 说:有没有一种可以一边跑程序,一边在线可以监控程序实际使用了多少stack和heap的方法呢?

据我所知,目前是没有实时监控的

,

user5229665:

抱歉,我再上传一下。

e2echina.ti.com/…/stack

,

Susan Yang:

对于C2000目前没有其他决定stack大小的方法,一般都是使用 View–Stack  usage 的方法。

若是其他使用TI-RTOS的工程,可以使用下面的语句来查看 free heap

#include "xdc/runtime/Memory.h"Memory_Stats stats;
Memory_getStats(NULL, &stats);
PRINT("Total:0x%x", stats.totalSize);
PRINT("Free:0x%x (%d%%)", stats.totalFreeSize, ((stats.totalFreeSize*100) / stats.totalSize));
PRINT("Largest: 0x%x (%d%%)", stats.largestFreeSize, ((stats.largestFreeSize*100) / stats.totalSize));

,

jiangtao zhou:

堆和栈最靠不住,它是运行时的东西,只有写在全局的.bss才可靠。编译时就可检测,不但TI 的编译器不容易发现栈溢出,GNU LINUX编译器也发现不了(10年前用的gcc3.x,运行时挂了)所以栈上放一些基本型的4字节可以,buf[]尽量别用。堆的话,建议启动时一次申请好,不要到处new和malloc

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28377S: 怎么知道程序实际使用的stack和heap空间大小
分享到: 更多 (0)