咳咳,一眼望过去全是unwrap()....
【 在 lvsoft (Lv(The Last Guardian)) 的大作中提到: 】
: 没看过gd32的库,但我觉得stm32的库确实就是稀烂,绝对不是这点点命名风格问题。
: 我最近开始尝试用rust做stm32的开发了,目前感觉良好。
: rust的好处有几个,一个是非常严格的编译期代码检查,基本上能通过编译的代码就不会
: 有c里面的内存管理问题。对于嵌入式设备来说,你只要操行逻辑问题即可,不用担心代
: 码会跑飞。
: 第二个是rust能做到zero cost abstraction,不像c的hal库,一用编译出来的尺寸
: 就暴涨。
: 第三个是rust有很强的描述能力,都2020年了,用c做点事情实在是太折腾了。用了
: rust总算有点新时代语言的感觉了...
: 第四个是目前rust还相对小众,但这种语言设计风格掌握的门槛较高,反过来也只有高手
: 和对某些方面有完美主义追求的人才会使用,所以目前rust的库代码质量相对较高,是我
: 看到的各种生态中质量最高的,没有之一。
: 可以去github看看example感受下:
:
https://github.com/stm32-rs/stm32f1xx-hal/tree/master/examples: 我选个adc的例子贴下,这tm才叫HAL库啊,之前的stm32官方库那写的都是什么鬼东西。
: #![deny(unsafe_code)]
: #![no_main]
: #![no_std]
: use panic_semihosting as _;
: use cortex_m_rt::entry;
: use stm32f1xx_hal::{adc, pac, prelude::*};
: use cortex_m_semihosting::hprintln;
: #[entry]
: fn main() -> ! {
: // Acquire peripherals
: let p = pac::Peripherals::take().unwrap();
: let mut flash = p.FLASH.constrain();
: let mut rcc = p.RCC.constrain();
: // Configure ADC clocks
: // Default value is the slowest possible ADC clock: PCLK2 / 8. Meanwhile ADC
: // clock is configurable. So its frequency may be tweaked to meet certain
: // practical needs. User specified value is be approximated using supported
: // prescaler values 2/4/6/8.
: let clocks = rcc.cfgr.adcclk(2.mhz()).freeze(&mut flash.acr);
: hprintln!("adc freq: {}", clocks.adcclk().0).unwrap();
: // Setup ADC
: let mut adc1 = adc::Adc::adc1(p.ADC1, &mut rcc.apb2, clocks);
: #[cfg(feature = "stm32f103")]
: let mut adc2 = adc::Adc::adc2(p.ADC2, &mut rcc.apb2, clocks);
: // Setup GPIOB
: let mut gpiob = p.GPIOB.split(&mut rcc.apb2);
: // Configure pb0, pb1 as an analog input
: let mut ch0 = gpiob.pb0.into_analog(&mut gpiob.crl);
: #[cfg(feature = "stm32f103")]
: let mut ch1 = gpiob.pb1.into_analog(&mut gpiob.crl);
: loop {
: let data: u16 = adc1.read(&mut ch0).unwrap();
: hprintln!("adc1: {}", data).unwrap();
: #[cfg(feature = "stm32f103")]
: {
: let data1: u16 = adc2.read(&mut ch1).unwrap();
: hprintln!("adc2: {}", data1).unwrap();
: }
: }
: 服, 不过纯小写+下划线的命名风格比匈牙利式看起来更顺眼.
--
FROM 114.84.111.*