首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

codewarrior使用请教!!!

codewarrior使用请教!!!

各位大虾,近来刚刚开始接触codewarrior,我编了一段小程序试试这个东东的用法。程序如下:#include /* for EnableInterrupts macro */ #include /* include peripheral declarations */ uchar test_data[17];//@ 0X0040; void main(void) { uchar a; uchar data[17]; EnableInterrupts; /* enable interrupts */ /* include your code here */ for(;;) { __RESET_WATCHDOG(); /* feeds the dog */ // a = *buffer; for(a = 0;a < 17; a++) { test_data[a] = a; } for(a = 0;a < 17; a++) { data[a] = test_data[a]; } for(a = 0;a < 17; a++) { test_data[a] = 0; } } /* loop forever */ /* please make sure that you never leave this function */ } 老是编译不成功,提示说: Link Error : L1102: Out of allocation space in segment RAM at address 0x111 Link Error : Link failed JB8不是有256的RAM吗,我什么我定义了几十个字节它就提示我空间溢出了。我用@ 0X0040强制定位后,编译能过,但是用它的软件仿真时无法对指定的RAM空间进行有效的赋值。不知为何,请各位指导?? 谢谢
局部变量并不分配固定的RAM的地址,而是放在堆栈中操作。你的堆栈大小是多少?
海纳百川  有容乃大
堆栈大小好像是0X30,但现在的问题是我定义的全局变量大了就出问题了。
看看你的PRM文件?
海纳百川  有容乃大
文档中是STACKSIZE 0x30
能否将整个project打包发过来看看?
海纳百川  有容乃大
我不知道如何发,请告知谢谢!
我不知道如何发,请告知谢谢!
可以发到这里:strongchen_free@yahoo.com.cn。
海纳百川  有容乃大
请各位多发表一下意见吗?????
最好将整个project打包发过来。不然只看部分程序,很难发现问题到底在哪。
海纳百川  有容乃大
我已经给您发过去了,我等下再给您发一次。请查收!
我已经看过你的程序了。编译并没有通过,原因是地址重叠。

因为堆栈大小是0x30,放在非零页,地址为0x110~0x13F;你再定义一个大小为17的数组,放在Default RAM,则地址为0x100~0x110,刚好二者在地址0x110处重叠。

如果你一定要一个17字节的数组,有2个办法:

1. 将堆栈减小;
2. 将数组放在零页RAM中。
海纳百川  有容乃大
我将这个数组放在零也时,软件仿真时无法将数据正确的赋值到相应的位置。我是通过看ram空间的变化得到的结果
数组是放在零页还是非零页应该是没有任何区别的,只是地址不同而已。

或者将你的调试过程截个图发给我看看?
海纳百川  有容乃大
返回列表