[STM32L1] 如何测试STM32芯片运行时内存大小?

[复制链接]
5224|11
 楼主| Crashdown 发表于 2016-7-18 12:00 | 显示全部楼层 |阅读模式
本帖最后由 Crashdown 于 2016-7-20 13:55 编辑

写了程序无缘无故死机,想测试下是不是因为内存满了导致动态内存分配失败,想到一个办法就是每个循环之后u8 a=new u8[count];count++;delete[] a;直到a==0时串口输出count来计算当前剩余内存,不知道这样可不可行?各位在进行内存管理与监视的时候一般用什么方法?
 楼主| Crashdown 发表于 2016-7-20 18:01 | 显示全部楼层
本帖最后由 Crashdown 于 2016-7-20 18:03 编辑

捣鼓了一下午,捣鼓出来了,编译器用C++11,分配失败时抛出bad_alloc异常,编译成功,烧录,,,,,,,结果内存满时直接关机,上代码,大家看看还有解决方法吗
  1. try
  2. {
  3.         p=new int[count];
  4.         count++;
  5.        delete[] p;
  6. }
  7. catch (const bad_alloc& e )
  8. {
  9.         SerialUSB.write("There is ");
  10.         SerialUSB.write(count);
  11.         SerialUSB.write(" byte memory left");
  12.         return;
  13. }
moyanming2013 发表于 2016-7-20 19:13 | 显示全部楼层
Crashdown 发表于 2016-7-20 18:01
捣鼓了一下午,捣鼓出来了,编译器用C++11,分配失败时抛出bad_alloc异常,编译成功,烧录,,,,,,,结 ...

你这种用法给你4GB也不够用啊。
嵌入式对malloc、new之类的别用。
当然要用的话,看看编译器在嵌入式平台下对new和delete的支持情况如何?适当增大堆区大小,另外尽量提前获知所用内存大小,不但可以减少此类错误,而且还可以减少堆的碎片。
你在哪delete掉p指向的内存?别忘了delete。
天灵灵地灵灵 发表于 2016-7-20 23:35 | 显示全部楼层
算法用的时候要合理,不要搞耗费内存的东西
lxyppc 发表于 2016-7-21 08:59 来自手机 | 显示全部楼层
可以参照vc的做法
在debug版本中重载new和delete运算符
统计内存分配情况
qbasicljx 发表于 2016-7-21 09:27 | 显示全部楼层
在单片机里面 还是像 ucos 那样定义一些数组来自己使用
好管理,交个编译器 不放心啊
 楼主| Crashdown 发表于 2016-7-21 09:31 | 显示全部楼层
qbasicljx 发表于 2016-7-21 09:27
在单片机里面 还是像 ucos 那样定义一些数组来自己使用
好管理,交个编译器 不放心啊 ...

也想过这种方法,不过之前没用过不太敢在正式项目里面用,看来得多看看内存管理方面的资料,谢谢!
 楼主| Crashdown 发表于 2016-7-22 11:05 | 显示全部楼层
lxyppc 发表于 2016-7-21 08:59
可以参照vc的做法
在debug版本中重载new和delete运算符
统计内存分配情况

你好,我想再问下,我重载了new,但是编译器报错:
Description        Resource        Path        Location        Type
undefined reference to `operator new(unsigned int, char const*, unsigned int)'        main.cpp        /Test/src        line 52        C/C++ Problem

这个错误是什么意思,应该如何才能把重载的new作用于全局?
E-Kaia 发表于 2016-7-22 16:07 | 显示全部楼层
你用keil的话会直接显示出RAM用了多少了吧
Thorald 发表于 2016-7-23 18:44 | 显示全部楼层
编译软件上,编译完会有提示的吧
 楼主| Crashdown 发表于 2016-7-25 12:06 | 显示全部楼层
E-Kaia 发表于 2016-7-22 16:07
你用keil的话会直接显示出RAM用了多少了吧

keil可以查看静态内存,我想查看下动态内存的分配情况,照上面那位大神说的我重载了全局new和delete,已经实现debug状态下内存申请的跟踪了,不过好像不能输出出错文件,还在想办法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部