打印
[STM32L1]

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

[复制链接]
4589|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异常,编译成功,烧录,,,,,,,结果内存满时直接关机,上代码,大家看看还有解决方法吗
try
{
        p=new int[count];
        count++;
       delete[] p;
}
catch (const bad_alloc& e )
{
        SerialUSB.write("There is ");
        SerialUSB.write(count);
        SerialUSB.write(" byte memory left");
        return;
}

使用特权

评论回复
板凳
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 | 只看该作者
算法用的时候要合理,不要搞耗费内存的东西

使用特权

评论回复
5
lxyppc| | 2016-7-21 08:59 | 只看该作者
可以参照vc的做法
在debug版本中重载new和delete运算符
统计内存分配情况

使用特权

评论回复
6
qbasicljx| | 2016-7-21 09:27 | 只看该作者
在单片机里面 还是像 ucos 那样定义一些数组来自己使用
好管理,交个编译器 不放心啊

使用特权

评论回复
7
Crashdown|  楼主 | 2016-7-21 09:31 | 只看该作者
qbasicljx 发表于 2016-7-21 09:27
在单片机里面 还是像 ucos 那样定义一些数组来自己使用
好管理,交个编译器 不放心啊 ...

也想过这种方法,不过之前没用过不太敢在正式项目里面用,看来得多看看内存管理方面的资料,谢谢!

使用特权

评论回复
8
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作用于全局?

使用特权

评论回复
9
E-Kaia| | 2016-7-22 16:07 | 只看该作者
你用keil的话会直接显示出RAM用了多少了吧

使用特权

评论回复
10
Thorald| | 2016-7-23 18:44 | 只看该作者
编译软件上,编译完会有提示的吧

使用特权

评论回复
11
Crashdown|  楼主 | 2016-7-25 12:06 | 只看该作者
E-Kaia 发表于 2016-7-22 16:07
你用keil的话会直接显示出RAM用了多少了吧

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

20

帖子

0

粉丝