路径依赖
1.不要重复造轮子,尽量选用久经考验的跨平台库,如boost、yaml、pcap、vtk、cjson等,这样能把设计和测试成本降到最低
2.构建工具优先选用cmake,cmake在Windows、Linux、Mac OS平台都有很好的支持,支持图形化配置
3.编程语言优先选用成熟、稳定的版本,如C++选用2011版本,不要使用太花里胡哨的特性
数据类型
1.数据类型尽量能够多平台通用,如cstdint类型、boost跨平台类型
2.字节对齐,注意字节序
3.有些硬件并不支持双精度浮点数,例如全志T3芯片,如果没有精度要求建议浮点数默认float而非double
4.管理内存推荐使用智能指针,减少深拷贝
5.性能不行可以使用数据表,用空间换时间,比如三角函数的计算,避免重复计算开销很大的数据对象
通信协议
1.版本号,这个字段是考虑到变更风险,嵌入式领域硬件的变更代价是很大的,往往需要软件来买单(擦屁股)
2.数据校验,防止数据丢失(很多时候不清楚用户在什么样的电磁环境下测试),可以参考modus的协议设计
3.尽量不要依赖配置文件,协议应该能够充分解决依赖
设计原则
1.单一接口原则,高内聚,隔离实现,头文件不暴露无关的细节,不想给源码就要剥离你的实现
2.流程尽量简单高效,不给使用者带来额外消耗,比如吃别人的算力(这个是道德底线)
3.代码可读性良好,尽量少用模板,枚举优于宏定义,typedef优于宏替换
4.做好防御性编程(assert、数组边界判断、杜绝空指针悬指针),SDK应该在调试阶段尽量多的发现自身的问题
5.传感器(LiDAR、IMU、Camera、GNSS等)的数据处理都可以理解为一个数据驱动的模型:生产者+消费者