欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

相关标签: KEIL keil mdk