for循环变死循环,求大神支支招!
虽然我知道看代码很蛋疼,但是实在没办法,求大家帮帮忙!问题就是程序在执行下面这个子函数的时候一直循环,Debug了一下,确实跳不出来,找不到原因,代码如下:
void PatternOne()
{
char x,y;
uchar ucMoveSpeed= 15; /* 通过累积循环次数控制移动时间 */
bit bInitMark =1; /* 清0数组标志位,1则清,0反之*/
bit bChangeSpeed =0; /* 速度改变标志位,1则改变0反之 */
for (x = 0;x < 16;x++)
{
/* 清0数组标志位置1则清0,0反之 */
if (bInitMark && (8 != x))
{
/* (字模为阴码,亮为1,灭为0) */
InitialTab(0x00);
}
/* 前八次,将字模从0维放到7维 */
if (x < 8)
{
for (y = 0;y < 8;y++)
{
DisTab = PatternOneTab;
}
}
/* 后八次,从7维放到0维 */
else
{
for (y = 0;y < 8;y++)
{
if (bInitMark)
{DisTab = PatternOneTab;}
else
{DisTab = 0x00; }
}
}
/* 通过累积循环次数控制移动时间 */
for (y = 0;y < ucMoveSpeed;y++ )
{
Display1();
}
/* 第一次循环完成,处理标志位,从头循环*/
if ((15 == x) && (1 == bInitMark))
{
InitialTab(0x00);
/* 第二次循环不清0数组 */
bInitMark =0;
/* 第二次循环改变移动速度 */
bChangeSpeed =1;
/* 将x清0,进行第二次循环,由于本次
* 循环结束后x会自加1,所以减一修正
*/
x = -1;
}
/* 标志位置一,改变速度 */
if (bChangeSpeed)
{
if (x < 8)
{
ucMoveSpeed--;
}
else
{
ucMoveSpeed++;
}
}
}
}
我教你一种调试方法,叫做逐步删减法。这段代码就这么多,你每减去一部分,就编译测试一下,直到你能跳出循环为止,那么当前被删除的那部分代码就是有bug的代码。 兄弟,代码规范很重要,这样写代码发,过一段时间,你也不认识它,它也不认识你。
建议重写。 jianhong_wu 发表于 2014-10-30 10:35
我教你一种调试方法,叫做逐步删减法。这段代码就这么多,你每减去一部分,就编译测试一下,直到你能跳出循 ...
好的,我试试! hww5408 发表于 2014-10-30 10:50
兄弟,代码规范很重要,这样写代码发,过一段时间,你也不认识它,它也不认识你。
建议重写。
我的代码严格按照朱老师说的去写的,确实不知道如何去优化了,兄台有何高见? jianhong_wu 发表于 2014-10-30 10:35
我教你一种调试方法,叫做逐步删减法。这段代码就这么多,你每减去一部分,就编译测试一下,直到你能跳出循 ...
经过鸿哥指点,我已经找到问题了问题找到了,是这里
for (y = 0;y < 8;y++)
{
if (bInitMark)
DisTab = PatternOneTab;
else
DisTab = 0x00;
}
是这个地方导致for循环无法退出,想问问为什么? 重庆-风雪 发表于 2014-10-31 22:57
经过鸿哥指点,我已经找到问题了问题找到了,是这里
for (y = 0;y < 8;y++)
{
数组越界了。把16 - x改成15-x,因为x的最大范围是15. jianhong_wu 发表于 2014-11-1 10:57
数组越界了。把16 - x改成15-x,因为x的最大范围是15.
问题已解决!谢谢鸿哥!
页:
[1]