阅读:1140回复:1
请教高手:主程序中:把断点打在 while( TRUE ) 之前,却始终停不住,也就是到不了这里,什么原因?
我用EAsyPack仿真器
我在主程序中,只要一走到:总中断开放:EA = 1; 就立刻进入: void fn_usb_isr() { unsigned int i_st; bEPPflags.bits.in_isr = 1; /*读中断寄存器可以得到中断产生的原因*/ i_st = D12_ReadInterruptRegister(); if(i_st != 0) { /*总线复位中断*/ if(i_st & D12_INT_BUSRESET) { bus_reset(); bEPPflags.bits.bus_reset = 1; } /*DMA操作结束中断*/ if(i_st & D12_INT_EOT) dma_eot(); /*当PDIUSBD12没有收到3个SOF时将会进入挂起状态并将挂起改变位置位*/ if(i_st & D12_INT_SUSPENDCHANGE) bEPPflags.bits.suspend = 1; if(i_st & D12_INT_ENDP0IN) ep0_txdone(); if(i_st & D12_INT_ENDP0OUT) ep0_rxdone(); if(i_st & D12_INT_ENDP1IN) ep1_txdone(); if(i_st & D12_INT_ENDP1OUT) ep1_rxdone(); if(i_st & D12_INT_ENDP2IN) main_txdone(); if(i_st & D12_INT_ENDP2OUT) main_rxdone(); } bEPPflags.bits.in_isr = 0; } 此时 i_st=0x4343 即1000 0011 1000 0011,按照对应解释就进入了: (1)/*总线复位中断*/ (2)ep0_txdone(); (3)ep0_rxdone(); 实际单步执行也是这样, 但在主程序中:把断点打在 while( TRUE ) 之前,却始终停不住,也就是到不了这里。 为了确保那是个实际存在的断点,我特意在那里放了个: i++; i++; i-- while( TRUE ) 请问,您知道这是什么原因吗? 您能帮我解释一下,主程序在执行到while( TRUE )之前,即初始化阶段稍微详细一点的流程吗? 大致要调用那几个函数?怎样个顺序? 谢谢 高手指点!能推荐译一本书或某个电子文档,指明具体章节,我去仔细看,也非常感谢! |
|
沙发#
发布于:2002-11-01 23:55
你可以把断点放在中断程序的最后一条语句上
|
|