- 主题:GD32的库真是写的稀烂
唉
给的少就不好好写代码么?
按说他家上市 应该不少财务自由的啊
--
FROM 106.39.50.*
我觉得GD32的库写得比STM32的库更好,虽然有些bug
尤其是USB库,STM32的才是稀烂。
【 在 Qlala (Qlala) 的大作中提到: 】
: 唉
: 给的少就不好好写代码么?
: 按说他家上市 应该不少财务自由的啊
: ...................
--
FROM 36.45.172.*
对了, f4的usb你玩了没? f1和f3似乎能通用, f0也差不多, 但是到f4完全变样了
【 在 spadger (imdx) 的大作中提到: 】
: 我觉得GD32的库写得比STM32的库更好,虽然有些bug
: 尤其是USB库,STM32的才是稀烂。
--
FROM 106.121.158.*
具体怎么烂法, 举个例子?
我是觉得取寄存器时用函数调用风格的RDATA(USART1)之类不如stm32官方库的USART1->RDR看着舒服, 不过纯小写+下划线的命名风格比匈牙利式看起来更顺眼.
个人喜好问题吧
【 在 Qlala (Qlala) 的大作中提到: 】
唉
给的少就不好好写代码么?
按说他家上市 应该不少财务自由的啊
--
FROM 106.121.158.*
最近找了几个第三方的usb库, teenyusb, tinyusb, libusb_stm32
结果前两个都是配合hal用的, 第三个似乎看着顺眼些
【 在 spadger (imdx) 的大作中提到: 】
我觉得GD32的库写得比STM32的库更好,虽然有些bug
尤其是USB库,STM32的才是稀烂。
【 在 Qlala (Qlala) 的大作中提到: 】
: 唉
: 给的少就不好好写代码么?
: 按说他家上市 应该不少财务自由的啊
: ...................
--
FROM 106.121.158.*
f4的usb我玩过,也一样有不稳定问题。
【 在 tom6bj (tom) 的大作中提到: 】
: 对了, f4的usb你玩了没? f1和f3似乎能通用, f0也差不多, 但是到f4完全变样了
--
FROM 49.94.69.*
没看过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();
}
}
【 在 tom6bj (tom) 的大作中提到: 】
: 具体怎么烂法, 举个例子?
: 我是觉得取寄存器时用函数调用风格的RDATA(USART1)之类不如stm32官方库的USART1->RDR看着舒
服, 不过纯小写+下划线的命名风格比匈牙利式看起来更顺眼.
: 个人喜好问题吧
: ...................
--
修改:lvsoft FROM 49.94.69.*
FROM 49.94.69.*
以后有空试试
引入的新字符不少啊, 猛一看有点晕...
【 在 lvsoft (Lv(The Last Guardian)) 的大作中提到: 】
: 没看过gd32的库,但我觉得stm32的库确实就是稀烂,绝对不是这点点命名风格问题。
: 我最近开始尝试用rust做stm32的开发了,目前感觉良好。
: rust的好处有几个,一个是非常严格的编译期代码检查,基本上能通过编译的代码就不会
: ...................
--
FROM 106.121.158.*
没多少吧...这个可读性应该是一目了然的,学没学过没影响。
里面出现的比较多的是mut和unwrap,
mut是声明这是变量,rust默认“变量”都是immutable的...
rust作为新时代的语言,比较鼓励用函数式的方式写代码,所以“变量”是immutable的
情况比较多,mutable才是少数。或者准确的说,变量这个概念就是问题的根源,能把这
个概念消除的越彻底,麻烦就越少。
unwrap是新语言里常用的异常处理方式,比如你要返回一个数字42,但这个操作可能会
失败。c里面是返回-1这种作为errno,c++里是抛出异常,rust里是包裹一层返回
Some(42),如果错误就返回None。
这个包裹的一层在使用的时候自然需要unwrap,这个时候就可以检查是否产生错误了。
所以里面出现了很多unwrap。其实可以用一个?代替,但在main里因为一些细节问题
不能这么操作。
hprintln!这个!号其实是宏...还有#[xxx]这个也是宏...rust的宏比较的骚操作...
前者是函数宏还比较简单,类似于强化版的c宏;后者是过程宏...直接丢文法解析器的
token stream给你自己看着办...所以理论上你可以用过程宏实现任何语言...
同时也是为啥rust可以做到zero cost,因为这里本质上是meta programming。
此外还有&这个符号,是rust最为核心的生命周期管理的东西。看起来像c++的引用,但
在rust里叫借用。rust里每个资源都有且仅有一个owner,如果你要把值传递给别的变
量,要么owner转移过去,要么借用之后归还。rust就是靠这个提供任何资源在生命周期
内只能有且只有一个地方可以控制的严格保证的。
rust学习门槛是比较高的,我目前也还处于新手阶段。其实我2-3年前就想用rust搞mcu
开发了,连续好几年每年新年愿望都是“今年一定要学rust...”,还是得感谢这一轮疫
情...
【 在 tom6bj (tom) 的大作中提到: 】
: 以后有空试试
: 引入的新字符不少啊, 猛一看有点晕...
--
修改:lvsoft FROM 49.94.69.*
FROM 49.94.69.*
好吧,虽然没多少, 也不少了...
【 在 lvsoft (Lv(The Last Guardian)) 的大作中提到: 】
: 没多少吧...这个可读性应该是一目了然的,学没学过没影响。
: 里面出现的比较多的是mut和unwrap,
: mut是声明这是变量,rust默认“变量”都是immutable的...
: ...................
--
FROM 106.121.158.*