Я пытаюсь написать многопоточное голое железное приложение для STM32F4Discovery с использованием Real-Time For Masses (RTFM) crate .Я собрал воедино минимальное приложение из примера для платы STM32F3Discovery и этого примера :
#![deny(unsafe_code)]
#![no_main]
#![no_std]
extern crate cortex_m;
extern crate cortex_m_rtfm as rtfm;
extern crate cortex_m_semihosting;
extern crate panic_semihosting;
extern crate stm32f4;
use stm32f4::stm32f407;
use rtfm::app;
app! {
device: stm32f407,
}
fn init(_p: init::Peripherals) {
}
fn idle() -> ! {
loop {
rtfm::wfi();
}
}
Я могу получить его для компиляции, но связывая с ржавчиной-lld завершается с
= note: rust-lld: error: undefined symbol: main
Я в замешательстве, потому что когда я запускаю cargo expand
, я получаю основную функцию:
fn main() {
#![allow(path_statements)]
let init: fn(init::Peripherals) = init;
rtfm::atomic(unsafe { &mut rtfm::Threshold::new(0) },
|_t|
unsafe {
let _late_resources =
init(init::Peripherals{core:
::stm32f407::CorePeripherals::steal(),
device:
::stm32f407::Peripherals::steal(),});
});
let idle: fn() -> ! = idle;
idle();
}
Я новичок в Rust (на самом деле я былнадеясь выучить язык с помощью этого проекта) и не знаю, где может быть ошибка.