Проверка данных на уникальность перед записью в ЕЕПРОМ
- Войдите на сайт для отправки комментариев
Приветствую!
Собираю проект "Приемник сигналов с брелков CAME 433.92 MГц." , одно из особенностей данного устройства что оно будет постоянно слушать эфир и собирать коды брелков и записывать их в ЕЕПРОМ. Но перед записью нужно проверить имеющеюся базу на уникальность, другими словами не записывать один и тот же код несколько раз. Прошу помощи в написании данной функции, может у кого уже есть рабочий кусочек кода.
Алгоритм следующий: записать 3 байта в временную ячейку, прочитать первую ячейку ЕЕПРОМ сравнить с первым байтом, если не совпал прочитать 4 ячейку ЕЕПРОМ если совпал прочитать 5 ячейку ЕЕПРОМ сравнить, если совпал сравнить 6 ячейку, если совпал то прекратить сравнение очистить временные рабочие и вернутся к началу, а если не совпал код до последней записанной ячейки то перейти к записи ЕЕПРОМ.
Люди добрые помогите кто чем может!!!!
Добрые люди верят в вас, и в то что вы осилите 3-томник Кнут Искусство программирования.
http://mexalib.com/search/?q=%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%...
Люди добрые помогите кто чем может!!!!
Вам сам алгоритм поиска нужен или как работать с еепром?
По еепрому документации более чем достаточно ...
Что касается алгоритма - отсортируйте уже существующие данные по возрастанию или по убыванию, разделите полученный список пополам (либо по значению, либо по числу элементов - зависит от данных), сравните, ваши новые данные - в какую половину они попадают. Эту половину опять делим пополам и опять смотрим, в какую из уже четвертей попадает ваше значение и так до окончания поиска. Число иттераций примерно будет логарифм по основанию 2 из числа элементов
Андрей,
>>если не совпал код до последней записанной ячейки
Как отличить записанную ячейку от пустой?
Люди добрые помогите кто чем может!!!!
Вам сам алгоритм поиска нужен или как работать с еепром?
По еепрому документации более чем достаточно ...
Что касается алгоритма - отсортируйте уже существующие данные по возрастанию или по убыванию, разделите полученный список пополам (либо по значению, либо по числу элементов - зависит от данных), сравните, ваши новые данные - в какую половину они попадают. Эту половину опять делим пополам и опять смотрим, в какую из уже четвертей попадает ваше значение и так до окончания поиска. Число иттераций примерно будет логарифм по основанию 2 из числа элементов
Добрые люди верят в вас, и в то что вы осилите 3-томник Кнут Искусство программирования.
http://mexalib.com/search/?q=%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%9A%D0%BD%D1%83%D1%82
3-томник Кнут Искусство программирования может и осилю, но не в этой жизни :(
Скажу несколько фактов, которые вы стеснялись спросить: (1) В ЕЕPROM пишется долго, но читается быстро, (2) от чтения в отличии от записи ЕЕPROM не портится. (3) при зашивке скетча , когда не жмешь на кнопку reset ЕЕPROM очищается от записей. Теперь выводы. Не надо искать конец записи. Запись кончается там где чисто . Смешно !!! Тогда не надо тратить на перезапись 1 и 2 ячейки показывающие конец. Быстрее найти перебором до конца . Если вам надо удалить запись в цепочке поместите 1 и все. Это означает что это пустое место а цепочка продолжается.
Скажу несколько фактов, которые вы стеснялись спросить: (1) В ЕЕPROM пишется долго, но читается быстро, (2) от чтения в отличии от записи ЕЕPROM не портится. (3) при зашивке скетча , когда не жмешь на кнопку reset ЕЕPROM очищается от записей. Теперь выводы. Не надо искать конец записи. Запись кончается там где чисто . Смешно !!! Тогда не надо тратить на перезапись 1 и 2 ячейки показывающие конец. Быстрее найти перебором до конца . Если вам надо удалить запись в цепочке поместите 1 и все. Это означает что это пустое место а цепочка продолжается.
Вот вам стиралка на 255 байт .
А вот записывалка. В начале выдает вам дамп памяти. Потом вводите В Serial строку и отправляете . РЕСЕТ и смотрите дамп памяти. И да повторно буквы не записывает
Вот вам стиралка на 255 байт .
А вот записывалка. В начале выдает вам дамп памяти. Потом вводите В Serial строку и отправляете . РЕСЕТ и смотрите дамп памяти. И да повторно буквы не записывает
Посмотрел код в протеусе, по моему то что надо, Как говорится "то что доктор прописал" ! Буду его теперь прилаживать его в основной скетч. посмотрим что получится. Отпишусь! Еще раз Спасибо!
Прикрутил ваш код в основной скетч, работает отлично, но теперь встала проблема с структурой бызы банных которая будет хранится в ЕЕПРОМ.
Вот вам стиралка на 255 байт .
прошу прощения за влезание в чужую тему, но похоже на выход за границу индекса. Запишется 257 ячеек вместо 255 тк i<=256
Вот вам стиралка на 255 байт .
прошу прощения за влезание в чужую тему, но похоже на выход за границу индекса. Запишется 257 ячеек вместо 255 тк i<=256
Прикрутил ваш код в основной скетч, работает отлично, но теперь встала проблема с структурой бызы банных которая будет хранится в ЕЕПРОМ.
Вы сами и ответили. Организуйте класс или структуру. К сожалению я вам здесь не помошник. Мне тогда придется переписать всю вашу программу. А это вам или мне надо !!!. http://cpp.com.ru/kr_cbook/ch6kr.html
Прикрутил ваш код в основной скетч, работает отлично, но теперь встала проблема с структурой бызы банных которая будет хранится в ЕЕПРОМ.
Вы сами и ответили. Организуйте класс или структуру. К сожалению я вам здесь не помошник. Мне тогда придется переписать всю вашу программу. А это вам или мне надо !!!. http://cpp.com.ru/kr_cbook/ch6kr.html