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