我正在尝试使用大众实时(RTFM)crate来为STM32F4Discovery编写多线程裸机应用程序。我已经从example中为STM32F3Discovery开发板和this example开发了一个最小的应用程序:
#![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();
}
}
编译失败,
error: requires `start` lang_item
我是Rust的新手(实际上,我希望通过这个项目来学习语言),却不知道错误可能在哪里。仅仅是app!
宏坏了还是我错过了什么?
答案 0 :(得分:1)
我在RTFM的issues on GitHub中找到了一种解决方法,该方法可以编译上面的代码:
导入cortex-m-rt
及其entry
宏
#[macro_use(entry)]
extern crate cortex_m_rt as rt;
将#![no_main]
添加到源头
使用entry
宏包装主要功能:
#[entry]
fn entry_wrap() -> ! {
main();
loop {}
}
我还没有测试过,但是它编译没有问题。