这很正常。尤其是硬件出身,写单片机控制程序的工程师,估计只有他们自己能看清楚自己写的程序。如果让他们再写后台的高级语言程序,估计他们自己能看明白自写程序的时间不超过10天。
为什么这样?
没有经过正规的结构化程序的开发训练,写程序没有架构,只要能完成控制功能就可以了。这就是硬件开发者写的软件。
在2005年,我们公司软件开发任务非常多。当时一个硬件设计人员设计了一个控制丝桶转速的PCB板,其中有电机的启动加速、减速、急停、调速等等控制,其中用了高速单片机。人员少,就让硬件开发者自己写这块程序。
这个工程师对单片机汇编语言熟悉一些。很快程序写好了,调试也基本过了。
过了半年,我们要用此PCB板。由另一个人接受软件后期维护工作。这时候,我们才发现了问题,再次测试,发现程序中有很多bug。要进行维护,发现有几大类问题:
1,整个程序5000多行,没一个子程序,全是短跳SJMP或者长跳LJMP或声C语言著名的万金油goto语句。
一会跳到中间段执行,一会又跳到大致开头的位置执行。整个程序看的人眼晕。
2,没有注释。程序中没有一行注释。
3,没有宏定义。到处都是类似下面的写法:
MOV DPTR,#20f6H
MOV 54H,#0aaH
诸如此类。猜去吧,就这样写,就这样随意!
总之,要是让MS微软的人看了,是要挨打的节奏!
偏硬件开发者只关注硬件实现逻,不注重程序的优化,不善于学习软件编程理论,因而漏洞百出。
软件开发的一个重要任务,就是处理异常信息,这是硬件从业者最大的敌人。如果你对他说,程序有可能跑飞,也有可能由于硬件干扰,watchdog没有及时地进行定时操作,程序会复位。这些,硬件开发者会说,绝无可能,这硬件电源的抗干扰能力,杠杠的,不会产生例外。
对于中断,不仅有优先级,而且有执行中断程序的,可以/不可以响应其它中断的选择。对此,他们更晕。
硬件开发者唯一的救命稻草,就是仿真器,他们不是先构建后写程序,他们开发程序的唯一方法,就是写两句,就要用仿真器检查一下,那怕最简单的三字节加/减法,对他们来说,都必须打着仿真器才能完成。
我在想,对于多字节乘法,乃至浮点运算处理,BCD到十进制的转换,对他们来说,就是天书。
总结:术业有专攻,隔行如隔山。单片机,PC机乃至服务器、互联网级别的软件开发,听上去有关联,都叫软件,实则天壤之别,是跨行业的,要从头开始学起的。