mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-15 19:18:11 +00:00
34 lines
982 B
Rust
34 lines
982 B
Rust
extern "C" {
|
|
fn gc_init(start: *mut cty::c_void, end: *mut cty::c_void);
|
|
fn mp_stack_ctrl_init();
|
|
fn mp_stack_set_limit(limit: usize);
|
|
fn mp_init();
|
|
}
|
|
|
|
static mut HEAP: [u8; 20 * 1024 * 1024] = [0; 20 * 1024 * 1024];
|
|
static mut MPY_INITIALIZED: bool = false;
|
|
|
|
/// Initialize the MicroPython environment.
|
|
///
|
|
/// This is very hacky, in no way safe, and should not be used in production.
|
|
/// The stack is configured on a best-effort basis and depending on from where
|
|
/// this is called, you might get errorneous "recursion exceeded" problems.
|
|
///
|
|
/// This should only be called at start of your test function.
|
|
#[cfg(test)]
|
|
pub unsafe fn mpy_init() {
|
|
unsafe {
|
|
if MPY_INITIALIZED {
|
|
return;
|
|
}
|
|
mp_stack_ctrl_init();
|
|
mp_stack_set_limit(6000000);
|
|
gc_init(
|
|
HEAP.as_mut_ptr().cast(),
|
|
HEAP.as_mut_ptr().add(HEAP.len()).cast(),
|
|
);
|
|
mp_init();
|
|
MPY_INITIALIZED = true;
|
|
}
|
|
}
|