没深刻体会过rust开发的好处,是无法理解我前面说的“降维打击”这四个字的厚重的。
所谓的后期调试阶段之类的优劣,只有在同层次的情况下才好谈。而rust压根就不需要什么后期调试阶段。
举个例子,比如我这块的代码:
let spi_mosi = pins.gpio15.into_push_pull_output();
let spi_miso = pins.gpio12.into_floating_input();
let spi_sclk = pins.gpio14.into_floating_input();
let spi = bsp::hal::spi::Spi::<_, _, _, 8>::new(pac.SPI1, (spi_mosi, spi_miso, spi_sclk));
let mut spi = spi.init_slave(&mut pac.RESETS, embedded_hal::spi::MODE_3);
注意看最后一行,一开始我也不知道怎么用spi,抄的example里面例子。example里用的是spi.init,这个是master模式。而我需要的slave模式要用init_slave初始化,但这一切我当时都不知道。
放c环境里原样照抄的代码肯定是能跑的。然后你就会发现不work,然后你就得拿示波器测来测去。运气不好没第一时间怀疑到这里,可能还要搭个最小系统,好多天就搭进去了。这就是所谓的“后期调试阶段”。
但在rust里,这里原样照抄来的spi.init是编译不过的。因为rust知道spi.init是master模式,而master模式会把sck配置成输出,而我在前面的声明中定义了spi sck是输入。编译器直接就会把这个矛盾指出来。这就是所谓的最好的解决问题的办法,是让这个问题直接不存在。这就是所谓的你会被逼着只能写出尽量正确的代码。
而且,rust本身就是个很完美的hal抽象层。事实上我现在的代码就可以同时跑在rp2040和esp32上。
包括esp32的Xtensa core和risc-v core。
并且,因为我还要被结构,机械设计等各方面的问题分心。所以firmware这块是我朋友和我一起写的。他是cs出生,连spi是个啥都不知道,纯嵌入式新手。而且他在地球另一头,跟我有时空阻隔,连个硬件开发环境都没有,根本就不可能联调。但他写的代码就是拿过来直接跑,直接就ok的。后期调试?项目交接?这些都不存在。
至于招聘难度,这个肯定会比招c要难。但就如我前面说的,在ai的辅助下一个老手熟练掌握rust,也就是一个月的时间而已。而rust+ai释放的生产力足以顶一个团队。找到一两个高手让他转rust就行,这一点并不难。
【 在 conepoint 的大作中提到: 】
: 嵌入式是纯C的天下,因为提升的那点开发效率相对后期调试阶段代码可读性要求与项目交接人员招聘难度,可能得不偿失。
:
--
FROM 121.225.189.*