Expand description
§mik32-runtime
Минимальный no_std runtime/startup для MIK32 Amur.
§Подключение
Добавьте runtime в Cargo.toml приложения:
[dependencies]
mik32-runtime = "0.1"И настройте target и linker script в .cargo/config.toml приложения:
[build]
target = "riscv32imc-unknown-none-elf"
[target.riscv32imc-unknown-none-elf]
rustflags = [
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=--gc-sections",
]Установить target можно командой:
rustup target add riscv32imc-unknown-none-elf§Использование
#![no_std]
#![no_main]
use mik32_runtime::entry;
#[entry]
fn main() -> ! {
loop {}
}
#[unsafe(export_name = "trap_handler")]
fn trap() {
// Обработать и сбросить источник прерывания.
}Приложение также должно определить #[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:
mik32-runtime = { version = "0.1", features = ["critical-section"] }После этого critical_section::with будет использовать single-hart реализацию runtime.
§Карта памяти
По умолчанию включена feature memory-default:
- EEPROM:
0x0100_0000, 8 КиБ; - SRAM:
0x0200_0000, 16 КиБ.
Для исполнения из SPIFI отключите default features и включите memory-spifi:
mik32-runtime = { version = "0.1", default-features = false, features = ["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. Насколько это допускает закон, авторы передали эту работу в общественное достояние.
Modules§
- interrupt
- Machine interrupt control for MIK32.
Attribute Macros§
- entry
- Declares the program entry point called after runtime initialization.