Генератора псевдослучайных чисел attiny13a

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Сообщения: 131
Зарегистрирован: Вс май 08, 2016 22:45:48

Сообщение sTRog »

Мало ли кому это поможет, как и мне. Функция генератора псевдослучайных чисел.
Спойлер

Код: Выделить всё

#define random() rnd()
register uint16_t rnd_seed asm("r8");
uint16_t rnd() {
	union {
		uint16_t full;
		struct as_bytes {
			uint8_t low;
			uint8_t high;
		} byte;
		struct as_bits {
			uint8_t _0: 1;
			uint8_t _1: 1;
			uint8_t _2: 1;
			uint8_t _3: 1;
			uint8_t _4: 1;
			uint8_t _5: 1;
			uint8_t _6: 1;
			uint8_t _7: 1;
			uint8_t _8: 1;
			uint8_t _9: 1;
			uint8_t _10: 1;
			uint8_t _11: 1;
			uint8_t _12: 1;
			uint8_t _13: 1;
			uint8_t _14: 1;
			uint8_t _15: 1;
		} bit;
	} random;
	
	random.full = rnd_seed;
	random.bit._7 = random.bit._1;
	random.byte.low = random.byte.high ^ random.byte.low;
	random.byte.high = random.byte.low ^ (random.byte.low << 1);
	
	rnd_seed <<=1;
	if (random.bit._15 == 1) rnd_seed++;
	
	return rnd_seed;
}


void randomize_rantime (void) {
	rantime = random();
	while (rantime > 5400) rantime -= 5400;
	rantime += 1800;
}
Функция выдает случайное число от 1 до 65535.
Вторая доп.функция вводит диапазон нужных чисел.
Автор кода - El Tangas

Распределение чисел
Изображение
СпойлерМало ли есть такие же тупенькие как я, и это им поможет. Админы, если ошибся разделом перенесите пожалуйста
Последний раз редактировалось sTRog Вс фев 12, 2017 08:18:36, всего редактировалось 1 раз.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Интересно, насколько равномерное распределение чисел дает эта функция?
По-моему, функция подсчета CRC даст результат не хуже, но будет гораздо проще.
Для всяких мигалок я вообще тупо брал содержимое flash микроконтроллера...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Ответить

Вернуться в «AVR»