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