Перейти к содержанию
    

Сгенерировать случайное число

Идея с Eprom мне не нра по одной причине. Бывали случаи ( в практике), когда портилось не только то куда пишешь. Т.е. снятие питания во время записи в общем случае чревато траблами в других местах.

 

С кнопками - да. Но на устройстве нет ни одного элемента индикации. Очень неприятно давить кнопки наугад. Тем более - неспециалисту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идея с Eprom мне не нра по одной причине. Бывали случаи ( в практике), когда портилось не только то куда пишешь. Т.е. снятие питания во время записи в общем случае чревато траблами в других местах.

Я на 100% уверен, что время записи байта в EEPROM не может совпадать у разных экземпляров с точностью до такта процессора (точнее, дискретность будет равна времени цикла опроса флага завершения). А время записи (единицы mS) достаточно велико, чтобы прокрутить цикл по крайней мере пару сотен раз при разумной тактовой частоте...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вообще генерировать случайные числа я себе представляю.

Как генерировать их без внешних устройств - вот в этом вопрос.

А поиском в инете пользовался?

Встречал генерирование как случайных так и псевдослучайных чисел,

если интересно, вечером дам ссылки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Согласен, что задержка для флэшки не должна зависить от тактовой процессора. По идее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно, обсуждаемая тема имеет некий общеобразовательный смысл, но такое решение очень ненадежно, поскольку велика вероятность совпадения "случайных" чисел, сгенерированных по одному и тому же алгоритму на почти идентичном "железе".

Вы же не собираетесь производить Ваш девайс миллионами экземпляров, так почему бы просто не прошить в каждый, намертво, уникальный (в рамках предполагаемог количества экземпляров) серийный номер? За всех не поручусь, но возможность автоматического инкрементального присвоения серийного номера достаточно часто встречающаяся в средах разработки функция (обычно находится во вкладке флэш лоадера).

Изменено пользователем Ledmaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решение достаточно. Ибо случайные числа любого диапазона имеют право совпадать. Даже самые настоящие случайные числа.

Посему - все нормально.

Когда не хотят, чтобы что-то совпадало, как например MAC адреса сетевых карт, то не используют случайные числа.

 

Мое устройство просто в радиусе своего действия - 50 метров, не должно сталкиваться по адресам с другим устройством. И все.

А устройств в одном радиусе действия ожидается не больше двух трех. Поэтому 65536 адресов - вполне достаточно. За глаза. (Где генерируется одно случайное число, там генерируется и второе - задача эквивалентная).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мое устройство просто в радиусе своего действия - 50 метров, не должно сталкиваться по адресам с другим устройством.

 

когда микрочип разрабатывал свой модуль шифрования сигналов автосигнализаций он не надеясь на случайность и количество сделал их все разными

алгоритм шифрования там достаточен чтобы поменять батарейку и после этого не ломать дверь.

как будете разруливать ситуацию разряда батареи???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

простите что вмешиваюсь ...

#include <stdlib.h>

и использовать rand();

при этом указать rand_max

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

простите что вмешиваюсь ...

#include <stdlib.h>

и использовать rand();

при этом указать rand_max

"Шутку понял. Смешно" ©

Ну и какие результаты будут при выполнении на одинаковых кристаллах с одинаковой растактовкой и одинаковыми исходными данными ? Очень-очень условно можно _предполагать_ случайное состояние ячеек оперативной памяти, но не более того. Без привлечения дополнительных аппаратных средств можно полагаться либо на время записи в EEPROM данных (у PIC16 - можно, у MSP430 - нельзя), либо на разные тактовые частоты опорного генератора и RC-тактируемого WDT (как уже было предложено). Других вариантов я, например, вообще не представляю...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Запустить таймер, дождаться сброса по собаке, прочитать таймер. А с прескейлером, назначенным на таймер собаки, даже 16-битный таймер успеет несколько раз переполниться.

В новых пиках точность таймера собаки подняли, поэтому стОит или перемешивать биты, или пропустить считанное значение через CRC-образный алгоритм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

когда микрочип разрабатывал свой модуль шифрования сигналов автосигнализаций он не надеясь на случайность и количество сделал их все разными

алгоритм шифрования там достаточен чтобы поменять батарейку и после этого не ломать дверь.

как будете разруливать ситуацию разряда батареи???

Адрес генерируется раз в жизни. И пишется во флэшку.

Устройство крайне маленькое, потреблять должно не более 5 микроампер (в среднем).

 

Достаточно сделать генерацию нового адреса по подсоединению батарейки, как все проблемы с совпадениями снимаются. Если совпало - просто переткни батарейку еще раз.

 

Но я так не сделал. Ибо на пиковый случай, когда в одном месте собираются очень много устройств (сложная система), то там присутсвует управление устройством через RS232? где ты можешь в ручную задать все параметры.

 

А для простых случаев - сойдет и так.

 

Это устройство - просто радиокнопка на 10 выключателей. Типа умный дом и все такое.

Просто встала задача при массовом тираже (всего 1000 шт. в год) упростить задачу записи разных адресов по умолчанию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А для простых случаев - сойдет и так.

 

Это устройство - просто радиокнопка на 10 выключателей. Типа умный дом и все такое.

Просто встала задача при массовом тираже (всего 1000 шт. в год) упростить задачу записи разных адресов по умолчанию.

И все же я бы подумал и о дополнительном "аппаратном" решении. В виде хоть какого джампера/кнопки на плате, выполняющего начальный сброс устройства. Т.е. при установке батареи хоть каким из предложенных способов генерируем некоторое "суррогатное" "случайное" число, а потом в течении какого-то разумного времени пользователь должен сделать сброс. А вот в течении этого времени до сброса крутить счетчик с максимальной скоростью. Момент сброса будет вполне случайным и результат (сохраняемый в оперативной памяти) - тоже. Ну, а если все ж сброса не было, то по истечении таймаута (а то цикл сожрет много электропитания) будет то, что сгенерировалось в момент включения. В конце концов, возможность аппаратного сброса есть практически везде и повсеместно, начиная от наручных часов...

 

Стоп-стоп... Радиокнопка, говорите ? Т.е. кнопка уже есть ? Ну так от включения и до первого нажатия на кнопку можно медленно и печально, не особо расходуя питание, крутить какой-нибудь таймер. И по нажатию на кнопку сохранить полученный результат, который и будет требуемым "случайным числом". Или я чего-то в логике работы недопонял ?

Изменено пользователем rx3apf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ставте DS2411 и не мучайтесь ненужными проблемами. Кнопки, еепром, ацп, память и прочее... :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А слабо внимательно перечитать пост Rst7? И не заниматся народным творчеством?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ставте DS2411 и не мучайтесь ненужными проблемами. Кнопки, еепром, ацп, память и прочее... :wacko:

Да, дополнительные пару долларов себестоимости, это как раз то, что нужно для радиобрелка! :)

 

А все таки, как насчет банальной сериализации? В конце концов, можно успокоится на внешней проге, которая непосредственно в .hex файл будет прописывать серийный номер и править CRC (если нужно) перед каждой прошивкой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...