专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 单片机

高性能单片机堆栈有关问题

发布时间:2010-06-14 15:23:33 文章来源:www.iduyao.cn 采编人员:星星草
高性能单片机堆栈问题
用的stm32系列的单片机
我刚才看了一下启动代码里设置的堆栈大小,如下:
Stack_Size      EQU     0x00000400
Heap_Size       EQU     0x00000200
也就是说栈的空间是1024字节,堆的空间是512字节。
为什么我在一个子函数中分配的字符串数组大小已经超过了而没有报错呢?
char *Token1=(char *)malloc(513*sizeof(char));
char *Token2=(char *)malloc(1025*sizeof(char));

------解决方案--------------------
char *Token1=(char *)malloc(513*sizeof(char));
char *Token2=(char *)malloc(1025*sizeof(char));

这个不是在栈里面分配的吧?

其实:堆是堆,栈是栈

两个不同的东西

:)
------解决方案--------------------
没报错,但你能在单片机上运行吗。
------解决方案--------------------
编译通过不等于运行正确.
------解决方案--------------------
malloc是在堆上分配空间,但是是运行时分配的,编译时可以通过,但是程序运行时就会溢出。
------解决方案--------------------
堆栈不够编译器无法报错,除非你使用分散加载,才可能提醒。你这个编译正确但是运行就harddfault
------解决方案--------------------
你确定你malloc出来的内存是在Heap_Size所对应的空间里?正常情况下malloc如果分配空间不足会返回NULL。你看一下你返回的指针是什么?
另外我感觉写单片机程序的一个需要避免之处就是尽量不用系统的malloc,而是自己根据系统内存的实际使用情况来自定义内存池pool,然后通过block malloc的方式来提高这种函数的运行效率。毕竟,固定按内存池分配的内存管理方式要比按字节管理的方式效率高很多。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: