微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 硬件电路设计讨论 > 用rust写嵌入式code

用rust写嵌入式code

时间:12-13 整理:3721RD 点击:
http://blog.japaric.io/quickstart/
这是个用rust给STM32F303VCT6写code的example。
不了解rust语言的我这里简单介绍下。rust基本上是个c的替代品,主要想解决c语言的
一系列问题,尤其是用c很容易写出有问题的代码。
用rust写出来的程序,基本上只要能通过编译就不太可能有严重的问题。我觉得这个特
性非常适合嵌入式开发。毕竟开发代码规模一大很容易引入bug,而嵌入式环境相对于
x86来说,缺乏强大的调试工具,debug会比较困难。另一方面c语言也太太太旧了,缺乏
模板,泛型,类型推断等等现代语言特征,开发效率不高,代码也不容易复用。
当然rust也有rust的问题。最大的问题是这个语言用起来的门槛比较高。因为rust对程
序的正确性要求很严格,而写出正确的程序比写出能跑的程序要难得多。所以也许你会
为让代码顺利的通过编译而挣扎...但我还是觉得让问题在编译的时候暴露,比在运行的
时候费力去debug要划算的多。所以我是有个计划以后全部迁移到rust上去~
半年前我尝试过用rust给stm32写个hello world,把一大堆底层的bootstrap问题解决
掉,但那个项目开了个头就弃坑了...这次看到有人把这个我想做的事情做了,于是赶快
转过来推荐给各位~

我不懂
为啥不能用VB给STM32写程序?
这个入门低啊

简单尝试过Rust,整个工具链中最讨厌的是Cargo,不联网不好用斯基。
和Go在这方面的用户体验相比差不少。
Rust似乎内置的jemalloc体积甚大,嵌入式环境下的情况没尝试过。
此外语法实在是看着有点别扭。。。
猛快糙的需求,可以考虑一下nim。
缺点是太小众,且目前不清楚中断怎么处理。

感觉C写嵌入式挺好的,写出有问题的代码不容易。移植性也挺好。
STM32做到二进制兼容也不难。

之前有人讨论过用c++写avr和stm32的...
结论是只要稍微能干点活的话, 代码尺寸就是100k以上了, flash容量64k及以下的都去死吧
好象也有人把python移植到stm32上了, 不过能干活的时候代码尺寸都是MB级了.

编译后不都是010101么,难道编译后一个是自行车一个是非机?

Old段子, 估计有快20年了
你的任务:射击你自己的脚丫子。
C 语言:你射击你自己的脚丫子。
C++ 语言:你意外地创建了你自己的一打实例对象,并向这24只脚丫子射击。你无法为你自己包
扎伤口,因为你无法断定哪一个对象是你自己的原始拷贝,哪一个对象是你自己的指针或者
引用,况且那些用指针和引用假冒你的家伙还在不停地叫嚷:“嘿,这就是我,我在这儿!”
FORTRAN 语言:你射击你自己脚丫子上的每一个脚趾,直到一只脚上的所有脚趾都被打光,然后切换
到下一层循环,开始射击另一只脚上的脚趾。如果你射光了子弹,你将继续装腔作势地朝你
自己射击,因为你没有异常处理功能。
Pascal 语言:编译器不会让你射击你自己的脚丫子。
Ada 语言:当你正确地把你自己的脚丫子包好以后,你试图并发地完成以下任务:装填子弹,拉
栓,扣扳机,尖叫,射击脚丫子。但是,当你这么做的时候,你会发现这是一个无法完成的
任务,因为你脚丫子的数据类型不匹配。
COBOL 语言:使用柯特45型手枪,瞄准“腿.脚”,将“臂.手.指”放到“手枪.扳机”上,按下去
。然后,将枪收回皮套,检查一下你的鞋带是不是需要重新系一下。
LISP 语言:你射击你自己的假肢,那条假肢拿着枪,你用这枝枪射击你自己的假肢,那条假肢拿
着枪,你用这枝枪射击你自己的假肢,那条假肢拿着枪,你用这枝枪射击你自己的假肢,那
条假肢拿着枪,你用这枝枪射击你自己的假肢,那条假肢拿着枪,你用这枝枪射击你自己的
假肢……
FORTH 语言:脚丫子你自己的射击。
Prolog 语言:你告诉你的程序你想要射击你自己的脚丫子。程序计算出你的射击方法和步骤,但程
序的语法不允许把这些东西讲给你听。
BASIC 语言:你用一把水枪射击你自己的脚丫子。在大型系统中,射击将持续到你的下半身都湿透
了为止。
Visual Basic:你的工作将仅仅“显示”出你射击了你自己的脚丫子,无论你是否在意,你将在这
一过程中得到许许多多乐趣。
HyperTalk 语言:把枪里的第一发子弹塞进你自己的左脚,然后给出结果信息。
Motif 语言:你花了好几天时间,用界面描述语言详细描绘你的脚丫子,你的子弹,子弹的
弹道曲线,以及枪柄上复杂的象牙雕花。当你最后腾出时间装子弹的时候——枪卡壳儿了。
APL 语言:你射击你自己的脚丫子,然后整天琢磨怎么用更少的字符来完成这个任务。
SNOBOL 语言:如果你成功了,射击你自己的左脚;如果你失败了,射击你自己的右脚。
并发 Euclid 语言:你射击你自己的其他人的脚丫子。
370 系统的 JCL 语言:你把你自己的脚丫子放到系统批队列中等待处理,里面要包含至少
400页文档,详细说明你想如何处置你自己的脚丫子。3年以后,你的脚丫子回到你的面前,
整只脚都已经被烤焦了。
Paradox 数据库:不仅你可以射击你自己的脚丫子,你的用户也可以。
Access 数据库:你试图将枪指向你自己的脚丫子,但枪却不停地在你买的Borland产品光盘上射出
洞洞来。
Revelation 数据库:你一旦指出子弹中所含的所有不同元素的功用,你就会确信你有能力射击你自己的
脚丫子了。
dBase 数据库:你买了一枝枪。子弹只在其他公司出售。出售子弹的公司向你保证子弹是可用的,
于是你也买了子弹。然后你发现,那枝枪的下一个版本才可以真正用来做实弹射击。
PL/I 语言:在耗尽了包括子弹在内的所有资源后,数据处理部门将其业务规模翻了一番,新购置
了两台大型计算机,同时弄丢了你脚丫子的原型。
汇编语言:想射击你自己的脚丫子的话,你必须先发明枪、子弹、扳机,以及你自己的脚丫
子。
汇编语言的另一个版本:你搞瘫了操作系统,覆盖了根分区。于是,系统管理员跑过来射击
你的脚丫子。接下来,一番沉思之后,系统管理员射击了他自己的脚丫子,然后单脚跳着,
绕着屋子飞速转圈,射击他看见的每一个人。
Modula-2 语言:等你明白了你实际上不能用这种语言完成任何事情之后,你向你自己的脑袋开了一枪

C Shell语言:你不停地检索文档,你的脚都等得睡着了,然后你向计算机开枪,然后切换到C
语言。
Smalltalk 语言:玩儿了3周的图形功能之后,程序经理射击你的脑袋。或者,你反复做着射击你自己
脚丫子的白日梦。
HTML 语言:
  <a target="http://身体/下半身/腿/脚.假肢">射击这里</a>
Java 语言:射击得非常漂亮,但你的脚无法确定子弹是什么类型的对象,只好忽略了它们。
C# 语言:把你的脚丫子改写成Java程序,然后射击它们。
FTP:
  % ftp lower-body.me.org
  ftp> cd /foot
  ftp> put bullets

Unix:
  % ls
  foot.c foot.h foot.o toe.c toe.o
  % rm * .o
  rm:.o no such file or directory
  % ls
  %
Windows 95:
  d:\setup

Apple 公司:我们允许你射击你自己,但价格很贵哦。
IBM 公司:你把弹夹装到枪里,等半个小时,然后子弹向四面八方发射。如果有一颗子弹碰巧射
中了你的脚,那你真是太幸运了。
Microsoft 公司:“脚”这个对象将在下一版本中提供,你需要支付500美金的升级费用。
HP 公司:你可以用这挺机枪射击你自己的脚丫子,但枪的撞针是断的。
Sun 公司:只要Solaris系统一到,你就想射哪儿射哪儿。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top