新产品立项了,并由你来主导,作为嵌入式软件工程师的你,是不是既兴奋又有点慌?
兴奋是能力终于逐渐被认可了——经过无数次调试、改代码、熬夜加班,领导和团队开始信任你,把一个全新的项目交到你手上。
与此同时,又有点慌,怕碰到太多知识盲区,项目翻车了咋办?
我第一次接手独立项目时,内心戏简直能拍成电视剧,满脑子都是美好的幻想,这次又能涨一波技能了,然后就联想到后面跳槽加薪的场景。。。
可现实总是给我泼一盆冷水,需求还没完全搞明白,硬件方案还在调整,时间表却已经定得死死的,压力全部自己扛。
特别是刚入行,经验少,又没人带那种绝望,作为一个干了10年的嵌入式软件工程师,我太了解了。
所以,我写这篇文章的目的,就是想跟你分享一套实用的方法,让你在面对新项目时心里有数、手里有招,都是从实战里摸出来的干货,简单实用,拿走就能用。
1.需求分析
客户给的需求往往是站在他的角度的,有时候他们自己都说不清楚想要啥,站在写程序的角度,可能又是另一种需求。
所以新项目启动后,第一步永远是搞清楚需求。别觉得“需求分析”这词儿听起来高大上又麻烦,其实说白了,就是弄明白客户想要啥、硬件能干啥、软件得干啥。
这一步要是马虎了,后面就等着翻车吧,需求不是天上掉下来的,得主动去挖,防止成为背锅侠。
项目一开头,一般会跟产品经理、硬件工程师,找个时间开个会,把软件要实现的功能、性能要求、硬件接口这些都问清楚,每个需求需具体到可操作的程度。例如,“用户按下按钮后,LED需在50ms内点亮”比“LED需快速响应”更清晰。
别怕问得太细或者问题太基础,哪怕觉得自己像个小白,也比干到一半发现搞错了强。
需求分析可以借助一些工具,也能省不少力气,以前思维导图工具XMind,现在用飞书,方便很多。
2.技术选型
需求清楚了,就得挑工具和平台。
单片机选啥?STM32跑得快但成本高,国产的便宜,但是有些稳定性和开发环境有点恶心。
具体看项目需求,性能、功耗、预算都得平衡。
开发工具我一般用Keil,逼不得已才用IAR,VSCode作为老工程师用着没有亲切感,熟悉哪个就用哪个,能省时间。
这个环节一般是要跟硬件工程师配合,硬件工程师为主,我们做软件的辅助,比如单片机的选择,能不能满足要求,其它外围电路一般由硬件工程师主导。
一般客户要求没那么刁钻的情况下,比如成本,尺寸,功耗啥的没太高要求,我会使用自己熟悉的方案,这样开发起来快几倍。
3. 设计规划
动手前,先把整体功能拆成模块,比如数据采集、通信、控制逻辑,每块干啥、怎么连起来,都要想清楚。
拿我们无际单片机的防盗报警主机项目为例,简单介绍下要怎么划分功能模块。
(1).探测器管理模块
主机通过433M/Lora和探测器(门磁,遥控器等等)进行组网。
(2).报警处理模块
主机有4种防盗报警模式,根据探测器传过来的信号,触发报警逻辑。
(3).通信管理模块
管理WiFi和4G网络连接,上传报警信息到云平台,云平台也可以下发指令控制主机。
(4)用户交互模块
主机通过LCD菜单和触摸按键,可以配置和查看主机信息。
(5)电源监控模块
实时监测电量,管理充电和低功耗模式。
先这样大体划分出来,然后每个模块还有很多更加细节的功能,比如探测器管理模块,涉及到Lora组网,其中还要设计无线组网协议。通信管理模块,还涉及到打电话、发短信,以及OTA功能等等。。。
新手的话,可以先用用流程图或者框图,能把思路理顺。
模块化设计是关键,功能分开好改好修,任务调度也要安排好,让整体的程序逻辑结构清晰,能为后期维护省下很多时间。
我是懒,经验也比较丰富了,也有成熟稳定的架构可以用,就没有去画流程图啥的,直接就开干了,架构搭建好了,再一个个完善细节,就不会出现大问题。
4. 写代码实现
设计好了,就开干。代码要写得清晰、规范,稳定性放第一位。
还要做好版本管理,可以用Git管理,也可以放在电脑硬盘里,多写注释,方便自己和别人看。
写完一段就自己跑跑,检查下逻辑,别等全写完了再测。
我有个小习惯,每天写完都自测一遍,项目里好几个bug都是我提前抓出来的,省了不少调试的麻烦。代码不求多花哨,能跑得稳就行。
5.测试与调试
代码写完,赶紧测。分几步走:先测单个模块,再测模块间的配合,最后跑整个系统。
用串口、JTAG这些工具盯着,哪儿不对马上改。
别攒到最后测,越早发现问题越好修,测试结果记下来,回头还能复盘。
但只要你找对方法、一步步来,再复杂的项目,总会被你瓦解。
最近很多粉丝问我单片机怎么学,我根据自己从业十年经验,累积耗时一个月,精心整理一份「单
片机最佳学习路径+单片机入门到高级教程+工具包」,全部无偿分享给铁粉!!!
除此以外,再含泪分享我压箱底的22个热门开源项目,包含源码+原理图+PCB+说明文档,让你迅速进阶成高手!
教程资料包和详细的学习路径可以看我下面这篇文章的开头。