...
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.eccn.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编辑过]
作者: kaxinuo 时间: 2008-1-9 11:26
我想使用addr=(byte*)malloc(2);建立一个数据缓冲区,我只在main()中这么写,这样建立的缓冲区在什么地方啊?
如果我想把其放到RAM中的一个区域,怎么写啊??
芯片是:MC68HC908AZ60A
作者: kaxinuo 时间: 2008-1-9 16:00
真噪人:我装了HC08 V6.0 和 HC12 V4.6 在CW08 6.0\lib\hc08_lib.mcp 打开后,Target Settings Panels->Target Settings->Linker 选项中没有Libmaker for HC08 ,全是hc12 的。。。怎么改啊???急!!!
作者: strongchen 时间: 2008-1-10 14:09
应该不会呵,你把它们装在一个目录下了?
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |