В настоящее время я пытаюсь реализовать алгоритм для выбора уникального идентификатора (16-разрядный). Задача состоит в том, чтобы сделать это быстро, так как не использует слишком много памяти. Список используемых в настоящее время идентификаторов - , определяемый путем сканирования внешнего флэш-устройства через последовательность транзакций SPI и, следовательно, является относительно медленным процессом. Кроме того, алгоритм будет работать на микросхеме с малым размером, поэтому я не могу действительно просто читать все записи в ОЗУ и обрабатывать их там.Выбор уникального идентификатора в C для встроенного приложения
Мысли у меня были до сих пор являются:
- Выберите номер, а затем просканировать список и посмотреть, если он используется. Промойте и повторите. Страдает от довольно медленного (особенно если - это много файлов).
- Как указано выше, но выберите номер, используя генератор псевдослучайных чисел с соответствующим семенем. Это имеет то преимущество, что меньше , вероятно, будет такое большое количество итераций.
- Сканировать по списку и заполнить массив всеми найденными . Сортируйте его, а затем он становится тривиальным. Это может использовать огромный объем памяти .
- Используйте огромную (хорошо, смешно огромную) битную маску. Не совсем практичный.
- Примите, что срок службы инструмента таков, что он будет выброшен или «отформатирован» задолго до того, как он набрал 65534 файлов на Flash, , поэтому просто сохраните наивысшее значение, используемое до сих пор во Flash или Резервное копирование и сохранение приращений. Честно говоря, это, вероятно, будет работать достаточно хорошо для данного приложения .
На данный момент, я доходящей к использованию либо второй или пятый, , но мне было бы интересно знать, если кто имеет какие-либо другие мысли. Я бы хотел, чтобы считал, что существует алгоритм, похожий по форме на CRC, который можно использовать для обрабатывать каждый номер по очереди и дать справедливое представление о количестве, которое не было , но я понятия не имею как это может сработать.
Это требование, чтобы идентификаторы были не последовательными? – Robert
Неважно, в какой-то момент они должны быть уникальными (поэтому удаленные идентификаторы могут быть повторно использованы сразу). – DrAl