#![no_std] #![feature(rustc_private)] extern crate fusible; use core::pin::Pin; use rust_threadx_cortex_m as _; use rust_threadx_stdio_imxrt_usbd as stdio; #[doc(hidden)] #[unsafe(no_mangle)] pub unsafe extern "C" fn _tx_initialize_low_level() { use cortex_m::{ Peripherals, peripheral::{scb::SystemHandler, syst::SystClkSource}, }; cortex_m::interrupt::disable(); unsafe { let Peripherals { mut SYST, mut SCB, .. } = Peripherals::steal(); SCB.set_priority(SystemHandler::SysTick, 0x40); SCB.set_priority(SystemHandler::PendSV, 0xff); SCB.set_priority(SystemHandler::SVCall, 0xff); SYST.set_clock_source(SystClkSource::External); SYST.set_reload(100_000 / 100 - 1); SYST.clear_current(); SYST.enable_interrupt(); SYST.enable_counter(); } } use fusible::thread::{StaticStack, Thread, ThreadContext}; static STACK: StaticStack<512> = StaticStack::new(); static THREAD: ThreadContext = Thread::context(); #[unsafe(no_mangle)] #[doc(hidden)] pub extern "C" fn __rust_threadx_app_define() { let instances = teensy4_bsp::board::instances(); let mut resources = teensy4_bsp::board::t40(instances); let led = teensy4_bsp::board::led(&mut resources.gpio2, resources.pins.p13); Thread::create( Pin::static_ref(&THREAD), STACK.take().unwrap(), &Default::default(), move || loop { fusible::thread::sleep(50); led.toggle(); }, ) .unwrap(); stdio::start(resources.usb, interrupt::USB_OTG1); } use teensy4_bsp::{ral::interrupt, rt::interrupt}; #[interrupt] fn USB_OTG1() { stdio::on_interrupt(interrupt::USB_OTG1); }