当前位置: 首页 > news >正文

用d开车

原地址
作者:Dylan Graham.
D:快速/表达力/简单,还可开车.是的,我用d开车.
我的Holden VZ Ute车自带了个垃圾四速自动变速箱.1.5年就坏了,我买了个防弹六速自动变速箱.为了使其工作,我构建自己的电路板,计算机系统和固件来控制变速箱内电磁阀,液压系统和离合器,处理用户输入,换档,接口,并让其假装为原来的4速变速箱.
我很自豪我的解决方案.可在250ms内换档,适合赛车.能快速启动,优点一堆,总之很好.
计算机分两部分:用户界面板,STM32F042来驱动OLED显示.主板,用STM32F407搞定其他的.他们通过CAN线协作.用d来写的.
我用的DbetterC来干的:统调/元编程/易对接C/单元测试/可移植性/共享/@安全友好的社区.

统调

使我代码更清晰,可准确跟踪数据流,而不被一次变量/嵌套调用函数等污染.如引擎控制单元中的:

immutable injectorTime = airStoich(100.kpa, 25.degCelsius).airMass.fuelMass((14.7f).afr).fuelMol.calculateInjectorWidth;

不必后向读代码,数括号,一次变量,这很简洁.

元编程

不要重复,D元编程很牛逼,如控制器中:

struct CANPacket(ushort ID) {enum id = ID;ubyte[8] data;
}
alias HeartbeatPacket = CANPacket!10;
alias BeepHornPacket = CANPacket!140;

他们有相同底层构造,如果CANPacket变了,相应的两个也变了.

对接C

我经常要使用微控器HAL和RTOS,只需要加extern(C),然后就可以使用了.

extern(C) c_setPwm(int solenoid, void* userData); // 声明
c_setPwm(4, null); // 使用

单元测试

d的内置单元测试避免我犯错.我在窗口上跑所有单元测试来保证逻辑正确,然后为微控器构建目标.

可移植性

D通过gdc/ldc支持大量目标平台,不然我得用C++来写代码了.我用ldc,调整命令行参数就可交叉编译了.

共享

D共享来保证线程安全.不完美,但工作得很好.我代码用多线程,需要同步,就标记变量为共享.访问他们时要小心,他同系统锁/互斥锁一起工作.锁定时,可去掉共享,像普通变量一样用.在构/类中很方便.

shared int sensorValue;
sensorValue = 4; //像单线程变量用,错误
atomicStore(sensorValue, 4); //同原子一起用

安全D

@安全禁止粗放内存活动,确保最佳行为.如果你要乱搞,@安全会阻止你.

心理

亚当说:D心理负担小.灵活与表达力可快速转变想法为代码/生产力.D中我不需要折腾太多,我最高效的语言就是D.

最后

我认为,D嵌入式光明未来.我也将继续用D.


http://www.taodudu.cc/news/show-6310415.html

相关文章:

  • 【physx/wasm】在physx中添加自定义接口并重新编译wasm
  • excel---常用操作
  • Lora训练Windows[笔记]
  • linux基础指令讲解(ls、pwd、cd、touch、mkdir)
  • InnoDB 事务处理机制
  • 启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS
  • 开车仪式
  • 老司机要开车啦!
  • 开车,开车!!!
  • 你为什么喜欢开车?
  • dmesg介绍
  • Linux--常用命令--dmesg
  • dmesg命令手册
  • dmesg 命令详解
  • linux dmesg命令参数及用法详解
  • linux命令之-dmesg详解
  • dmesg命令用法
  • Linux 系统设置 : dmesg 命令详解
  • dmesg七种用法
  • Linux命令:dmesg
  • dmesg的详细用法
  • linux命令--dmesg
  • 图解Linux命令之--dmesg命令
  • 2023年JAVA JDK8的安装与配置(附JAVA8安装包)
  • java-jdk下载及安装
  • Java软件包安装
  • java程序打包一体化:代码-jar-exe-安装包(图文详解、资源提供)
  • 把java项目打包成安装包,在windows下安装
  • java中jdk的下载与安装
  • 把java项目打包成安装包
  • java安装教程(解决官网下载的安装包为什么没有jre?)
  • 阿里云ACP ACE认证考试重要事项
  • 树莓派呼吸灯python代码
  • pyboard呼吸灯代码分享
  • esp32 + python 呼吸灯实现
  • Python| GUI界面进行抽奖