我想知道我在项目中使用了多少RAM,据我所知,没有办法真正解决这个问题(除了自己进行计算之外)。我进入了一个相当大的项目的阶段,在此我已经确定我的RAM用完了。
我已经确定了这一点,因为我可以添加一个节,然后在代码中的其他地方毫无理由地打破所有地狱。如果我有#ifndef
其他问题,它将再次起作用。新代码在程序上没有任何问题。
我怀疑有一段时间我将要用完可用的RAM。我不认为我使用了太多堆栈(尽管有可能),确定我实际使用多少RAM的最佳方法是什么?
经历并尝试解决它,当我遇到枚举和结构时会遇到问题;它们需要多少内存?
第一次编辑:另外,自开始以来,我已经对草图进行了很多编辑,这些并不是我最初得到的实际结果,但是它们是我现在所得到的。
text data bss dec hex filename
17554 844 449 18847 499f HA15_20140317w.cpp.elf
16316 694 409 17419 440b HA15_20140317w.cpp.elf
17346 790 426 18562 4882 HA15_20140317w.cpp.elf
经过大量编辑后,第一行(带有文本17554)不起作用,第二行(带有文本16316)正在正常工作。
编辑:第三行可以正常工作,进行串行读取,执行新功能等。实际上,我删除了一些全局变量和重复的代码。我之所以这样说是因为(怀疑)这与每个sae的代码无关,而必须与RAM的使用有关。这使我回到了最初的问题,“如何最好地衡量它”,我仍在检查一些答案,谢谢。
我实际上如何解释以上信息?
到目前为止,我的理解是:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
由于BSS大大少于1024字节,为什么第二个可以工作,而第一个却不能呢?如果DATA+BSS
两者都超过1024。
重新编辑:我编辑了问题以包含代码,但是现在我删除了它,因为它确实与问题无关(可能是不良的编码习惯,变量声明等)。如果您确实想查看代码,则可以通过回顾这些代码来查看代码。我想回到前面的问题,该问题更多地基于:如何衡量RAM使用率。
String
在程序中使用类型吗?众所周知,这会执行频繁的动态内存分配和释放,这可能会使堆碎片化到您可能没有剩余内存的地步。
String
由于开销,我远离s。我很高兴有机会为字符数组,这么说,我几乎总是定义一个固定大小的(目前我所有的字符数组,我有一个字节数组,因为我改变内容长度不同的重新编译,是不是纯粹的。