打印

malloc的问题

[复制链接]
3347|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wang5430|  楼主 | 2009-9-29 16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初学STM32。为什么我用malloc分配了不到1K的内存后,就没法调用函数了。分配的时候没问题。但调用函数就跑HardFaultException这个函数里面去了。其他就液晶显示程序。只占很少内存。103ZE的。不可能是内存不够。JLINK仿真。请高手指点。谢谢
沙发
barboon| | 2009-9-29 17:19 | 只看该作者
有可能是你的link文件里,heap的设置不够大
malloc分配的内存是从heap中来的,STM32固件库自带的link文件默认heap大小为512字节
超过这个数目有可能导致内存访问越界,掉进了HardFaultException

使用特权

评论回复
板凳
wang5430|  楼主 | 2009-9-29 17:31 | 只看该作者
那要怎么设置呢?

使用特权

评论回复
地板
mohanwei| | 2009-9-29 17:35 | 只看该作者
改大一些……

使用特权

评论回复
5
wang5430|  楼主 | 2009-9-29 17:42 | 只看该作者
; Amount of memory (in bytes) allocated for Heap
; Tailor this value to your application needs
;// <h> Heap Configuration
;//   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>

Heap_Size        EQU     0x00000400

                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem         SPACE   Heap_Size
__heap_limit

是这里吗?我的本来就是1K的。我改成0x800也是一样。分配的空间绝对不会超过1K。

使用特权

评论回复
6
wang5430|  楼主 | 2009-9-29 17:45 | 只看该作者
刚看了。实际动态分配552字节

使用特权

评论回复
7
heqinlong2009| | 2009-9-29 20:43 | 只看该作者
楼上 你的问题怎么解决的?有兴趣

使用特权

评论回复
8
wang5430|  楼主 | 2009-9-29 21:24 | 只看该作者
还没解决呢。都下班了。没人帮我

使用特权

评论回复
9
xinzha| | 2009-9-30 08:51 | 只看该作者
Heap里面有 1k,如果是一个完善的malloc函数的话,你是分配不到1k内存的,因为分配的时候要记录一系列信息(如果没有这些信息,你日后释放怎么办?),好的系统还会在分配的buffer后面留有一定的空间以备出现越界时查询用。
如果你只有1k可用就不要malloc了,把整个stdlib库去了还能节省不少代码空间。

使用特权

评论回复
10
xinzha| | 2009-9-30 08:53 | 只看该作者
另外修改heap size也要小心,heap后面紧跟着就是stack,要是把stack冲了就有得玩了。

使用特权

评论回复
11
wang5430|  楼主 | 2009-9-30 09:06 | 只看该作者
谢谢各位的热心帮忙。这个问题已经解决了。问题出现在分配完空间后,里面有个指针还没赋值就直接操作了。大意。哎。
用这样的结构主要是考虑因为这个功能不会经常用到。动态分配,用完就释放。其他地方还可以用。结果看了下,这个依赖具体实现的。很多都是直接开辟个空间做全局变量的。这样一来,跟我直接定义全局变量就没什么区别了。所以考虑了一下,还是改结构。把RAM操作交给上一层。呵呵。
再次谢谢各位!

使用特权

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

本版积分规则

7

主题

66

帖子

0

粉丝