求助: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"的方法
望有了解的朋友帮个忙,谢谢 heap多大?单片机不要用malloc 一共才2k的ram还搞个malloc,曲折点变成全局变量也好过这个吧?不懂c,乱说的:) 由于程序是从其它单片机移植过来的,之前的程序中,大量使用了malloc
MCU的RAM是2K的,我之前用的MCU是51核的,用了512byte作为heap
找到方法了,在CodeWarrior中,用Import project,导入 “C:\Freescale\CW MCU v11.0\MCU\lib\hc08c\lib_eclipse”里面的工程,然后修改lidbdefs.h中的heap大小,重新编译后,可以得到新的“ansiis.lib”
再把原工程编译一下,即可 2k的ram,还用malloc,好厉害,我不懂c,瞎说的 换IAR试试
页:
[1]