#[macro_export]
macro_rules! heap_allocator {
($(#[$m:meta])* size: $size:expr) => {{
$(#[$m])*
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(),
));
}
}};
}
#[macro_export]
macro_rules! psram_allocator {
($peripheral:expr, $psram_module:path) => {
$crate::psram_allocator!($peripheral, $psram_module, Default::default());
};
($peripheral:expr, $psram_module:path, $config:expr) => {{
use $psram_module as _psram;
let psram = _psram::Psram::new($peripheral, $config);
$crate::psram_allocator!(&psram);
}};
(&$psram:ident) => {
let (start, size) = $psram.raw_parts();
unsafe {
$crate::HEAP.add_region($crate::HeapRegion::new(
start,
size,
$crate::MemoryCapability::External.into(),
));
}
};
}