你不太了解rust...
rust的定位就是成为一门新的底层语言取代c的地位,也即可以达到和c一样的小体积和运行效率。同时作为一门更新的语言,具备zero abstraction能力,也就是说可以比c更高效。比如stm32的hal库用起来对资源是巨大的浪费,几个资源用的比较满的项目都是直接操作寄存器而不是用hal的。但在rust里你指定了器件型号之后,整个底层库都会按照这个器件型号做调整,功能一个不多一个不少。别说资源冲突外设差别这种大差别了,哪怕因为小型号改动,导致某个寄存器的某一个bit的定义没了或者变了,hal库都会在编译期报错。
rust的目标是在语言层面就消除可能产生的资源使用冲突问题(内存访问只是资源的一种),这对于嵌入式开发是有很大价值的。因为嵌入式开发调试手段有限,靠传统的测试手段来提升代码质量并不如pc平台下那么有效。很多面向消费类电子的硬件产品都有死机问题,只不过靠watchdog凑合过去罢了。我见过一个系统,里面的有个几千行规模的if-then-else分支,我说至少整理下整理成switch-case形式吧,看起来清晰一点,人家跟我说尝试过,但只要做这个改动,哪怕其他逻辑完全不变,编译出来的代码运行直接就会死机。这意味着什么?这意味着现在能运行的代码一定有内存越界、野指针等问题,能正常运行只是一种巧合。但这样的产品就是上万台的发布出去了。
最重要的是,rust这种追求安全的风格是处处深入骨髓的,比如它的库函数虽然版本号很低才0.0x,但在风格上都做的很极致。比如stm32的库,它的register库是一段脚本,从官方拉svd文件下来,再打上官方的以及第三方的勘误调整补丁,然后直接转换成rust代码和对应文档。整个过程你无法以勘误以外的形式去修改干预。比如我给它加上gd32支持,也只能另开一个gd32类别,自己写个勘误表去基于stm32修改调整,并且每一个bit都有文档说明。每一个bit是ro/wo/rw都有定义,每一个取值都有枚举名。甚至同一个寄存器同一个bit同一个0/1的取值,你是读到还是写入,枚举名都是不同的。比如读到叫enabled写入叫enable。并且代码里也只能用枚举名来读写访问。这个跟c一个头文件定义一个寄存器偏移量,最多定义几个枚举值就完事了,细致程度完全不是一个层次的。这种做事方式让可读性足够的好,同时也从机制上断绝了出错的可能性,这种风格注定能产生可信的结果。
【 在 conepoint 的大作中提到: 】
: 设备结构多有体积要求,客户喜欢轻便小巧的,同时考虑工艺维护需求,往往是P封装的小芯片,加上量大的成本乘数效应,如此程序空间有限,只允许轻便型的开发工具.加上某些场合特定时序与低功耗要求,只能手动针对性优化不允许黑箱模型,这些是C与汇编的主场.
: 因此硬件工程师首选C为开发工具,如果说想软硬皆通,再加一门PYTHON做上位机与数据分析,包括文件读写数值计算及可视化以进行相关应用领域的信号处理与业务拓展.
:
--
修改:lvsoft FROM 180.111.48.*
FROM 180.111.48.*