logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak uzyskać pseudolosowość w (win)avr? Użycie srand() i rand()

planim 09 Lip 2007 13:17 4427 20
REKLAMA

Podsumowanie tematu

✨ Dyskusja dotyczy generowania liczb pseudolosowych w środowisku (win)AVR przy użyciu funkcji srand() i rand(). Standardowa funkcja rand() generuje powtarzalne ciągi, dlatego konieczne jest zainicjowanie generatora pseudolosowego funkcją srand() z unikalną wartością, np. z zegara czasu rzeczywistego, którego jednak AVR standardowo nie posiada. Proponowane rozwiązania obejmują wykorzystanie szumu z wolnego portu ADC, pomiar czasu naciśnięcia przycisku z dużą rozdzielczością lub użycie zewnętrznego RTC. Próby generowania losowości poprzez pomiar czasu resetu lub pętli for są nieskuteczne ze względu na deterministyczną naturę procesora i resetowanie timerów. Wykorzystanie ADC wymaga pobierania najmłodszych bitów szumu i ich odpowiedniego przetwarzania (np. usuwania składowej stałej) w celu uzyskania równomiernego rozkładu bitów losowych. Przykładowy kod pokazuje inicjalizację srand() z wartością zapisaną w EEPROM, jednak bez dodatkowej entropii z ADC lub innego źródła losowości efekt jest ograniczony. Zaleca się zbieranie wielu próbek ADC i ich obróbkę, aby uzyskać wartości pseudolosowe o lepszych właściwościach statystycznych.
Wygenerowane przez model językowy.
REKLAMA