我们用rust开发的新版产品刚刚交付,已经在海上安装测试完毕并顺利投产。终于松了口气,同时也有时间和精力来做个全面的总结了。
这个产品,目前差不多有三版:
- 第一个版本是用c+rt-thread写的,投产后出了一个内存泄露的bug,由于我们的产品是安装到海上,bug修复了也很难更新到产品上,最后穷尽洪荒之力才找出对策进行了处置【不是排除】,但现在依然象个定时炸弹一样悬在那。导致我对c失去信心,最终下定决心换用rust
- 第二个是用rust写的demo版本,是基于RTIC框架写的。后因认为RTIC框架的限制比较大,在写完主体功能后就废弃了
- 第三个版本就是基于Embassy框架写的这一刚交付的版本
ps:海上的情况太过复杂,很多情况是我们现在的测试环境无法完全模拟的
本文即是基于笔者开发这三个版本的经验,对rust嵌入式的开发所做的一个阶段性的总结。
开发门槛高 vs 现场智能化
就嵌入式来说,rust+Embassy vs c+rt-thread的门槛是两个级别。
我是java和python的系统工程师,开发第一个版本时,就没用过c,也没开发过嵌入式!但花了一个月的时间,第一个版本就写完了。
开发第三个版本时,有了第一个版本的所有设备功能的开发经验,有第二个版本的rust尝试,但总的开发时间是从年后到5月下旬,合到三个月了。
当然,这里面主要的原因有两个:
1、rust在嵌入式方面的生态没有c这么成熟:有rt-thread这样的RTOS。虽然Embassy也比较成熟了,但它不是一个完整的RTOS,需要花大量的精力来开发一些较为底层的功能部件,如之前介绍过的数据锁:rust嵌入式开发之基于await构造应用级临界区。
当然,如果只是如多数嵌入式的应用场景那样的话,用RTIC框架完全可以: