Keil 编译器 malloc动态分配内存问题

环境:ARM Cortex_M0 LPC1114 Ration开发板

问题:习惯性用C语言的风格,用malloc动态分配了一块内存。然后将将分配地址通过串口,打印输出。


结果无反应,J-link调试。发现程序一直不能进入main()主函数。


接触单片机与KEIL的经验不多,网上搜搜也不清楚原因。


解决:

问了下,公司前辈。

在KEIL, Options for Target' ******' ->Target ->Code Generation->Use MicroLib, 勾选。

问题解决了。


keil MDK4.70 use microlib - 大海 - 大海的博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Keil 中使用标准 C 库调用 malloc 函数,你需要按照以下步骤进行配置: 1. 在 Keil 中打开你的项目。 2. 在项目根目录下新建一个名为 startup 的 C 文件。 3. 在 startup.c 文件中添加以下代码: ``` #include <stdlib.h> #include <stdint.h> /* 定义堆大小(单位为字节) */ #define HEAP_SIZE (1024) /* 在 RAM 中定义一个堆 */ static uint8_t heap_buf[HEAP_SIZE] __attribute__((aligned(8))); /* C 库需要的 _sbrk 函数(实现动态内存分配) */ void *_sbrk(int incr) { static uint8_t *heap_end = heap_buf; uint8_t *prev_heap_end; prev_heap_end = heap_end; if (heap_end + incr > heap_buf + HEAP_SIZE) { /* 堆内存溢出 */ return (void *)0; } heap_end += incr; return (void *)prev_heap_end; } /* main 函数 */ int main(void) { /* 调用 malloc 函数 */ char *str = (char *)malloc(10); /* 使用 malloc 分配的内存 */ strcpy(str, "hello"); /* 释放 malloc 分配的内存 */ free(str); while (1); } ``` 4. 在 Keil 编译器选项中添加 `--heap_size=1024` 参数,指定堆大小为 1024 字节。具体操作方法如下: - 选择 Project -> Options for Target。 - 在弹出的对话框中选择 C/C++ 标签页。 - 在右侧的预处理器选项中添加宏定义 `__HEAP_SIZE=1024`。 5. 将 startup.c 文件添加到 Keil 项目中,并编译、烧录程序到目标设备中。 通过以上步骤,你就可以在 Keil 中调用标准 C 库中的 malloc 函数进行动态内存分配了。在代码中使用 malloc 函数时,需要注意分配的内存大小不能超过堆的大小,否则会导致堆内存溢出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值