标题:
codewarrior使用请教!!!
[打印本页]
作者:
meimeicookie
时间:
2005-9-22 10:18
标题:
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空间进行有效的赋值。不知为何,请各位指导?? 谢谢
作者:
strongchen
时间:
2005-9-22 10:42
局部变量并不分配固定的RAM的地址,而是放在堆栈中操作。你的堆栈大小是多少?
作者:
meimeicookie
时间:
2005-9-22 10:59
堆栈大小好像是0X30,但现在的问题是我定义的全局变量大了就出问题了。
作者:
strongchen
时间:
2005-9-22 11:04
看看你的PRM文件?
作者:
meimeicookie
时间:
2005-9-22 11:12
文档中是STACKSIZE 0x30
作者:
strongchen
时间:
2005-9-22 11:15
能否将整个project打包发过来看看?
作者:
meimeicookie
时间:
2005-9-22 11:17
我不知道如何发,请告知谢谢!
作者:
meimeicookie
时间:
2005-9-22 11:17
我不知道如何发,请告知谢谢!
作者:
strongchen
时间:
2005-9-22 14:46
可以发到这里:strongchen_free@yahoo.com.cn。
作者:
meimeicookie
时间:
2005-9-23 10:32
请各位多发表一下意见吗?????
作者:
strongchen
时间:
2005-9-23 11:04
最好将整个project打包发过来。不然只看部分程序,很难发现问题到底在哪。
作者:
meimeicookie
时间:
2005-9-23 12:08
我已经给您发过去了,我等下再给您发一次。请查收!
作者:
strongchen
时间:
2005-9-23 14:50
我已经看过你的程序了。编译并没有通过,原因是地址重叠。
因为堆栈大小是0x30,放在非零页,地址为0x110~0x13F;你再定义一个大小为17的数组,放在Default RAM,则地址为0x100~0x110,刚好二者在地址0x110处重叠。
如果你一定要一个17字节的数组,有2个办法:
1. 将堆栈减小;
2. 将数组放在零页RAM中。
作者:
meimeicookie
时间:
2005-9-23 15:52
我将这个数组放在零也时,软件仿真时无法将数据正确的赋值到相应的位置。我是通过看ram空间的变化得到的结果
作者:
strongchen
时间:
2005-9-26 10:32
数组是放在零页还是非零页应该是没有任何区别的,只是地址不同而已。
或者将你的调试过程截个图发给我看看?
作者:
meimeicookie
时间:
2005-9-26 11:42
截图已经发往您的邮箱strongchen_free@yahoo.com.cn
作者:
strongchen
时间:
2005-9-27 15:22
我用CodeWarrior的软件仿真测试了一下你的程序,并没有看到你的截图中显示的现象。请参看我发给你的截图。
第一张图是运行第一个for循环的情况。你可以在Data:1窗口中看到test_data的地址为40,而且可以在memory窗口中看到对它的赋值都是正确的。
第二张图是运行第二个for循环的情况。你可以在Data:2窗口中看到test_data的地址为11F,而且可以在memory窗口中看到对它的赋值也是正确的。
我不太清楚你的问题是如何出现的。你用的是3.1版的CodeWarrior吗?可以试试重新安装一遍。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0