|
Сделать генератор псевдослучайных чисел наС |
|
|
|
 |
Ответов
|
Oct 15 2006, 12:55
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ Oct 15 2006, 06:34)  Цитата(demaven @ Oct 13 2006, 14:59)  а данные для инициализации rnd() надо брать со случайного источника, в компьютере берут время, а в контроллере? если есть что-то меняющееся независимо от контроллера, то померять и вставить
В контроллере тоже можно брать время. У вас таймеров пруд-пруди, отведите один из них под системные часы. Таймером можно воспользоватся для этих целей только если в устройстве предполагается интерактивное взаимодействие, ну например пользователь в какой-то момент жмет кнопку, а мы измеряем время от старта устройства до нажатия на кнопку и используем полученное время(младшую часть) как инициализацию rand(). Иначе каждый раз при старте устройства мы будем получать одну и ту же последовательность. Как вариант можно поставить внешний RTC и его значение использовать для инициализации rand().
|
|
|
|
|
Oct 15 2006, 20:02
|
Частый гость
 
Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217

|
Цитата(singlskv @ Oct 15 2006, 16:55)  Цитата(defunct @ Oct 15 2006, 06:34)  Цитата(demaven @ Oct 13 2006, 14:59)  а данные для инициализации rnd() надо брать со случайного источника, в компьютере берут время, а в контроллере? если есть что-то меняющееся независимо от контроллера, то померять и вставить
В контроллере тоже можно брать время. У вас таймеров пруд-пруди, отведите один из них под системные часы. Таймером можно воспользоватся для этих целей только если в устройстве предполагается интерактивное взаимодействие, ну например пользователь в какой-то момент жмет кнопку, а мы измеряем время от старта устройства до нажатия на кнопку и используем полученное время(младшую часть) как инициализацию rand(). Иначе каждый раз при старте устройства мы будем получать одну и ту же последовательность. Как вариант можно поставить внешний RTC и его значение использовать для инициализации rand(). да ничего нету,только операционник вклученый по схеме ripper detector и батарейка.
|
|
|
|
|
Oct 15 2006, 21:03
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(glebka @ Oct 16 2006, 00:02)  да ничего нету,только операционник вклученый по схеме ripper detector и батарейка. Тогда можете поступить вот так, каждый раз при старте мк увеличиваете счетчик включений Вашего устройства размещенный в EEPROM и используйте его для инициализации rand(). Будете получать при каждом включении разные последовательности псевдослучайных чисел.
|
|
|
|
|
Oct 16 2006, 03:10
|

Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 10-05-05
Из: Киргизия Бишкек
Пользователь №: 4 886

|
Цитата(singlskv @ Oct 16 2006, 03:03)  Цитата(glebka @ Oct 16 2006, 00:02)  да ничего нету,только операционник вклученый по схеме ripper detector и батарейка.
Тогда можете поступить вот так, каждый раз при старте мк увеличиваете счетчик включений Вашего устройства размещенный в EEPROM и используйте его для инициализации rand(). Будете получать при каждом включении разные последовательности псевдослучайных чисел. самое простое и действенное решение
|
|
|
|
|
Oct 16 2006, 07:18
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(demaven @ Oct 16 2006, 07:10)  Цитата(singlskv @ Oct 16 2006, 03:03)  Цитата(glebka @ Oct 16 2006, 00:02)  да ничего нету,только операционник вклученый по схеме ripper detector и батарейка.
Тогда можете поступить вот так, каждый раз при старте мк увеличиваете счетчик включений Вашего устройства размещенный в EEPROM и используйте его для инициализации rand(). Будете получать при каждом включении разные последовательности псевдослучайных чисел. самое простое и действенное решение Продолжая идею, ещё лучше сохранять многобитную псевдослучайную последовательность, накопленную генератором к текущему моменту (random seed value). Идея подсмотрена в ОС Linux (/dev/random).
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Oct 16 2006, 07:46
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Demeny @ Oct 16 2006, 11:18)  Цитата(demaven @ Oct 16 2006, 07:10)  Цитата(singlskv @ Oct 16 2006, 03:03)  Цитата(glebka @ Oct 16 2006, 00:02)  да ничего нету,только операционник вклученый по схеме ripper detector и батарейка.
Тогда можете поступить вот так, каждый раз при старте мк увеличиваете счетчик включений Вашего устройства размещенный в EEPROM и используйте его для инициализации rand(). Будете получать при каждом включении разные последовательности псевдослучайных чисел. самое простое и действенное решение Продолжая идею, ещё лучше сохранять многобитную псевдослучайную последовательность, накопленную генератором к текущему моменту (random seed value). Идея подсмотрена в ОС Linux (/dev/random). Да, так можно делать, но только в случае когда нам заранее известен момент выключения устройства чтобы писать в eeprom только последнее значение. Если писать каждое значение, то мы быстро израсходуем ресурс eeprom.
|
|
|
|
|
Oct 16 2006, 13:19
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(singlskv @ Oct 16 2006, 11:46)  Да, так можно делать, но только в случае когда нам заранее известен момент выключения устройства чтобы писать в eeprom только последнее значение. Если писать каждое значение, то мы быстро израсходуем ресурс eeprom. Это можно делать и в момент включения. Вначале ставим что-то типа Random_Seed_In_EEPROM = random (Random_Seed_In_EEPROM); и вуаля!
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Oct 16 2006, 15:07
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Demeny @ Oct 16 2006, 17:19)  Цитата(singlskv @ Oct 16 2006, 11:46)  Да, так можно делать, но только в случае когда нам заранее известен момент выключения устройства чтобы писать в eeprom только последнее значение. Если писать каждое значение, то мы быстро израсходуем ресурс eeprom.
Это можно делать и в момент включения. Вначале ставим что-то типа Random_Seed_In_EEPROM = random (Random_Seed_In_EEPROM); и вуаля! Это не очень хорошо. Пусть генерируеться такая последовательность(для примера) 1 10256 387 40001 67 23070 ... тогда при первом включении будем иметь последовательность: 1 10256 387 40001 67 23070 ... при втором: 10256 387 40001 67 23070 ... при третьем: 387 40001 67 23070 ... и т.д. То есть в итоге эти последовательности будут почти совпадать, за исключением первых членов, что не всегда есть хорошо
|
|
|
|
Сообщений в этой теме
glebka Сделать генератор псевдослучайных чисел наС Oct 13 2006, 09:56 Sanya Nemo В компиряторе с Dode Vision есть функция random()... Oct 13 2006, 10:09 glebka Цитата(Sanya Nemo @ Oct 13 2006, 14:09) В... Oct 13 2006, 10:13  Семён Тоже нет доступа к Сode Vision, может, кто подскаж... Oct 13 2006, 10:24   singlskv Цитата(Семён @ Oct 13 2006, 14:24) Тоже н... Oct 13 2006, 10:41 singlskv Цитата(demaven @ Oct 13 2006, 15:59) а да... Oct 13 2006, 12:12  glebka Цитата(singlskv @ Oct 13 2006, 16:12) Цит... Oct 13 2006, 12:15   singlskv Цитата(glebka @ Oct 13 2006, 16:15) А есл... Oct 13 2006, 12:25   Семён Цитата(glebka @ Oct 13 2006, 16:15) А есл... Oct 13 2006, 12:29    glebka Цитата(Семён @ Oct 13 2006, 16:29) Цитата... Oct 13 2006, 12:35     Семён Цитата(glebka @ Oct 13 2006, 16:35) у мен... Oct 13 2006, 12:43     singlskv Цитата(glebka @ Oct 13 2006, 16:35) у мен... Oct 13 2006, 17:47           singlskv Цитата(Nanobyte @ Oct 17 2006, 00:03) Цит... Oct 16 2006, 20:31          SasaVitebsk Цитата(singlskv @ Oct 16 2006, 18:07) Цит... Oct 17 2006, 11:54           singlskv Цитата(SasaVitebsk @ Oct 17 2006, 15:54) ... Oct 17 2006, 13:34 Alex11 Можно попробовать подвесить вход АЦП в половину пи... Oct 13 2006, 18:40 SasaVitebsk Цитата(Alex11 @ Oct 13 2006, 21:40) Можно... Oct 14 2006, 19:08 glebka У меня каждое устройство имеет уникальный адрес за... Oct 17 2006, 08:23 singlskv Цитата(glebka @ Oct 17 2006, 12:23) У мен... Oct 17 2006, 10:08  Михаил Горюнов Цитата(singlskv @ Oct 17 2006, 14:08) Пре... Oct 17 2006, 10:21   singlskv Цитата(Михаил Горюнов @ Oct 17 2006, 14:2... Oct 17 2006, 10:50  glebka Цитата(singlskv @ Oct 17 2006, 14:08) Цит... Oct 17 2006, 10:28   singlskv Цитата(glebka @ Oct 17 2006, 14:28) Я дум... Oct 17 2006, 11:06   singlskv Цитата(glebka @ Oct 17 2006, 12:23) У мен... Oct 17 2006, 14:14    glebka [quote]
Просто в начальном посте не было понятно ч... Oct 18 2006, 14:16 Михаил Горюнов В свое время решил эту задачу так :
За начальное з... Oct 17 2006, 09:09 Михаил Горюнов Зачем вообще использовать EEPROM для генератора сл... Oct 17 2006, 10:34 glebka Цитата(Михаил Горюнов @ Oct 17 2006, 14:3... Oct 17 2006, 10:49  Михаил Горюнов Цитата(glebka @ Oct 17 2006, 14:49) Да не... Oct 17 2006, 11:04 demaven 8 передатчиков работали на одной частоте на 64 при... Oct 18 2006, 04:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|