Board logo

标题: [求助]有在HC08上成功使用动态分配存储空间库函数的吗(已解决) [打印本页]

作者: strongchen    时间: 2006-8-18 14:24

不知道CW是否支持。可以写信到cw_support@freescale.com问一下。
作者: woowi    时间: 2006-8-18 14:38

CW提供了库 stdlib.h 帮助中对malloc(), calloc(), realloc(), free()做了简单的调用说明,应该是支持的,这是C编译器通用的库
作者: strongchen    时间: 2006-8-18 15:00

能否把你的PROJECT贴上来看看。
作者: woowi    时间: 2006-8-18 16:49

#include <stdlib.h>
...
byte * addr;
...
addr=(byte*)malloc(1);
...
free((void*)addr);

[此贴子已经被作者于2006-8-18 16:49:11编辑过]


作者: seuafu2005    时间: 2006-8-21 09:50

我这里编译运行都通过的
是不是你RAM分配哪里有重叠了?
作者: woowi    时间: 2006-8-21 10:00

楼上是不是说,RAM中是否要给heap单独分配一块在prm文件中说明
作者: seuafu2005    时间: 2006-8-21 10:49

重新试了一下,我在S08系列的单片机上可以,HC08系列的的确编译没有通过,和楼主一样出现了error。
不知道为什么CW对两个系列的编译有不同,楼主可以试着发mail去问问。
作者: strongchen    时间: 2006-8-23 10:04

产生这个问题的原因找到了。主要是因为在库文件ansii.lib中,heap的大小缺省定义为2000,超出了HC08的RAM范围。用户可以自己去改变库文件中的heap大小。方法是,打开..\CW08 V5.0\lib\hc08c目录下的项目文件hc08_lib.mcp,将其target选为“C no float”,然后打开..\CW08 V5.0\lib\hc08c\include目录下的头文件libdefs.h,将LIBDEF_HEAPSIZE的定义由2000改为一个你需要的值,然后编译即可。
作者: strongchen    时间: 2006-8-23 10:06

也可以参考此文档:
http://bbs.chinaecnet.com/uploadImages/tn105.zip
作者: woowi    时间: 2006-9-6 20:27     标题: [求助]有在HC08上成功使用动态分配存储空间库函数的吗(已解决)

CW5.0环境下,在使用malloc()时,

连接出错1102: Out of allocation space in segment RAM at address 0x120

free()也使用了,以释放空间,1个字节的空间都分配不了

[此贴子已经被作者于2006-8-18 14:11:43编辑过]

[此贴子已经被作者于2006-9-6 20:27:04编辑过]


作者: woowi    时间: 2006-9-6 21:20

多谢了,回头试试

回顾:

打开(安装目录)\lib\hc08c\include目录下的头文件libdefs.h,将LIBDEF_HEAPSIZE的定义由2000改为合适的值(视cup而定,文件中提示必须是4的倍数),例如256

然后找到开始菜单Codewarrir HCS08项(例如CW08 V5.0)->M68HC08 Libraries启动(安装目录)\lib\hc08c目录下的hc08_lib.mcp项目

我用的Target是默认的all Libraries(这样全部lib对HC08都有适用性),然后把Target Settings Panels->Target Settings->Linker由None改为Libmaker for HC08

最后用Make重新生成lib

在你的应用程序里再去使用动态分配内存库函数就OK了!

[此贴子已经被作者于2006-9-6 21:20:22编辑过]






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0