我:为什么要修改?
他:因为走线不好走,所以就修改了IO口。
我:你知道吗,这会让我修改软件。
他:你只需要修改一下寄存器就可以了,成本低,不费事。
当时,我就明白了,这位工程师缺乏系统的思维,并且还有些想当然,我问了如下的问题:
“你为什么说软件更改成本比硬件低?你熟悉软件开发的流程?你熟悉那几个IO口究竟是做什么用得吗?其软件内部是怎么实现的?你新更换的IO口可以实现相同的功能吗?”
这位硬件工程师不作答了,陷入一片茫然……
很多时候,我们缺乏的不是做好事情的知识,而是做好事情的方法。就如同这个硬件工程师一样,在没有搞清楚状况下,就做了结论。是草率而又不负责任的。我们来分析分析这个原因:
1、嵌入式最大的挑战是:硬件和软件同时成熟,出问题时,不知是软件或是硬件问题,两个方面相互影响,致使开发成本大幅度上升。 假设更改的IO能替代原来的IO口,也会致使软件修改,修改后一样做大量的测试,这些都会致使成本大幅度的上升;一般来说,嵌入式项目的开发难度和PC机的开发难度不能一概而论,说谁一定比谁一定难。两种项目难度各有特点,单从调试方面说,嵌入式难度稍大些,其调试手段较 PC机手段少,且有些不稳定,并不能很好的追踪Bug。并且,嵌入式要求软件开发人员了解的过程更加具体,如:AD、DA的工作方式及通讯的时序,这个是PC人员不需要掌握的知识。
2、原来的IO口真的能随随便便的被替代吗?一般来讲, MCU的IO口,都有复用功能,在没有充分理解IO功能的前提下,实际上是很难判定能不能替代的。比如说,如果这个IO口做输入,需要使用到外部中断功能。但并不是所有的IO都具有中断功能。这个要从Datasheet中获得;从软件的角度来看,就算可以替代,也要评估一下,更改了这个IO口,会不会造成软件的模块化封装的难度?一般来说,Port-A有8个IO口,Port-B也有8个IO口,这8个IO口共用一个中断服务程序,进入中断程序后需要判断倒底是哪个IO口触发了中断。然后再调用中断相关的服务程序。实际上,一个Port多个IO口中断的编程有很多抽象的办法,但没有一个是简单的,代码也比较复杂。也就意味着有Bug的可能性……同时,这给调试也带来了很多不便。
3、关于版本管理和版本兼容的问题。 更改了程序,也就意味着版本的更新升级。如果每版的硬件都有新的特性,无疑要产生很多程序版本。再回头看看,版本管理也是一个巨复杂的工作,如果更改了一个公共的Bug,那需要在所有的硬件上做测试,想想,一两个还不算什么?10个20个硬件版本,这个事情还怎么弄?特别对于资源比较紧张的小公司。如果要市场部门通知客户完成软件的升级,那么这是多大的工作量?一旦出错,损失的是客户的信任,不是一点点成本所能衡量的!
PCB板多打几个过孔,可能看起来不是那么美观,但美观不是电路的第一要求,电路的第一要求是信号完整性! 所以,仅仅因为走线不好看,更改IO口,没有意识到由此带来的问题,这就是典型的缺乏系统化思维的特点。
所以,硬件工程师在修改电路的时候一定要和软件工程师沟通,不要在他眼中成为那样的你。
文章转自互联网。

长按二维码
关注微互动