mik32-runtime
Минимальный no_std runtime/startup для MIK32 Amur.
Подключение
Добавьте runtime в Cargo.toml приложения:
[]
= "0.1"
И настройте target и linker script в .cargo/config.toml приложения:
[]
= "riscv32imc-unknown-none-elf"
[]
= [
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=--gc-sections",
]
Установить target можно командой:
rustup target add riscv32imc-unknown-none-elf
Использование
use entry;
!
Приложение также должно определить #[panic_handler]. Функция #[entry]
обязана иметь сигнатуру [unsafe] fn() -> !.
Прерывания и critical-section
Runtime экспортирует mik32_runtime::interrupt с базовыми операциями:
interrupt::disable()выключаетmstatus.MIEиmie.MEIE, возвращая прежнее состояние;unsafe interrupt::restore(state)восстанавливает состояние послеdisable;unsafe interrupt::enable()включаетmstatus.MIEиmie.MEIE;interrupt::free(|| { ... })выполняет замыкание в локальной критической секции.
Если приложению нужен стандартный backend для crate critical-section, включите feature
critical-section:
= { = "0.1", = ["critical-section"] }
После этого critical_section::with будет использовать single-hart реализацию runtime.
Карта памяти
По умолчанию включена feature memory-default:
- EEPROM:
0x0100_0000, 8 КиБ; - SRAM:
0x0200_0000, 16 КиБ.
Для исполнения из SPIFI отключите default features и включите memory-spifi:
= { = "0.1", = false, = ["memory-spifi"] }
Features взаимоисключающие. build.rs выбирает нужный layout и публикует его
линкеру под именем memory.x.
Hooks и специальные секции
Приложение может определить символы SmallSystemInit и SystemInit; они
вызываются после инициализации RAM, перед #[entry]. Код, помеченный
#[unsafe(link_section = ".ram_text")], загружается из EEPROM/SPIFI в SRAM.
Под trap и обычный RAM-код зарезервирован единый load image в начале SRAM;
стек размером 1 КиБ расположен в конце SRAM.
Сборка
cargo build --release --example minimal
Результат находится в
target/riscv32imc-unknown-none-elf/release/examples/minimal.
Лицензия
CC0-1.0. Насколько это допускает закон, авторы передали эту работу в общественное достояние.