aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/nrf/src/bin/rng.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/examples/nrf/src/bin/rng.rs b/examples/nrf/src/bin/rng.rs
index a4c204c2e..6aa43d0db 100644
--- a/examples/nrf/src/bin/rng.rs
+++ b/examples/nrf/src/bin/rng.rs
@@ -10,15 +10,15 @@ mod example_common;
10 10
11use defmt::panic; 11use defmt::panic;
12use embassy::executor::Spawner; 12use embassy::executor::Spawner;
13use embassy_nrf::Peripherals;
14use embassy_nrf::rng::Rng;
15use embassy_nrf::interrupt;
16use embassy::traits::rng::Rng as _; 13use embassy::traits::rng::Rng as _;
14use embassy_nrf::interrupt;
15use embassy_nrf::rng::Rng;
16use embassy_nrf::Peripherals;
17use rand::Rng as _; 17use rand::Rng as _;
18 18
19#[embassy::main] 19#[embassy::main]
20async fn main(_spawner: Spawner, p: Peripherals) { 20async fn main(_spawner: Spawner, p: Peripherals) {
21 let mut rng = Rng::new(p.RNG, interrupt::take!(RNG)); 21 let mut rng = unsafe { Rng::new(p.RNG, interrupt::take!(RNG)) };
22 22
23 // Async API 23 // Async API
24 let mut bytes = [0; 4]; 24 let mut bytes = [0; 4];
@@ -27,4 +27,17 @@ async fn main(_spawner: Spawner, p: Peripherals) {
27 27
28 // Sync API with `rand` 28 // Sync API with `rand`
29 defmt::info!("A random number from 1 to 10: {:?}", rng.gen_range(1..=10)); 29 defmt::info!("A random number from 1 to 10: {:?}", rng.gen_range(1..=10));
30
31 let mut bytes = [0; 1024];
32 rng.fill_bytes(&mut bytes).await.unwrap();
33 let zero_count: u32 = bytes.iter().fold(0, |acc, val| acc + val.count_zeros());
34 let one_count: u32 = bytes.iter().fold(0, |acc, val| acc + val.count_ones());
35 defmt::info!(
36 "Chance of zero: {}%",
37 zero_count * 100 / (bytes.len() as u32 * 8)
38 );
39 defmt::info!(
40 "Chance of one: {}%",
41 one_count * 100 / (bytes.len() as u32 * 8)
42 );
30} 43}