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

[求助]请教——关于HCS08的堆栈问题

[求助]请教——关于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”


搞了几天了都没找出原因,郁闷了。


请大家指点一下啊


谢谢斑竹

我的堆栈本来设置为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编辑过]

用了,是MC9SQG4.h里的

extern volatile PTAPESTR _PTAPE @0x00001840

那和OX1804有什么关系吗
谢谢斑竹了

是有这个操作。
那是PA口上拉使能的寄存器,DATA SHEET上说是可以读写的啊。
而且刚才我把对那寄存器的操作删除了,还是会报那样的错误的。

还要请教斑竹一个问题————应该把那个错误提示信息中提到的地址的后两个数对换位置来读的吗?
我也觉得应该是别的问题,但还没找出来。

我现在只是暂时设置了一个合适的堆栈————就是大小够用,又不用到从0XF0到0XFF的空间。
但根本的原因还是没找到,心里是虚的。

我把我的project传上来了,麻烦斑竹帮我看看,多谢了
看来没传上来

不是直接上传就行吗

我明天再试试
看来没传上来

不是直接上传就行吗

我明天再试试

 

这次终于传上来了。麻烦斑竹帮我看看,多谢了

[此贴子已经被作者于2006-11-1 12:34:10编辑过]

[此贴子已经被作者于2006-11-1 16:55:36编辑过]

Strongchen版主,

由于文件不方便在网上公开贴出来,放在我给你的留言里了。

麻烦你看看。非常感谢!
好的

已经发了

老大你查收一下。
不好意思,贴附件是贴错了。

我一会重新发给你

还是发到油箱吧
呵呵,问题不辩不清啊,我们继续。。。
版主,我看了你回发给我的两个project。你的memory模式选的是small,我用的tiny模式,这个是编译后代码量不同的原因。。谢谢你帮我修改了config.h文件,我在里面定义了变量:)

另外我打开PE功能,只是想看看它的功能,并没有用到它生成的文件,我想应该不影响编译结果。版主说如果开启了PE,很多文件就不能自己随便创建了,如prm文件。但是我分别新建了两个工程,一个打开PE,但没用;另一个没有打开PE,都是用我修改后的prm文件。结果一样。。
呵呵,最后再次感谢版主对问题的跟踪与答复!
我试过了

只有在建project的时候选为small,编译后才会默认地把变量和堆栈放在0x0100以后的RAM空间。

如果是建project是选为tiny,后来在改为small,编译后变量和堆栈还是在Z_RAM的,和tiny一样的。
返回列表