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