LinTai: качественные китайские корпуса и каркасы

Реализация алгоритма random на Atmega8

Новичок
 
Регистрация: 06.01.2013
Сообщений: 47
Репутация: 27
0 20
0 0
 
07.11.2013 00:42 #1
Здравствуйте. Нужно реализовать алгоритм рандом на ассемблере для выбора случайного числа в диаппазоне 0-254. Вот нашол код
Код:
procedure          _RandInt;
asm
{        ->EAX   Range   }
{        <-EAX   Result  }
                PUSH    EBX
{$IFDEF PIC}
                PUSH    EAX
                CALL    GetGOT
                MOV      EBX,EAX
                POP      EAX
                MOV      ECX,[EBX].OFFSET RandSeed
                IMUL    EDX,[ECX],08088405H
                INC      EDX
                MOV      [ECX],EDX
{$ELSE}
                XOR      EBX, EBX
                IMUL    EDX,[EBX].RandSeed,08088405H
                INC      EDX
                MOV      [EBX].RandSeed,EDX
{$ENDIF}
                MUL      EDX
                MOV      EAX,EDX
                POP      EBX
end;
но что-то он не совсем правильный. Может кто-то решал подобные задачи?
Оценка
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Новичок
 
Аватар для BOB51
 
Регистрация: 25.11.2008
Адрес: ДОНЕЦК
Сообщений: 313
Репутация: 58
48 13
0 0
 
10.11.2013 00:06 #2
Это ассемблер под АВРку???
Почитай второе- третье издание искусство схемотехники.Там есть описание вполне работоспособного алгоритма!
Оценка
Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW. Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного.
Новичок
 
Регистрация: 06.01.2013
Сообщений: 47
Репутация: 27
0 20
0 0
 
11.11.2013 19:36 #3
либо я что-то не так делаю..
Видел алгоритмы на регистрах сдвига, в шпротеусе то что-то похож.
Для мк нашол подобный алгоритм, поковырял его получил :
1. Выполнить XOR (исключающее или) над 8-м и 5-м битом (согласно нашему многочлену).
2. Сдвинуть наш регистр влево на 1 бит.
3. Занести результат 1-й операции в 0-й бит рагистра .
Код:
ldi Temp,22 грузим число 22
 push Temp1
 eor Temp1, Temp
 bst Temp, 4
 bld Temp1, 0
 clt
 bst Temp, 7
 bld Temp1, 1
 cpi Temp1, 0; оба бита равны нулю - результат xor - ноль
 breq XOR0
 cpi Temp1, 3; оба бита равны единице, результат - ноль
 breq XOR0
 rjmp XOR1; иначе результат - единица
 XOR0:
 lsl Temp; сдвигаем LFSR влево на 1
 clt
 bld Temp, 0; вносим ноль справа
 pop Temp1
 ret
 XOR1:
 lsl Temp
 set
 bld Temp, 0
 pop Temp1
 ret
Получается загружаем в Temp,22 после выполнения программы на выходе имеем 45. То-есть 22*2+1=45. Таким образом в Темп можно грузить начальные данные псп, скажем брать время часов и его основе формировать некий код. Если ограничить начальное значение до 127, то получим разгул чисел от 0-255. Но этот алгоритм очень слаб как по мне.
На рисунках результат работы регистра сдвига.
Изображения
Тип файла: jpg 2.JPG (128.5 Кб, 0 просмотров)
Тип файла: jpg rand1.JPG (70.7 Кб, 0 просмотров)
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 0
3 0
 
27.11.2013 01:43 #4
Стоит заглянуть вот в эту ветку http://radiokot.ru/forum/viewtopic.php?t=7603.

А посмотреть всё же нужно «Д.Кнут. Искусство программирования», а не «Хоровиц-Хилл. Искусство схемотехники» по совету BOB51. У Кнута, собственно, и описаны ограничения «коротких» алгоритмов. В частности, большинство реализованных в библиотеках под AVR и PIC генераторов псевдослучайных последовательностей кроме явной «предсказуемости» из-за начала последовательности, имеют ограничения на тип возвращаемого значения с длиной не более 8(16) бит. Поэтому Ваше огорчение по поводу «слабости алгоритма» мне понятны и близки и связаны они исключительно с ограниченным набором функций распределения, которыми можно безболезненно оперировать на слабой архитектуре.

На МК я решал аналогичную задачу использованием библиотечной srand() на Си и запущенным на 100Гц таймером, который сдвигал начало последовательности на величину текущего тика таймера или сложнее – на величину сгенерированного перед его прерыванием числа, смешанного с числом из заранее забитой в FLASH/EEPROM небольшой таблицы с нормальным распределением, в свою очередь сгенерированной на ПК (в моём случае в Maple). Такой себе генератор над генератором. Это совсем не «расширяет область» генерируемого диапазона чисел (если с таблицей - всё зависит от свободной памяти или размера внешней (AT45!), но не даёт возможность по возникновению события, для которого нужно случайное число, уйти от периода этого самого события (если событие внешнее). А задача с таким внешним событием была – контроллер для игрового автомата в тире с вращающимся барабаном и кучей светящихся стрелок, где игрок должен попасть по подсвеченной в данный момент кнопке. Кроме случайного выбора кнопки, потребовалось добавить случайную задержку в диапазоне 0-0,5 сек. на остановку двигателя барабана, обеспечив тем самым свободный выбег редуктору случайным образом (по аналогии с включением стопора). Действовать синхронно с периодом события 10мс человеку очень сложно, если не сказать невозможно.

Так что если программа «человеко-ориентированная», может вовсе можно отказаться от генератора?
Последний раз редактировалось antonydublin; 27.11.2013 в 02:01.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 0
3 0
 
01.11.2014 12:59 #5
Недавно появился замечательный OpenSource/OpenHardware проект генератора случайных чисел. Увидев страницу OneRNG by Paul Campbell, вспомнил про эту тему на форуме.

В нескольких словах: используются два различных источника шума. Первый «классический» – шум лавинного диода, сформированного парой транзисторов, второй – микросхема радиотрансивер СС2531 – известная в узких кругах SoC для 802.15.4, измеряющая поканально скачки мощности сигналов в диапазоне 2,4ГГц. Вся схема оформлена в виде USB брелка с интерфейсом USB-CDC – виртуальным последовательным портом, неоднократно использовавшимся в различных проектах на РадиоЛоцмане. Проект изначально разрабатывался для использования с Linux, но, ввиду универсальности COM-порта, привязать к своему приложению в Windows не составит труда. Код написан в SDCC для ядра 8051, легко поддаётся изменениям (к слову – в семействе CC253x есть трансивер CC2538 с Cortex-M3). Так или иначе, на странице проекта описана схемотехника и все особенности работы. Приведён пример GUI в Qt. В общем – то что нужно для задач криптографии на ПК, МК и не только.

Но… к сожалению, пока проект не использует встроенные возможности СС2531 по AES шифрованию для «отбеливания» потока данных с устройства – просто не с чем сравнивать при верификации (взамен используется CRC16 из-за своей открытости). Поэтому такой брелок, по словам разработчиков, является хорошим источником энтропии для более мощного алгоритма RNG (т.е. у разработчиков получился очередной внешний источник энтропии для работы в связке с генератором псевдослучайной последовательности). Оба источника энтропии могут использоваться отдельно или одновременно. Доступны также «сырые» данные.

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

Как выразился сам автор – «Paranoia abounds!».
Оценка
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Оценка этой теме
Оценка этой теме:
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 11:48.
Обратная связь РадиоЛоцман Вверх