用d开车
作者:互联网
原地址
作者:Dylan Graham
.
D
:快速/表达力/简单
,还可开车
.是的,我用d
开车.
我的Holden VZ Ute
车自带了个垃圾四速自动变速箱
.1.5
年就坏了,我买了个防弹六速自动变速箱
.为了使其工作,我构建自己的电路板,计算机系统和固件来控制变速箱内电磁阀,液压系统和离合器,处理用户输入,换档,接口
,并让其假装为原来的4速
变速箱.
我很自豪
我的解决方案.可在250ms
内换档,适合赛车.能快速启动,优点一堆
,总之很好.
计算机分两部分:用户界面
板,STM32F042
来驱动OLED
显示.主板,用STM32F407
搞定其他的.他们通过CAN
线协作.用d
来写的.
我用的D
的betterC
来干的:统调/元编程/易对接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
.
标签:开车,代码,单元测试,CANPacket,我用,共享,sensorValue 来源: https://blog.csdn.net/fqbqrr/article/details/118571177