Всем доброго времени суток. Необходима помощь с алгоритмом поиска заданного значения в памяти .
Есть некое число размером в 10 байт (ориентировочно, но порядок такой), которое поступает в контроллер по последовательному интерфейсу (тут на самом деле неважно, как и откуда поступают эти 10 байт), есть микросхема памяти EEPROM 256 килобит, разбитая на ячейки по 10 байт (тоже не принципиально), в каждую ячейку которой записаны некоторые числа.
Необходимо как можно быстрее определить, есть ли вновь поступившее 10-ти байтное число в памяти и в какой ячейке оно находится.
Думаю самым простым способом будет перебор всех ячеек, но это очень долго. EEPROM подключена по i2c и тактируется на частоте 200кГц. Есть способ посложнее с подгрузкой в RAM контроллера части EEPROM с дальнейшим перебором и сравнением значений уже в памяти контроллера, думаю будет быстрее, но все же может есть способ побыстрее? может алгоритм какой нибудь хитрый? подскажите, кто что думает.
Алгоритм поиска. ATmega32.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Алгоритм поиска. ATmega32.
Ставим плюсы: )
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: Алгоритм поиска. ATmega32.
А если обнаруживать его при поступлении в контроллер по последовательному интерфейсу, а потом запоминать, куда оно будет записанно?
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- NiTr0
- Друг Кота
- Сообщения: 3051
- Зарегистрирован: Пт авг 10, 2007 12:49:55
- Откуда: kr.ua
- Контактная информация:
Re: Алгоритм поиска. ATmega32.
Если числа лежат в еепром неупорядочено - то никак.
Вычитывать первое число каждой "ячейки", сравнивать, если оно - читать/сравнивать дальше, не оно - к следующей ячейке.
Вычитывать первое число каждой "ячейки", сравнивать, если оно - читать/сравнивать дальше, не оно - к следующей ячейке.
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: Алгоритм поиска. ATmega32.
Ну вы сказали, что числа изначально попадают в систему контроллер+еепром через последовательный интерфейс, значит, делаем вывод, что они записываются в память контроллером уже самостоятельно. На данном этапе значительно проще обнаружить нужное число, т.к оно одно (до прихода следующего) и находится в памяти контроллера. Затем запомнить его адрес в еепром. Но если "нужное число", то, которое надо найти, возникает уже после записи, то тогда так, как предложил Нитро.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
Re: Алгоритм поиска. ATmega32.
ibiza11 писал(а): может алгоритм какой нибудь хитрый? подскажите, кто что думает.
Всё уже придумано до нас: хеширование и хранение данных с одинаковым хеш-кодом "отдельно" от других данных.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Алгоритм поиска. ATmega32.
Спасибо. Ночью с другом тоже нашли информацию о хешировании данных. Буду делать таблицу хеша при поступлении данных. Это облегчит поиск. 

Ставим плюсы: )