KEIL使用malloc函数申请堆空间失败的解决方法
程序员文章站
2022-06-23 20:58:04
参考链接:keil 下 malloc的使用1、工程内需要包含头文件,malloc位于该头文件内2、工程配置勾选使用微库Target-Use MicroLIB特别声明:一般来说以上两个步骤就可以正常使用malloc函数申请堆空间了,但前提是申请的堆空间不能超过启动文件中规定的堆空间大小(Heap_Size),以下用STM32F103ZET6的启动文件说明:variables = (int32_t *) malloc(=0x3F4); //1014字节程序中申请10...
参考链接:keil 下 malloc的使用
1、工程内需要包含头文件<stdlib.h>,malloc位于该头文件内
2、工程配置勾选使用微库Target-Use MicroLIB
特别声明:
一般来说以上两个步骤就可以正常使用malloc函数申请堆空间了,但前提是申请的堆空间不能超过启动文件中规定的堆空间大小(Heap_Size),以下用STM32F103ZET6的启动文件说明:
variables = (int32_t *) malloc(=0x3F4); //1014字节
程序中申请1014个字节堆空间,按道理说是可以成功返回一个具体的地址的,但是程序却返回为0的地址,说明堆空间没有申请成功,通过查看startup_stm32f10x_hd.s文件,摘选如下:
Heap_Size EQU 0x00000200 ;注意:这里定义了最大堆空间为512字节
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8
THUMB
因为Heap_Size=512字节,当程序需要申请超过512字节的堆空间时,自然无法成功,所以只要在启动文件中将Heap_Size值适当增大,即可解决该问题!
修改如下:
Heap_Size EQU 0x00000C00 ;定义3K大小的堆空间
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8
THUMB
本文地址:https://blog.csdn.net/weixin_42518229/article/details/108574311
上一篇: iOS判断是否越狱设备方法示例
下一篇: 51单片机PWM输出