智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2764|回复: 4
打印 上一主题 下一主题

[摄像头] 解决default isr问题

[复制链接]

8

主题

98

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1722
威望
886
贡献
566
兑换币
153
注册时间
2012-3-12
在线时间
135 小时
跳转到指定楼层
1#
发表于 2013-3-12 23:16:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天遇到一个纠结的问题,程序进入到黑线提取程序时还是可以的,但是当图像发生大的变化时,程序就卡在了某一个地方通过在线调试,它卡在default isr:0X4acc的位置,一是很郁闷,但是没有卡在那一句程序上,所以单步调试找不住原因,希望哪位同仁能帮到忙。
黑线提取程序:
void Black_select()
{
  s8   pre_left_point  ;
  s8   Left_point;
  s8   pre_right_point ;
  s8   Right_point;
  u8   i;
  u8   j;
  u8   k = 0;
  u8   l = 0;
  u8   Flag_solve = 0;
  //u8   first_left[start_check_lie-end_check_lie]  ;
  //u8   first_right[start_check_lie-end_check_lie] ;
  u8   left_find[80]   ;
  u8   right_find[80]  ;
  u8   max           ;
// u8   left_mis   = 0;  
// u8   right_mis  = 0;

/*****************************************************************寻找引导线的起点*****************************************************************************/
  for(i=start_check_lie;i>end_check_lie;i--)
  {
   for(j=0;j<=79;j++)
                {      
                        if((road_img1[i][j]||road_img1[i][j+1]||road_img1[i][j+2]||road_img1[i][j+3]==1)&&(road_img1[i][j-1]&&road_img1[i][j-2]&&road_img1[i][j-3]&&road_img1[i][j-4]==0))
                        {      
                                Left_point=j;                               
                               
                                Flag_solve++;
                        }
                }
                 if(Flag_solve==0)
                {  
                   Left_point = pre_left_point;
                   pre_left_point = pre_left_point;
                   border_line[i][left_border] = 0;
                   ///left_mis = 1;               
                }
                if(Flag_solve>0)
                {
                Flag_solve = 0;
                left_find[k++]=Left_point;

                }




                   for(j=79;j>0;j--)
                {
                        if((road_img1[i][j]&&road_img1[i][j+1]&&road_img1[i][j+2]&&road_img1[i][j+3]==0)&&(road_img1[i][j-1]||road_img1[i][j-2]||road_img1[i][j-3]==1)) ///||road_img1[i][j-4]
                        {
                                Right_point=j;
                               
                                Flag_solve++;
                        }

                }
            if(Flag_solve==0)
                {
                   Right_point = pre_right_point;
                   pre_right_point = pre_right_point;
                   border_line[i][right_border] = 79;
                 //  right_mis = 1;               
                }
                if(Flag_solve>0)
                {
                Flag_solve = 0;
              //  pre_right_point=Right_point;
                right_find[l++]=Right_point;
                }

   if(k&&l>0)
   {
     while(right_find[l]<left_find[k])
     {
       max = (k>l)? 1 : 0;
       if(max==1)
       {
       k--;
       }
       if(max==0)
       {
       l--;
       }

     }
       pre_right_point = right_find[l];
       pre_left_point  = left_find[k] ;
       border_line[i][right_border] = right_find[l];
       border_line[i][left_border]  = left_find[k] ;

   }
   else
   {
     if((k==0)&&(l>0))
     {
     pre_right_point = right_find[l];
     border_line[i][right_border] = right_find[l];
     }
     if((k>1)&&(l==0))
     {
     pre_left_point  = left_find[k] ;
     border_line[i][left_border]  = left_find[k] ;

     }


   }

  }




  /**********************************求中线从start_lie到end_lie*****************************************************************************/
  /**********************************求中线从start_lie到end_lie*****************************************************************************/
  for(i=start_lie; i>end_lie; i--)
        {
                ////////////////////////////////////////找左邊界點
                for(j=pre_left_point-3;j<=pre_left_point+10;j++)
                {      
                        if((road_img1[i][j]||road_img1[i][j+1]||road_img1[i][j+2]||road_img1[i][j+3]==1)&&(road_img1[i][j-1]&&road_img1[i][j-2]&&road_img1[i][j-3]&&road_img1[i][j-4]==0))
                        {      
                                Left_point=j;
                               
                                border_line[i][left_border]=j;
                                Flag_solve++;
                        }



                }
                if(Flag_solve==0)
                {
                   Left_point = pre_left_point;
                   pre_left_point = pre_left_point;
                   border_line[i][left_border] = 0;
               //    left_mis = 1;               
                }
                if(Flag_solve>0)
                {
                Flag_solve = 0;
                pre_left_point=Left_point;
                }

                ////////////////////////////////////////找右邊界點
                for(j=pre_right_point+3;j>=pre_right_point-10;j--)
                {
                        if((road_img1[i][j]&&road_img1[i][j+1]&&road_img1[i][j+2]&&road_img1[i][j+3]==0)&&(road_img1[i][j-1]||road_img1[i][j-2]||road_img1[i][j-3]==1)) ///||road_img1[i][j-4]
                        {
                                Right_point=j;
                                border_line[i][right_border]=j;
                                Flag_solve++;
                        }

                }
            if(Flag_solve==0)
                {
                   Right_point = pre_right_point;
                   pre_right_point = pre_right_point;
                   border_line[i][right_border] = 79;
                 //  right_mis = 1;               
                }
                if(Flag_solve>0)
                {
                Flag_solve = 0;
                pre_right_point=Right_point;
                }               

                border_line[i][mid_border]=Left_point/2+Right_point/2;


        }


}

3

主题

55

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1773
威望
945
贡献
544
兑换币
456
注册时间
2012-5-4
在线时间
142 小时
2#
发表于 2013-3-13 00:40:10 | 只看该作者
这么长程序谁看啊,看看是不是哪个符号打错了,我调了一个月bug发现全是打错了符号。还会进入default isr
回复 支持 反对

使用道具 举报

59

主题

1029

帖子

0

精华

版主

有什么需帮助的?

Rank: 9Rank: 9Rank: 9

积分
15163

热心会员奖章论坛元老奖章优秀会员奖章在线王奖章

威望
11088
贡献
1415
兑换币
1728
注册时间
2011-12-18
在线时间
1330 小时
3#
发表于 2013-3-13 08:48:56 | 只看该作者
程序实在太长了,没全看。但是进入default_isr的原因有一下几种情况:
数组下标溢出,也就是使用超出了数组范围的索引
模块时钟未使能就使用模块寄存器
使用了非法的Flash地址
没有定义中断服务子程序

如有不全欢迎补充,LZ的问题如果单步调试不行,建议你在可能出问题的地方使用串口输出特定字符进行查找。
回复 支持 反对

使用道具 举报

8

主题

98

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1722
威望
886
贡献
566
兑换币
153
注册时间
2012-3-12
在线时间
135 小时
4#
 楼主| 发表于 2013-3-18 00:15:34 | 只看该作者
恩,谢谢拉普兰德大哥了,我尝试着改了一下,for循环中的写法,“--”改为“++”,问题居然神奇的解决了,估么着是原来的写法,和某些东西冲突了…
回复 支持 反对

使用道具 举报

8

主题

98

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1722
威望
886
贡献
566
兑换币
153
注册时间
2012-3-12
在线时间
135 小时
5#
 楼主| 发表于 2013-3-18 00:16:25 | 只看该作者
HEYsir 发表于 2013-3-13 00:40
这么长程序谁看啊,看看是不是哪个符号打错了,我调了一个月bug发现全是打错了符号。还会进入default isr

恩,改了写法,效果好了点,感觉是和之前写的某些东西冲突了,现在解决了~~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 06:58 , Processed in 0.047702 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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