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