|
1. 基础数据结构必须掌握: 链表,队列等;
2. 常用设计模式需要掌握:状态模式,命令模式,观察者模式,发布订阅模式等等
3. 了解几款常用的RTOS(Freertos,threadx等等)
4. 架构的设计:事件驱动模型(发布订阅);
5. 单片机中定时器:用一个硬件定时器实现一组软件定时器(支持单次触发和周期触发);
6. 注释规范 (Doxygen)
格式化工具(AStyle)
7. 单元测试基本上是项目中必不可少的,有许多现成的C单元测试框架 (cmocka,unity等等),支持mock;
cmake:编写cmakelists.txt去生成makefile文件,包含所有的测试文件 (一般源码占3成,测试代码占7成)
测试覆盖率:使用gcovr/生成html和xml报告;
Jenkins: 拉取gitlab项目,执行单元测试,发布单元测试报告和doxygen等等
8. 集成测试和系统测试:使用python实现自动化测试;可以选择树莓派或者一些其他的平台;
9. 存储保护:固件可以使用读保护,eeprom或者外置flash可以使用认证,签名,hash,压缩(miniLZO)等方式保证安全性;
10. 看门狗的问题:裸机直接使用系统独立看门狗;RTOS的话,如果需要监控任务,可以使用任务看门狗,任务每隔一段时间kick一下;
11. 尽量使用一些标准协议,而非自定义协议,比如常用的modbus,canopen等等;
12. 软件升级:
一般产家有内置bootloader,这是一种方式,毕竟内置的bootloader是经过市场验证过。
单bank存储器升级:bootloader+app+backup方式,可能这种比较常用;
双bank存储器升级:使用swap bank的特性做升级,不需要bootloader,只有app;
对于软件开发来说,实现一个软件可能不难,但是想将一个软件做稳定做好,还是需要花很多功夫的。
想进阶为中级甚至是高级开发工程师,还是需要很多的修炼,一些技术和工具可能需要我们掌握:
工具类(简单说几个):Vmware Exsi(可以装多个系统比如ubuntu),Jira/bugzilla, Gitlab(git),Jenkins, Artifactory, msys2,等等等等,
其他:c,python,shell,cmake,json,html/css/js/ajax....
|
|