现在的位置: 首页 > 综合 > 正文

硬件与软件的类比

2013年09月02日 ⁄ 综合 ⁄ 共 2179字 ⁄ 字号 评论关闭

     先声明,此文是在讨论组的一篇邮件列表,个人觉得说的挺好,故转载在此。作者liuxinyu95@gmail.com

原文如下: 

 

 

看到有不少做软件的同志,总是对做硬件的佩服得五体投地。觉得那才是真正的底层。
>
> 我来略微破除一下迷信,使得大家不要妄自菲薄。
>
> 我以前在大学时做机器人的,从机构设计,机械设计,工艺加工,控制系统设计,电机设计,电路设计,单片机编程,嵌入系统编程,到上位机的控制软件,AI
> 设计等等,一个人走过全流程。所以我对硬件那边很清楚。当然我这些经历都是在2004年前,现在技术飞速发展,可能我有些观念过时了。欢迎现在有做硬件
> 的同志拍砖。
>
> 如果不钻到集成电路芯片里面,搭电路这个活和搭积木区别并不大,当然这个积木更像是乐高积木。首先,由于集成电路技术的进步,如今我们很少需要像我上大
> 学的时候计算放大器的放大倍数,亲手搭建功放了,大量的集成电路厂商提供了无数芯片供你选择。这就好比一个软件库有大量的类和接口,你要做的就是选择正
> 确的芯片。厂商一般会提供datasheet,通常是一个pdf文件,里面不仅有各种参数,还有--推荐电路图。这就好比MSDN里面带有
> example代码。所以连电阻电容都不用自己考虑了,通常需要做的,就是照着推荐电路搭。
>
> 这和我们拿一个类库写程序的难度没有什么太大的区别。当然还是要有一定的创造力的,也有一定的经验在里面,例如在输出上加个电容滤波,干掉噪声,放大下
> 信号等等。设计数字电路的部分就更加简单了,模拟部分可能还有些计算,数字部分基本就是按照逻辑需要来,这和我们写程序里放for, while,
> if-else相等价。
>
> 比较考验经验的部分是布线。真正好的电路大多是手工布线的,但是如果你的要求不高,比如没有高频,没有大的串扰。自动布线大多数也能工作,这就好比手工
> 写程序和利用Wizard。
>
> 通常,为了避免危险,做硬件的时候,会用一些模拟软件模拟一下电路的运行,这在我上学的时候还不普遍,但是据说现在已经非常好了。这好比我们做
> stub,跑UT。
>
> 有时,为了调试方便会放些发光二极管,或者7段数码管显示些信息。这好比我们在程序中加log,或者print到stderr上。当然现在可能都是用液
> 晶了。
>
> 然后是把电路图pcb拿到中关村去制板,(在国外没有中关村这么好的条件,只能自己动手焊接实验板了,所以国人也不要妄自菲薄)。
> 然后去采购原件,焊接。这相当于我们编译,链接。只不过成本(钱)比较高就是了。
>
> 然后是单片机编程。单片机通常很弱,虽说16位,32位N年前就在推广,可是诸位猜猜国内大量用的是什么?8位的51单片机。日本呢?8位的PIC单片
> 机。用汇编?那是过去,Flanklin C51等等10年前就普及了。IDE和编译器都是free的,可以自由下载。程序非常简单,都是直来直去。复
> 杂的算法?几乎没有,因为算法可以移到上位机PC上去写。有个PID控制就非常了不起了。控制硬件一点也不神秘,基本就是照着芯片的说明书写。总共不外
> 乎以下操作:
> 1,读:从某个地址读数据
> 2,写:向某个地址写数据
> 3,中断
> 对应c语言里面超级简单,无非就相当于Linux的read, write和ioctl
>
> 面向对象?想都不要想。根本用不着。顺便说下PIC单片机,虽说是8位机,但是能用的只有7位,另外1位留作它用,那程序就更简单了。
>
> 后来有了嵌入系统,我觉得复杂度还是很低,因为策略就是嵌入系统里尽量做简单的事,把复杂的事情通过通讯模块传到上位机里干,上位机要么是
> Windows要么是Linux,那里才是AI和复杂的算法。嵌入系统里所做的无非是一些驱动和通讯。
>
> 然后说说机械部分。这部分真正考验水平的是机构设计。我举个例子,汽车雨刷你会怎么做?
>
> 水平低的方案:两个刷子,两个电机,两个控制电路。
> 水平高的方案:两个刷子,一个菱形杆机构,一个电机,一个控制电路。
>
> 机构部分要用力学知识,需要一些计算。
>
> 机构定好了,剩下的就平凡了。照着零件书选零件,包括齿轮,轴承,皮带,螺丝....这和对着类库选函数没有区别。
> 然后剩下的一些要加工的,就要用CAD设计下。这部分脑子里有车,铣,刨的工艺就差不多了,有时还要和工人师傅确认下。
> 3D的CAD能干的事情很多,基本装配好的样子都知道了。
>
> 有时要算下应力,有ansys这样的有限元分析软件和仿真软件,也不用你亲自动手去人肉计算。然后送去工厂加工装配。
>
> 自己去采购机箱,安装电路,布线。
>
> 开发上位机软件。这个大家都懂我就不说了。
>
> 我想说的是,因为硬件部分对大多数programmer来说是黑盒,所以大家觉得神秘,高科技,有水平。其实在今天大社会分工的背景下,
> 硬件工程师和我们软件工程师一样,都是一颗一颗的螺丝钉。他们看我们也觉得很神秘,高科技,有水平。这个我和硬件工程师谈过,确信
> 这一点。有些硬件工程师常年设计DVD的盖子,就是一按按钮就弹出来的那个托盘。他们也很枯燥郁闷。
>
> 并且硬件工程师还有一点不爽的是:我们软件工程师回到家,可以下载喜欢的开源软件,业余乐乐。可是硬件工程师呢?哪样不要花钱,自己业余时间做个遥控
> 车,要比去商店买一个贵好几倍!而且老婆还要担心烙铁不要把家里弄着火了....
> 我们软件工程师这点上很节能环保呐。
>

抱歉!评论已关闭.