标题: [求助]请教——关于HCS08的堆栈问题 [打印本页]
作者: chengsexinqing 时间: 2006-10-26 16:41 标题: [求助]请教——关于HCS08的堆栈问题
我用的是HCS08系列的QG4,一共是256字节的RAM(从0X60到0X015F)。
全局变量0X60到0XB6,从0X0100开始放了两个数组,堆栈放中间。
按理说中间从0XB7到0XFF有0X48个字节可用做堆栈,可设置堆栈大小时却最多只能到0XEF,否则仿真时就出错。而且是堆栈用到0XF0是,就会报“attemp to use invalid or uninitialized memory at location 0X00F3”
搞了几天了都没找出原因,郁闷了。
请大家指点一下啊
作者: strongchen 时间: 2006-10-27 10:04
你的堆栈大小设置为多少?看看MAP文件里的地址分配是怎样的。
作者: chengsexinqing 时间: 2006-10-27 15:02
谢谢斑竹
我的堆栈本来设置为0X30,但发现程序有跑飞的现象。
于是把堆栈设置为0X40,编译时都不会报错,仿真时就报错。试了一下。发现堆栈最多能设置为0X39。
查看MAP文件的地址分配,从0XB7到0XFF的空间确实是空的,应该能作为堆栈。
刚才又试了一下把堆栈设置成0X48(即从地址0XOOB7到地址0X00FE),这个时候的MAP文件里也像一切正常一样,把地址0XOOB7到地址0X00FE的空间分配给了堆栈。但仿真时其实报出错信息为“Attempt to write to a read-only location.——At location 1804”
[此贴子已经被作者于2006-10-27 15:02:55编辑过]
作者: strongchen 时间: 2006-10-27 15:41
你对地址0x1840进行操作了吗?
作者: chengsexinqing 时间: 2006-10-27 20:14
用了,是MC9SQG4.h里的
extern volatile PTAPESTR _PTAPE @0x00001840
那和OX1804有什么关系吗
作者: strongchen 时间: 2006-10-30 10:20
错误提示是你试图写0x1840这个地址。查查看你的程序中是否有这个操作。
作者: chengsexinqing 时间: 2006-10-30 14:17
谢谢斑竹了
是有这个操作。
那是PA口上拉使能的寄存器,DATA SHEET上说是可以读写的啊。
而且刚才我把对那寄存器的操作删除了,还是会报那样的错误的。
还要请教斑竹一个问题————应该把那个错误提示信息中提到的地址的后两个数对换位置来读的吗?
作者: strongchen 时间: 2006-10-31 10:12
应该是有别的什么问题。把你的project上传贴出来看看吧。
作者: chengsexinqing 时间: 2006-10-31 11:12
我也觉得应该是别的问题,但还没找出来。
我现在只是暂时设置了一个合适的堆栈————就是大小够用,又不用到从0XF0到0XFF的空间。
但根本的原因还是没找到,心里是虚的。
我把我的project传上来了,麻烦斑竹帮我看看,多谢了
作者: strongchen 时间: 2006-10-31 16:08
没有看到你上传的文件。
作者: chengsexinqing 时间: 2006-10-31 21:23
看来没传上来
不是直接上传就行吗
我明天再试试
作者: chengsexinqing 时间: 2006-10-31 21:26
看来没传上来
不是直接上传就行吗
我明天再试试
作者: chengsexinqing 时间: 2006-11-1 16:55
这次终于传上来了。麻烦斑竹帮我看看,多谢了
[此贴子已经被作者于2006-11-1 12:34:10编辑过]
[此贴子已经被作者于2006-11-1 16:55:36编辑过]
作者: chengsexinqing 时间: 2006-11-1 17:19
Strongchen版主,
由于文件不方便在网上公开贴出来,放在我给你的留言里了。
麻烦你看看。非常感谢!
作者: strongchen 时间: 2006-11-2 14:15
我没有看到。发到我的信箱吧:strongchen_free@yahoo.com.cn。
作者: chengsexinqing 时间: 2006-11-2 16:38
好的
已经发了
老大你查收一下。
作者: strongchen 时间: 2006-11-3 09:34
你的project里为什么没有mcp文件?看一下你的project的文件管理、路径是否有问题。应该把一个project的所有文件都放在同一个文件夹中。
作者: chengsexinqing 时间: 2006-11-3 09:46
不好意思,贴附件是贴错了。
我一会重新发给你
还是发到油箱吧
作者: strongchen 时间: 2006-11-3 16:07
我看过你的project了,好像有很多问题。我重新创建了一个QG4的project,把你的源文件和prm文件拷进去。编译后可以看到,你的程序代码已经超过了4K。我又用QG8做了一个project,这时你的源程序就能编译通过而且正常运行了。我把这两个project都发给你参考。
作者: strongchen 时间: 2006-11-3 16:40
另外,既然你没有用PE生成代码,在创建project的时候就不要开启PE功能。如果开启了PE,很多文件就不能自己随便创建了,如PRM文件。
作者: chengsexinqing 时间: 2006-11-4 11:33
呵呵,问题不辩不清啊,我们继续。。。
版主,我看了你回发给我的两个project。你的memory模式选的是small,我用的tiny模式,这个是编译后代码量不同的原因。。谢谢你帮我修改了config.h文件,我在里面定义了变量:)
另外我打开PE功能,只是想看看它的功能,并没有用到它生成的文件,我想应该不影响编译结果。版主说如果开启了PE,很多文件就不能自己随便创建了,如prm文件。但是我分别新建了两个工程,一个打开PE,但没用;另一个没有打开PE,都是用我修改后的prm文件。结果一样。。
呵呵,最后再次感谢版主对问题的跟踪与答复!
作者: tiemaliu 时间: 2006-11-4 11:58
我很想知道tiny与small的区别。按字面理解,tiny应该是把默认变量放入Z_RAM区,small应该放入非Z_RAM区。但是编译后,查看map文件,两者变量默认的还是都放入了Z_RAM区。
作者: JerryBJ 时间: 2006-11-5 09:29
Tiny: 默认的变量放在Z_RAM区,栈也放在Z_RAM区;
Small:默认变量和栈都放在0x0100地址以上的RAM,除非用#pragma另行指定。
作者: chengsexinqing 时间: 2006-11-7 21:58
我试过了
只有在建project的时候选为small,编译后才会默认地把变量和堆栈放在0x0100以后的RAM空间。
如果是建project是选为tiny,后来在改为small,编译后变量和堆栈还是在Z_RAM的,和tiny一样的。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |