00:00 / 00:48
连播
清屏
智能
倍速
点赞10
00:00 / 02:55
连播
清屏
智能
倍速
点赞5
这里有三条铁律必须遵守:第一,绝对不用int、long这种长度不确定的类型。用int存设定温度,在 Cortex-M 上是 4 字节没问题,但换到某些 8 位芯片上变成 2 字节,温度超过 32767 就会溢出,导致空调乱调温。正确做法是用stdint.h里的uint8_t、int16_t,长度固定。 第二,不要假设字节序和对齐。解析空调通信协议时,别直接把缓冲区指针强转成结构体,这在严格对齐的 Cortex-M0 上会直接触发 HardFault。正确做法是逐个字节组装数据。 第三,条件编译不要散落在各个文件里。别这里加个#if STM32,那里加个#if GD32,最后代码变成一团乱麻。条件编译应该集中在最底层的移植文件里,上层代码根本看不到这些宏。 五、克制:不是所有东西都值得抽象 讲到这里,可能有人想把空调里所有代码都抽象一遍。但记住:过度抽象比没有抽象更糟糕。我见过有人为了控制一个电源指示灯,搞了三层函数调用,点亮一个灯要跳四层,出问题时调试都找不到地方。 还有人把简单的 LED 闪烁,设计成可配置周期、占空比、回调的通用模块,结果配置项比实现代码还长,但这块板上就一个红色指示灯,只需要亮和灭两种状态。这种为了复用而复用,纯粹是给自己找麻烦。 我判断是否值得抽象的标准很简单:它至少要在第三个空调项目里被原样用到。第一次写实现功能,第二次改改适配,第三次能直接拿来用,这时候再抽象也不迟。另外,别重复造轮子。FreeRTOS 的任务调度、LittleFS 的 Flash 读写,这些已经被几千个量产产品打磨过了,能用别人的就别自己写。 最后总结 为什么换一个空调项目,UART、按键、Flash 总要重写一遍?不是因为这些东西难,而是上一次写的时候,根本没把 “下次要拿来用” 放进设计目标里。 代码复用不是什么高深技巧,而是一种工程习惯。在分层、抽象、模块化、可移植性上多花一点时间,再加一份克制,不为不需要的灵活性增加复杂度。第一次写的时候看起来慢一点,但你写下去的不再只是一段能跑的代码,而是一份可以反复用的资产。下次再做空调项目,你会发现,别人还在从头写驱动,你改改配置就能跑通整个项目。
00:00 / 07:57
连播
清屏
智能
倍速
点赞19
00:00 / 02:19
连播
清屏
智能
倍速
点赞11