TI中文支持网
TI专业的中文技术问题搜集分享网站

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 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:

给你点一万个赞

赞(0)
未经允许不得转载:TI中文支持网 » 28377D debug调试时,然后点击CPU Reset,再执行run,CPU不能正常执行,进入NMI_ISR
分享到: 更多 (0)

登录

注册