функция поиска eeprom

У меня есть массив, хранящийся в EEPROM

Начиная с {0,0,0,0,1,1,1...} до 54 элементов с адреса '0'-адрес '53', и я перепроверил значение, и все в порядке.

но когда я использую «функцию поиска» и передал «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-го элемента» не ноль.

Но он всегда возвращает 53.

Почему это так?

Я использую компилятор c18. Если есть какая-то ошибка в логике, поправьте меня.

С уважением


person Rookie91    schedule 19.03.2014    source источник


Ответы (1)


В приведенном выше коде разрыв прерывается только из цикла while, поэтому цикл while прерывается, когда x не равен нулю, однако цикл for, заключающий его, будет увеличиваться и продолжаться в любом случае, прерываясь только тогда, когда loopcnt равен 54 ( выше 53), после чего адрес всегда будет 53.

person flatmush    schedule 19.03.2014