- UID
- 344684
- 性别
- 男
|
目前本人正在使用9s08gt32,使用到片上用程序来修改存放在FLASH中的数据
我已按照PDF资料上的流程编写了FLASH的页擦除及烧写程序,
但用调试器进行调试时发现,只有单步运行时FLASH的擦除及烧写正常,而自动运行时则失败,且片子会跑飞导致看门狗复位.
请问为什么会发生这种情况,如何才能正确的修改FLASH
希望有高手可以指点迷津,在下感激不尽
附程序:
void FlashDO (byte aaa)
{
FCMD = aaa;//指令输入,0x40为页擦除,0x20为字节烧写
FSTAT = 0x80;//开始执行指令
asm{
nop
nop
nop
nop
}
if(FSTAT_FPVIOL||FSTAT_FACCERR==1){
Sys_Error|=0x01;//烧写故障,记标记
} else{
while(FSTAT_FCCF==0){}//等待完成
}
}
void write_data (void)
{
byte *Flash_ptr; // Flash pointer
word i;
byte databuffer[20];
Flash_ptr = (byte *) 0xd000; //指针指向数据在FLASH中的地址
for(i = 0; i < 20; i++)
{
databuffer = 0; //数据缓存初始化,测试时全为0
}
//__RESET_WATCHDOG(); /* feeds the dog */
Sys_Error&=~0x01; //清故障标记
if(FSTAT_FACCERR==1) {
FSTAT_FACCERR=1; //若有错误,先清除
}
//FCDIV=0x89; //设置频率
*(Flash_ptr)=0; //写FLASH
FlashDO(0x40); //擦除该FLASH页指令
for (i = 0; i < 20; i++){
//__RESET_WATCHDOG(); /* feeds the dog */
if(FSTAT_FACCERR==1) {
FSTAT_FACCERR=1; //若有错误,先清除
}
//FCDIV=0x89; //设置频率
*(Flash_ptr + i) = *(databuffer + i); //写FLASH
FlashDO(0x20); //字节烧写FLASH指令
}
}
|
|