zxl
zxl
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2004-11-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1131回复:1

请教高手:主程序中:把断点打在 while( TRUE ) 之前,却始终停不住,也就是到不了这里,什么原因?

楼主#
更多 发布于:2002-10-30 11:19
我用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 )之前,即初始化阶段稍微详细一点的流程吗?
大致要调用那几个函数?怎样个顺序?

谢谢 高手指点!能推荐译一本书或某个电子文档,指明具体章节,我去仔细看,也非常感谢!
lh0512
驱动牛犊
驱动牛犊
  • 注册日期2002-11-01
  • 最后登录2002-11-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-01 23:55
你可以把断点放在中断程序的最后一条语句上
游客

返回顶部