大规模使用实时时缺少`start` lang_item

时间:2018-09-20 15:58:02

标签: rust embedded cortex-m stm32f4discovery

我正在尝试使用大众实时(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!宏坏了还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

我在RTFM的issues on GitHub中找到了一种解决方法,该方法可以编译上面的代码:

  1. 导入cortex-m-rt及其entry

    #[macro_use(entry)]
    extern crate cortex_m_rt as rt;
    
  2. #![no_main]添加到源头

  3. 使用entry宏包装主要功能:

    #[entry]
    fn entry_wrap() -> ! {
        main();
        loop {}
    }
    

我还没有测试过,但是它编译没有问题。