注册会员
- 积分
- 164
- 威望
- 95
- 贡献
- 35
- 兑换币
- 42
- 注册时间
- 2014-1-11
- 在线时间
- 17 小时
- 毕业学校
- 广东白云学院
|
4#
楼主 |
发表于 2014-5-8 12:54:30
|
只看该作者
rubick 发表于 2014-5-8 12:27
肯定不是嵌套和if的问题,是不是你在里面申请内部变量了?
就这么一段,,变量没在里面申请,而是在函数头申请的。只是调用到了内部变量而已
就在第二个for的判断中出错了,,把把第二个for中的if屏蔽掉就行,不然就出错了
void black_extract(void)
{
unsigned char stop=0; //停车圈数计数器
unsigned char i=0,j=0,left=0,right=0,start_flag1=0,start_flag2=0;
unsigned char left_line=0,right_line=0,left_edge=0,right_edge=0;
int temp=0;
unsigned char left_flag1=0,right_flag1=0,left_flag2=0,right_flag2=0;
Line_Center[0]=Line_Center[ROW-1];
////////////////////////////////////////////////////
/////图像前部分用边缘检测法
///////////////////////////////////////////////////
for(i=ROW_START;i<ROW_MID;i++)
{
left=0; //左右跳变清零,这是必须的!!
right=0;
for(j=5;j<=COLUMN-5;j++) //两边搜索 最边界干扰略去
{
if(Buffer1[j]-Buffer1[j+1]>0)
{left=j;left_flag1++;}
if(Buffer1[COLUMN-j]-Buffer1[COLUMN-j-1]>0)
{right=COLUMN-j;right_flag1++;}
}
//////////求黑线的中心
if((left_flag1>=1) && (right_flag1>=1))
{
if((right-left>=BLACK_LINE_MIN0)&&(right-left<=BLACK_LINE_MAX0)) //过滤过宽过细的黑线 4. 80
{
Line_Center=(right+left+1)/2;
_asm(nop);
}
}
else /////////////////过宽过细黑线进行插值
{
if(i<3) Line_Center=Line_Center[i-1];
else
{temp=2*Line_Center[i-1]-Line_Center[i-2];
if(temp>RIHGT_LIMIT) temp=RIHGT_LIMIT;
else if(temp<LEFT_LIMIT) temp=LEFT_LIMIT;
Line_Center=temp;}
}
}
补充内容 (2014-5-8 13:22):
现在发现,如果那个数组在Buffer1[30][1~98]都行,,超过了98就会出现上面的问题 |
|