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 continuing
DELAY_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运行的代码都不能打断点,有哪个资料有详细讲这块内容?