innovision 发表于 2019-1-3 22:11:38

求助:MC9S08AW60,malloc提示RAM不够用的问题

首次使用这个IC跟开发环境,很不熟悉。找不到解决办法,寻求帮助

开发环境是CodeWarrior 11
芯片:MC9S08AW60
问题描述:
在项目中使用malloc(10),申请一个动态内存,提示没有足够的RAM可以使用。去掉malloc,编译正常通过。
错误信息如下:

ERROR L1102: Out of allocation space in segment RAM at address 0x181

问题分析:
1、此IC总共有2K的RAM,项目中使用的变量数量并不大
2、ProcesorExprert.prm文件如下:
NAMES

END

SECTIONS
    Z_RAM                  =READ_WRITE   0x0070 TO 0x008F;
    RAM                      =READ_WRITE   0x0090 TO 0x086F;
    ROM                      =READ_ONLY    0x1860 TO 0xFFAF;
END

PLACEMENT
    DEFAULT_RAM,                        /* non-zero page variables */
                                        INTORAM;

    DEFAULT_ROM, ROM_VAR, STRINGS       INTOROM;
    _DATA_ZEROPAGE,                     /* zero page variables */
    MY_ZEROPAGE                         INTOZ_RAM;
END

INIT _EntryPoint                     /* The entry point of the application. This function is generated into the CPU module. */

STACKSIZE 0x0080                     /* Size of the system stack. Value can be changed on the "Build options" tab */

因此,应该不是真的RAM不够使用。而是,没有正确分配heap大小造成的。
查NXP的论坛里面,有提到要修改libdefs.h中的
#define LIBDEF_HEAPSIZE 2000                 大小,并重新编译生成"ansiis.lib"。但是,没有找到如何重新编译生成"ansiis.lib"的方法

望有了解的朋友帮个忙,谢谢

sbusr 发表于 2019-1-3 22:40:45

heap多大?单片机不要用malloc

1a2b3c 发表于 2019-1-3 22:43:51

一共才2k的ram还搞个malloc,曲折点变成全局变量也好过这个吧?不懂c,乱说的:)

innovision 发表于 2019-1-3 22:52:01

由于程序是从其它单片机移植过来的,之前的程序中,大量使用了malloc

MCU的RAM是2K的,我之前用的MCU是51核的,用了512byte作为heap

innovision 发表于 2019-1-3 22:56:25

找到方法了,在CodeWarrior中,用Import project,导入 “C:\Freescale\CW MCU v11.0\MCU\lib\hc08c\lib_eclipse”里面的工程,然后修改lidbdefs.h中的heap大小,重新编译后,可以得到新的“ansiis.lib”

再把原工程编译一下,即可

youkebing 发表于 2019-1-4 15:22:18

2k的ram,还用malloc,好厉害,我不懂c,瞎说的

anxiangbo 发表于 2019-3-15 21:51:42

换IAR试试
页: [1]
查看完整版本: 求助:MC9S08AW60,malloc提示RAM不够用的问题