Board logo

标题: 擦写Flash时程序跑飞 [打印本页]

作者: Forest_Can    时间: 2009-8-21 10:05     标题: 擦写Flash时程序跑飞

void Flash_Erase_Sector(U16 addr)
{
FSTAT&=0xCB;
/*PPAGE=0x38;*/ //执行起来不出问题
PPAGE=0x39;//执行这句后程序就会跑飞
*(U16*)addr=0xFFFF;
FCMD = 0x40;
asm("JSR RAM_MachineCode");
}

程序下载到了$38页,擦写$38页,没有问题。
但要擦写0x39页,改写PPAGE,程序就跑飞了。
程序指针就回调到0x39页去。
这个问题困扰我好几天了。
把.S19文件设置为S2格式也解决不了,还请高手指点。


作者: hgh169    时间: 2009-9-16 20:45

将堆栈设置的大一些试试
作者: strongchen    时间: 2009-9-17 13:46

如果程序本来在0x38页中执行,你强行将PPAGE寄存器改为0x39,当然可能会使程序跑飞。
作者: xmkehua    时间: 2009-9-19 11:15

毫无疑问,在、你这段擦除程序肯定会使程序跑飞的,这样实现擦除的方式是不行,还会导致死机。
作者: xmkehua    时间: 2009-9-19 11:20

最好的方法是将改变PPAGE的语句也放入RAM中执行,这样就不会出现跑飞的问题了,最好的办法是将整段擦出C语言数拷贝到RAM中运行,我做BOOTLOADER程序时就是这样做的。
作者: Forest_Can    时间: 2009-9-19 16:26

呵呵 我已经试了机器码
可以擦出另一页
作者: Forest_Can    时间: 2009-10-10 20:25

请问BOOTLOADER是什么意思?
能简介下吗?
5# xmkehua
作者: 石头2010    时间: 2010-9-16 15:32

进入擦除程序前先保存PPAGE,程序结束后在恢复PPAGE
作者: 舞秋风    时间: 2011-11-3 20:29






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0