打印

ADS程序全速运行后停在软中断处是什么原因呢?

[复制链接]
2115|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gushiyi|  楼主 | 2011-3-10 15:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM920T,准备调试GPRS程序,用的是串口2中断的办法,全速运行后在停止程序却停在软中断处
LDR     PC, ResetAddr
        LDR     PC, UndefinedAddr
        LDR     PC, SWI_Addr
        LDR     PC, PrefetchAddr
        LDR     PC, DataAbortAddr
        DCD     IRQ_Addr
        LDR     PC, IRQ_Addr
        LDR     PC, FIQ_Addr
即第三行处,这是什么原因呢????!还有就是我在串口2的中断函数处设了个断点,但是程序根本运行不到断点处,感觉还是软中断的问题吧????大家有没有碰到过这种情况呢???怎么解决呢???
 

相关帖子

沙发
gushiyi|  楼主 | 2011-3-10 16:11 | 只看该作者
236 void IRQ_uart2(void)
237 {
238    char *ptemp;
239    const char gprs_ok[6] ={0x0D,0x0A,0x4F,0x4B,0x0D,0x0A};//OK
240    const char gprs_error[9] = {0x0D,0x0A,0x45,0x52,0x52,0x4F,0x52,0x0D,0x0A};
241    OS_ENTER_CRITICAL();
242    //rINTMSK |= BIT_UART2;//MASK
243    rSUBSRCPND |= BIT_SUB_RXD2;//清除二级中断UART2->Rx2
244    rSRCPND    |= BIT_UART2;//清除中断请求
245    rINTPND    |= BIT_UART2;
246    OS_EXIT_CRITICAL();
247         
248    while(rUFSTAT2 & 0x000F)
249   {
250      ptemp = &UART_ReceiveBuff[0] + uart2_recv_num;
251      if(uart2_recv_num >= UART_BUFFSIZE)
252      {  //uart2_recv_num = 0;
253        UART_Int_Close();//退出中断,缓冲区满
254        return;
255        }
256  *ptemp = rURXH2; ?
257  uart2_recv_num++; ?
258     
259  //ptemp = UART_ReceiveBuff + uart2_recv_num; ?
260  //temp = (char)memcmp(&UART_ReceiveBuff[0] + (uart2_recv_num - 6),&gprs_ok[0],6);   
261  //UART_ReceiveBuff[UART_BUFFSIZE - uart2_recv_num] = temp;  ?
262  //if(memcmp(&UART_ReceiveBuff[0] + (uart2_recv_num - 6),"\0x0D\0x0A\0x4F\0x4B\0x0D\0x0A",6)==0)   
263 //*(ptemp + UART_BUFFSIZE/2) = (char) memcmp(ptemp - 5,&gprs_ok[0],6);   
264  if(memcmp(ptemp - 5,&gprs_ok[0],6)==0)   
265  { ?
266    UART_Int_Close();//退出中断,已收到有用信息   
267    OSMboxPost(Mbox_gprs_uart2,(void*)GPRS_UART_OK);   
268    return;   
269  }   
270  else //if(memcmp(&UART_ReceiveBuff[0] + (uart2_recv_num - 9),&gprs_error[0],9)==0)   
271  if(memcmp(ptemp - 8,&gprs_error[0],9)==0)   
272  {   
273    OSMboxPost(Mbox_gprs_uart2,(void*)GPRS_UART_ERR);   
274    UART_Int_Close();//退出中断,已收到有用信息   
275    return;   
276  }   
277      
278   }
279 }
这是串口2的中断函数,本来是puart = OSMboxPend(Mbox_gprs_uart2,0x2000,&err);但是PUART返回的总是超时,所以我想着是不是上面的Mbox_gprs_uart2邮箱没有发送到的原因呢??

使用特权

评论回复
板凳
gushiyi|  楼主 | 2011-3-10 19:17 | 只看该作者
串口中断应该是硬件中断,但是为什么会停在软中断处呢?!

使用特权

评论回复
地板
xinzha| | 2011-3-11 10:28 | 只看该作者
按照我的理解,要么是程序出问题有零指针之类的,要么是复位了。
PC指向哪里,实际真正执行的应该是PC - 8

使用特权

评论回复
5
gushiyi|  楼主 | 2011-3-11 19:53 | 只看该作者
谢谢楼上因为我看那个程序老是停在软中断的地方,后来又看了下,UCOSII是用软中断来切换任务的,有时候程序也停在空闲任务,参考了下网上说的,说是可能没开系统时钟,看了看自己的程序,貌似是有个时钟程序被我给注释掉了,//Start5mS();                // 起动定时计数。
我感觉应该是这个问题了,但是不知道是我人品问题还是怎么招,现在问题更严重了,液晶屏根本就显示不了界面了,换了块液晶屏还是显示不了……sigh ……但是按复位键后ADS程序还在运行的!!!我感觉按复位键后程序不是应该停止的吗?????为什么程序还在运行呢????

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

41

帖子

1

粉丝