0

我有一个存储在 EEPROM 中的数组

从 {0,0,0,0,1,1,1...} 开始,地址 '0'-address'53' 最多 54 个元素,我已经交叉检查了该值,一切都很好。

但是当我使用“搜索功能”并且当它从第 0 个地址搜索时,我已将“0”作为参数传递。

无符号字符搜索(char current_time)

                    {
                        unsigned int    loopcnt = 0;
                        unsigned int   add ;
                        unsigned char   addr = 0;          //We will store start address of 1's here
                        unsigned char lastAddr =current_time;
                                            unsigned int x;
                    add = 0;
                              //If lastAddr is already overflowing, reset it
            if(lastAddr >= 53)
            {
                    lastAddr = 0;
                    addr=53;
                    return(addr);
            }

                    for(loopcnt = lastAddr; loopcnt < 54; loopcnt++)
                {

                    addr = loopcnt;
                                    x=eeread(add);
                                    //This is start location of our scanning
                                        while(x!= 0)
                            {
                                        x=eeread(add);
                    loopcnt++;
                                             add++;
                    //Count the 1's we got!
                    if(loopcnt==53)
                    {
                        addr=53;
                        break;
                    }
                }


                }

                    return (addr);

            }

但它必须返回 '4' 作为值,因为在 '4'th 元素之后非零。

但它总是返回 53。

为什么会这样?

我正在使用 c18 编译器..如果逻辑上有任何错误,请纠正我。

问候

4

1 回答 1

1

在上面的代码中,break 只从 while 循环中中断,因此当 x 非零时 while 循环将中断,但是包含它的 for 循环无论如何都会递增并继续,仅当 loopcnt 为 54 时才中断( 53 以上)此时 addr 将始终为 53。

于 2014-03-19T16:29:57.090 回答