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

擦写Flash时程序跑飞

擦写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格式也解决不了,还请高手指点。

将堆栈设置的大一些试试
如果程序本来在0x38页中执行,你强行将PPAGE寄存器改为0x39,当然可能会使程序跑飞。
海纳百川  有容乃大
毫无疑问,在、你这段擦除程序肯定会使程序跑飞的,这样实现擦除的方式是不行,还会导致死机。
最好的方法是将改变PPAGE的语句也放入RAM中执行,这样就不会出现跑飞的问题了,最好的办法是将整段擦出C语言数拷贝到RAM中运行,我做BOOTLOADER程序时就是这样做的。
呵呵 我已经试了机器码
可以擦出另一页
请问BOOTLOADER是什么意思?
能简介下吗?
5# xmkehua
进入擦除程序前先保存PPAGE,程序结束后在恢复PPAGE
返回列表