esp-hal/examples/src/bin/psram_quad.rs
Dániel Buga 5370afb1eb
Build examples in debug mode (#2078)
* Build examples in debug mode

* Allow building psram examples in debug mode in CI

* Don't rebuild tests, try to avoid rebuilding dependencies
2024-09-05 10:04:07 +00:00

56 lines
1.3 KiB
Rust

//! This shows how to use PSRAM as heap-memory via esp-alloc
//!
//! You need an ESP32, ESP32-S2 or ESP32-S3 with at least 2 MB of PSRAM memory.
//% CHIPS: esp32 esp32s2 esp32s3
//% FEATURES: psram-2m
#![no_std]
#![no_main]
extern crate alloc;
use alloc::{string::String, vec::Vec};
use esp_backtrace as _;
use esp_hal::{prelude::*, psram};
use esp_println::println;
#[global_allocator]
static ALLOCATOR: esp_alloc::EspHeap = esp_alloc::EspHeap::empty();
fn init_psram_heap() {
unsafe {
ALLOCATOR.init(psram::psram_vaddr_start() as *mut u8, psram::PSRAM_BYTES);
}
}
#[cfg(is_not_release)]
compile_error!("PSRAM example must be built in release mode!");
#[entry]
fn main() -> ! {
let peripherals = esp_hal::init(esp_hal::Config::default());
psram::init_psram(peripherals.PSRAM);
init_psram_heap();
println!("Going to access PSRAM");
let mut large_vec = Vec::<u32>::with_capacity(500 * 1024 / 4);
for i in 0..(500 * 1024 / 4) {
large_vec.push((i & 0xff) as u32);
}
println!("vec size = {} bytes", large_vec.len() * 4);
println!("vec address = {:p}", large_vec.as_ptr());
println!("vec[..100] = {:?}", &large_vec[..100]);
let string = String::from("A string allocated in PSRAM");
println!("'{}' allocated at {:p}", &string, string.as_ptr());
println!("done");
loop {}
}