Init_Flash();//这个初始化是 寄存器使用前的初始化//------------------------------------测试代码// test();//测试IPC通信功能 //test_Flash(); // //if((*p)==0x5511) //{ // //MailBoxTenSend(5,5,5,5); //} //else //{ //MailBoxTenSend(2,2,2,2); // //} // //DELAY_US(1000*1000); //MailBoxTenSend(0,0,0,0); // ////擦除 // //flashstatu = Flash_Erase(SECTORK); //if(flashstatu == Fapi_Status_Success ) //{ //MailBoxTenSend(3,3,3,3); //} //else //{ // //MailBoxTenSend(4,4,4,4); //}//------------------------------------测试代码for(;;){MailBoxTenSend(5,3,1,2);//CANMessageSet(CANA_BASE, 1, &sTXCANMessage, MSG_OBJ_TYPE_TX);// Now wait 1 second before continuingDELAY_US(1000*1000);// Increment the value in the transmitted message data.(*(unsigned long *)ucTXMsgData)++;
}
1、中间屏蔽的那一段是我关于flash的读写及擦除操作,如果屏蔽这段,debug调试时,点击CPUReset,再执行run,能够正常执行;
2、如果不屏蔽,则CPU Reset后,再执行run,程序进入NMI_ISR,不可屏蔽中断,程序不能正常执行;
3、 test_Flash();函数是在页SECTORK里面写入0x5511,下面进行擦除;
4、另外一个异常现象是: test_Flash();执行完后,然后打印MailBoxTenSend(5,5,5,5); 在MailBoxTenSend(0,0,0,0);处打断点,查看SECTORK内容的确是0x5511;全速执行(中间有一段擦除操作)打印MailBoxTenSend(3,3,3,3)(表示擦除成功);直到for循环,在 MailBoxTenSend(5,3,1,2);打断点,查看SECTORK内容任然是0x5511;
5、如果中间不打断点,直接运行到for循环处,顺序打印MailBoxTenSend(5,5,5,5),MailBoxTenSend(3,3,3,3)(第4点也是顺序打印这两个),在for内部断点处,查看SECTORK内容是0xffff(代表擦除成功);
6、综上所有异常的现象都和flash的操作有关联, test_Flash();Flash_Erase(SECTORK);都在会搬到ram运行;
7、另外我发现凡是搬到ram运行的代码都不能打断点,有哪个资料有详细讲这块内容?
Jordan Zhou:Flash初始化代码必须放到RAM中执行,否则就出现NMI_ISR。
Init_Flash();//这个初始化是 寄存器使用前的初始化//------------------------------------测试代码// test();//测试IPC通信功能 //test_Flash(); // //if((*p)==0x5511) //{ // //MailBoxTenSend(5,5,5,5); //} //else //{ //MailBoxTenSend(2,2,2,2); // //} // //DELAY_US(1000*1000); //MailBoxTenSend(0,0,0,0); // ////擦除 // //flashstatu = Flash_Erase(SECTORK); //if(flashstatu == Fapi_Status_Success ) //{ //MailBoxTenSend(3,3,3,3); //} //else //{ // //MailBoxTenSend(4,4,4,4); //}//------------------------------------测试代码for(;;){MailBoxTenSend(5,3,1,2);//CANMessageSet(CANA_BASE, 1, &sTXCANMessage, MSG_OBJ_TYPE_TX);// Now wait 1 second before continuingDELAY_US(1000*1000);// Increment the value in the transmitted message data.(*(unsigned long *)ucTXMsgData)++;
}
1、中间屏蔽的那一段是我关于flash的读写及擦除操作,如果屏蔽这段,debug调试时,点击CPUReset,再执行run,能够正常执行;
2、如果不屏蔽,则CPU Reset后,再执行run,程序进入NMI_ISR,不可屏蔽中断,程序不能正常执行;
3、 test_Flash();函数是在页SECTORK里面写入0x5511,下面进行擦除;
4、另外一个异常现象是: test_Flash();执行完后,然后打印MailBoxTenSend(5,5,5,5); 在MailBoxTenSend(0,0,0,0);处打断点,查看SECTORK内容的确是0x5511;全速执行(中间有一段擦除操作)打印MailBoxTenSend(3,3,3,3)(表示擦除成功);直到for循环,在 MailBoxTenSend(5,3,1,2);打断点,查看SECTORK内容任然是0x5511;
5、如果中间不打断点,直接运行到for循环处,顺序打印MailBoxTenSend(5,5,5,5),MailBoxTenSend(3,3,3,3)(第4点也是顺序打印这两个),在for内部断点处,查看SECTORK内容是0xffff(代表擦除成功);
6、综上所有异常的现象都和flash的操作有关联, test_Flash();Flash_Erase(SECTORK);都在会搬到ram运行;
7、另外我发现凡是搬到ram运行的代码都不能打断点,有哪个资料有详细讲这块内容?
weiping wang:
回复 Seven Han:
给你点一万个赞