3年工程师就写出这样的代码?笑掉大牙。。。
今天分享的文章,主要给那些没有软件设计思想的MCU软件工程师看的!随着目前MCU的各方面性能显著提升,一些以MCU为控制中心的嵌入式系统也是越来越复杂,毫无软件设计理念的代码真的是拖累单片机,所以对每个MCU软件工程师在软件设计等方面的要求也将越来越高!
这里利用一个实际发生的例子,对入行的初级软件工程师提一些软件设计上的建议,并分享了一些经常走的弯路,希望可以帮到大家。
这篇文章我没有谈编程的规范性的东西,如果你想让自己的程序文件代码更加直观、看起来美观、可读性强,推荐学习一下全面的编程规范,比如网络上广为流传的,华为“C语言编程规范”。本文主要想说一说当我们的单片机遇到多个模块的数据需要处理,类似于“多任务”时应该怎么去思考和处理?
背景是这样的,9月份开始安排一个工程师开始做电动汽车交流充电桩,机械设计部分由公司机械结构部门负责。充电桩的电子部分总体上分为X个部分(用到的资源): 电阻触摸屏(RS232),M1卡读写(RS232),电能计量表(RS485),语音提示(SPI),电力开关(继电器IO),通讯接口(RS485、CAN)。
工程师做的过程非常勤奋,期间也是困难重重,改了很多个版本,很多的bug,总算第二年6月把充电桩立起来了。
当然此过程我并没有过多的干涉,系统也没有经过非常严格的测试,结果发现读卡的时候不能处理触摸屏,播放语音的时候不能处理读卡,语音播放不能打断或者跳跃,反正就是所有事件必须一个一个按部就班的来,一旦操作错误就需要多次执行、等待、甚至重新来过。
一个工作3年多的工程师怎么会把产品做成这样呢?思来想去不应该呀,是不是程序哪里出了问题 ? 解决问题的最好办法就是评审代码,来review代码瞧瞧。
不看不知道,一看吓一跳!整个的程序是没有逻辑的,一条线就往下写,这不正是当年在学校刚做第一个项目的代码吗 ? ……
//主循环
while(1)
{
//上电进入主程序 或 触发触摸屏
Function1();//播放提示语音
Delay();//等待播放完毕
//读取M1卡信息
Function2();
Delay();//等待读卡数据返回
//播放提示语音
Function3();
Delay();//等待播放完毕
//M1卡数据交互,判定下一步操作及提示
Function4();
Delay();//等待数据处理完毕
……
……
}
素材来源:最后一个bug公众号发布,参考作者handong,bug菌进行相关观点的优化和整理。版权归原作者所有。仅供技术的传播和学习讨论,如涉及作品版权问题,请联系我进行删除。
快来,这块核心板带你冲进工业4.0…
Github上高星可产品化开源项目--闭环电机驱动器
985废材电子狗打工回忆录(续):有故事的男同学
凉了!嵌入式真的要卷成下一个Java了吗?
微信扫码关注该文公众号作者