This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28377D debug调试时,然后点击CPU Reset,再执行run,CPU不能正常执行,进入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 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运行的代码都不能打断点,有哪个资料有详细讲这块内容?