44 lines
1.2 KiB
Rust
44 lines
1.2 KiB
Rust
//! Macros provided for convenience
|
|
|
|
/// Initialize a global heap allocator providing a heap of the given size in
|
|
/// bytes
|
|
#[macro_export]
|
|
macro_rules! heap_allocator {
|
|
($size:expr) => {{
|
|
static mut HEAP: core::mem::MaybeUninit<[u8; $size]> = core::mem::MaybeUninit::uninit();
|
|
|
|
unsafe {
|
|
$crate::HEAP.add_region($crate::HeapRegion::new(
|
|
HEAP.as_mut_ptr() as *mut u8,
|
|
$size,
|
|
$crate::MemoryCapability::Internal.into(),
|
|
));
|
|
}
|
|
}};
|
|
}
|
|
|
|
/// Initialize a global heap allocator backed by PSRAM
|
|
///
|
|
/// You need a SoC which supports PSRAM
|
|
/// and activate the feature to enable it. You need to pass the PSRAM peripheral
|
|
/// and the psram module path.
|
|
///
|
|
/// # Usage
|
|
/// ```rust, no_run
|
|
/// esp_alloc::psram_allocator!(peripherals.PSRAM, hal::psram);
|
|
/// ```
|
|
#[macro_export]
|
|
macro_rules! psram_allocator {
|
|
($peripheral:expr, $psram_module:path) => {{
|
|
use $psram_module as _psram;
|
|
let (start, size) = _psram::psram_raw_parts(&$peripheral);
|
|
unsafe {
|
|
$crate::HEAP.add_region($crate::HeapRegion::new(
|
|
start,
|
|
size,
|
|
$crate::MemoryCapability::External.into(),
|
|
));
|
|
}
|
|
}};
|
|
}
|