for循环变死循环,求大神支支招!51单片机keil4编的

2019-07-15 18:14发布

虽然我知道看代码很蛋疼,但是实在没办法,求大家帮帮忙!
问题就是程序在执行下面这个子函数的时候一直循环,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[x][y] = PatternOneTab[0][y];
                    }
                }
                /* 后八次,从7维放到0维 */
        else
        {
            for (y = 0;y < 8;y++)
            {
                            if (bInitMark)
                {DisTab[16 - x][y] = PatternOneTab[0][y];}
                                else
                                {DisTab[16 - x][y] = 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++;
                        }
                }
    }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
ntmusic
2019-07-16 17:01
太乱了,不过我想提醒一下,for循环会出现死循环的情况一般都是循环条件在循环体内有变化导致条件无法达到,看你的程序循环变量x和ucMoveSpeed在程序中均有被重新赋值,检查是否有冲突导致循环条件一直无法满足。此外,我发现在程序中你还调用了InitialTab等子函数,检查这些函数是否死循环。最后,你使用了二维数组,检查是否下标溢出导致程序跑飞。

一周热门 更多>