Crateهای دسترسی جانبی
گزینه svd2rust
که wrapperهای Rust عمدتاً ایمن را برای تجهیزات جانبی دارای memory-map از فایلهایCMSIS-SVD تولید میکند.
#![no_main] #![no_std] extern crate panic_halt as _; use cortex_m_rt::entry; use nrf52833_pac::Peripherals; #[entry] fn main() -> ! { let p = Peripherals::take().unwrap(); let gpio0 = p.P0; // Configure GPIO 0 pins 21 and 28 as push-pull outputs. gpio0.pin_cnf[21].write(|w| { w.dir().output(); w.input().disconnect(); w.pull().disabled(); w.drive().s0s1(); w.sense().disabled(); w }); gpio0.pin_cnf[28].write(|w| { w.dir().output(); w.input().disconnect(); w.pull().disabled(); w.drive().s0s1(); w.sense().disabled(); w }); // Set pin 28 low and pin 21 high to turn the LED on. gpio0.outclr.write(|w| w.pin28().clear()); gpio0.outset.write(|w| w.pin21().set()); loop {} }
- فایلهای SVD (System View Description) در واقع فایلهای XML هستند که معمولاً توسط فروشندگان تجهیزات ریزپردازنده ارائه میشوند که memory map دستگاه را توصیف میکنند.
- آنها بر اساس peripheral، register، field و value، با نام، توضیحات، آدرس و غیره سازماندهی میشوند.
- فایلهای SVD اغلب دارای باگ و ناقص هستند، بنابراین پروژههای مختلفی وجود دارد که اشتباهات را اصلاح میکنند، جزئیات گمشده را اضافه میکنند و crateهای تولید شده را منتشر میکنند.
cortex-m-rt
جدول برداری را از جمله موارد دیگر ارائه میدهد.- اگر
cargo install cargo-binutils
را انجام دهید، میتوانیدcargo objdump --bin pac -- -d --no-show-raw-insn
را اجرا کنید تا باینری حاصل را ببینید.
مثال را با:
cargo embed --bin pac