Отсутствует `start` lang_item при использовании Real-Time For Masses - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь написать многопоточное голое железное приложение для STM32F4Discovery с использованием Real-Time For Masses (RTFM) crate .Я собрал воедино минимальное приложение из примера для платы STM32F3Discovery и этого примера :

#![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 голосов
/ 10 октября 2018

Я нашел обходной путь в проблемах RTFM на GitHub , который позволяет скомпилировать приведенный выше код:

  1. import 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 {}
    }
    

Я еще не проверял это, но он компилируется без проблем.

...