Random в ESP32

Сегодня поговорим про random в esp32. Это ничто иное как генерация случайных чисел (ГСЧ). Random в ESP32 использует внутренний источник энтропии (внешний источник случайности) или RF систему как источник случайности (WI-FI, Bluetooth).

Случайные и псевдослуайные числа

Во время запуска загрузчик ESP-IDF временно включает источник энтропии, не являющийся радиочастотным (внутренний шум опорного напряжения), который обеспечивает энтропию для любого первого генерации ключа загрузки. Однако после того, как приложение начинает выполняться, обычно доступны только псевдослучайные числа, пока не будет инициализирован Wi-Fi или Bluetooth.

Чтобы временно включить источник энтропии во время запуска приложения или для приложения, которое не использует Wi-Fi или Bluetooth, вызовите функцию bootloader_random_enable(), чтобы повторно включить внутренний источник энтропии. Эту функцию bootloader_random_disable() необходимо вызвать, чтобы снова отключить источник энтропии, прежде чем использовать ADC, I2S, Wi-Fi или Bluetooth.

random в ESP32

Библиотеки генерации случайных чисел

esp_random.h

Что бы мы могли использовать функцию генерации случайных чисел в ESP32, необходимо подключить библиотеку esp_random.h. В библиотеке описаны функции для работы с встроенным ГСЧ (генератором случайных чисел).

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_random.h"

Что бы сгенерировать случайное число, используйте функцию esp_random(). Она возвращает случайное число от 0 до UINT32_MAX.

Так же в ESP32 предусмотрена функция для генерации последовательности случайных чисел:

void esp_fill_random(void * buf, size_t len)

где buf — буфер для сгенерированных чисел, len - размерность буфера (количество значений).

bootloader_random.h

Этот файл заголовка является частью API, предоставляемого компонентом bootloader_support. Чтобы объявить, что ваш компонент зависит от bootloader_support, добавьте в CMakeLists.txt следующее:

REQUIRES bootloader_support или PRIV_REQUIRES bootloader_support

Библиотека содержит следующие функции:

bootloader_random_enable

void bootloader_random_enable(void) 

Включает внутренний источник энтропии для ГСЧ, если подсистема RF отключена.

Точный механизм источника внутренней энтропии зависит от используемого чипа, но все SoC используют АЦП для непрерывного смешивания случайных битов (считывание внутреннего шума). Функцию можно вызвать из кода приложения, если требуются истинные случайные числа без инициализированной RF-подсистемы. Это может иметь место в коде раннего запуска приложения, когда радиочастотная подсистема еще не запущена или если её не следует включать для энергосбережения.

Внимание


Данную функцию не следует использовать, если другие блоки программы используют RF или АЦП.

bootloader_random_disable

void bootloader_random_disable(void)

Как следует из названия, данная функция отключает внутренний источник энтропии. Функция должна быть вызвана после bootloader_random_enable() и до инициализации функций RF-подсистемы, ADC или I2S.

bootloader_fill_random

void bootloader_fill_random(void * buff, size_t len)

Генерирует последовательность случайных чисел в буфер buff в количестве len.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии