搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 2011-3-10 15:56:50 | 显示全部楼层 |阅读模式
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的中断函数处设了个断点,但是程序根本运行不到断点处,感觉还是软中断的问题吧????大家有没有碰到过这种情况呢???怎么解决呢???

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-3-10 16:10:17 | 显示全部楼层
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邮箱没有发送到的原因呢??

出0入0汤圆

发表于 2011-3-10 18:20:02 | 显示全部楼层
估计程序有问题 运行不起来   有Post 有Pend 的

出0入0汤圆

 楼主| 发表于 2011-3-10 18:41:29 | 显示全部楼层
谢谢楼上,可不可以说个大概是哪个地方错了呢??

出0入0汤圆

 楼主| 发表于 2011-3-10 19:16:59 | 显示全部楼层
串口中断应该是硬件中断,但是为什么会停在软中断处呢?!

出0入0汤圆

 楼主| 发表于 2011-3-10 20:01:50 | 显示全部楼层
既然停在软中断处,不知道是不是各个任务之间切换不正确有矛盾?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 23:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表