我把单片机玩死了

 本帖最早于2014年6月9日发布于百度贴吧-单片机吧,现在把完整版整理到公众号上,顺便改了一些错误。

    首先,自我介绍一下:电子工程师一枚,1986年生,09年毕业,在京工作四年。

之所以把自己的经历写出来,一是无聊,最近项目刚刚做完;二是经常逛贴吧,在年轻人身上经常看到自己当年的影子,所以不希望他们走弯路。那么现在,就让时间回到2009年的夏天。

当时刚从大学毕业,专业是微电子学。严格地说,我的专业是制作芯片,而我现在的工作是应用芯片,已经走偏了。不过没办法,这个专业是学校新开的,各个老师都是学校东拼西凑过来的,那种感觉就像用韭菜和茄子做出来的大拌菜一样,吃起来怪怪的。我到快毕业都没想好该怎么找工作,刚好这个时候宿舍的一个哥们刚刚参加了一个培训班回来。他觉得很好,因为刚好负责培训的张老师来学校讲课,于是跟我说:去*****吧,那里还不错(此处无广告)!

我就想无头苍蝇忽然遇到一扇窗户一样,毕业了家也没回,直接背上行李去培训部了。庆幸的是路上并不孤单,班里的同学凯凯、安保和超哥都一起去了。

地点在燕郊的创业大厦,食宿条件很艰苦。住宿的地方是租的一个两居室,里面放满了上下铺,还有其他来参加培训的同学,他们来自各个地方。在之后的几个月里,我和他们结下了深厚的友情。

20个人,分成了四组,每组负责不同的项目。我在第一组,要做一个波形发生器出来;凯凯在第二组,做一个具有IC卡读写功能的智能水表;安保在第三组,做一个带有语音提示功能的温度报警器;超哥在第四组,做一个按键可控的数字电源。

刚刚分到任务我有点晕,因为单片机我都还没摸过,就要做东西,这是不是有点不合适?虽然在大学里学过课程,但完全是理论课,东西都没见过,更别说做东西了。我估计凯凯他们跟我一样心理犯嘀咕,搞不清楚什么状况。但想想之前来参加的宿舍那哥们,他基础跟我差不多,但是他能搞定,我应该问题不大,于是咬咬牙,开始搞了。

第一步,项目需求分析,为期一周。老张(就是张老师,我们暗地里习惯称他为老张)在北京工作了近十年,各个公司都呆过,正规的,不正规的都熟悉,所以要求我们第一步先去做需求分析,知道自己负责的项目在市场上有没有空间,该如何定位,技术指标如何确定,原理框图如何绘制。

于是,我们开始了疯狂的…….上网,是的上网查资料。凡是和波形发生器相关的内容,都下载下来,然后共享。相关的厂家、型号、技术指标、设计方案、参照代码、市场分析等等等等,就记得那段时间是很疯狂的一段日子。我们像公司员工一样签到、签退,却要比他们更辛苦,因为我们晚上11点才离开实验室,是每天!大脑像运行到极致的CPU一样,用力的查看着每一条可能有用的信息,每一次呼吸都感觉自己很累,不确定今天能得到什么结果,也不知道明天会怎么样。于是,我不停的喝水,让自己有更多的上厕所的时间,这样可以多休息一会儿。

每周休息一天,日子很累,但却充实。我已经明显感觉到和波形发生器相关的各种关键词都充斥在我脑子里了,DDS、频率范围、单极性波形、双极性波形、调节精度、输出波形峰值等等。但这些还不够,因为我们得到的这些信息都是搜集来的,并不确定可行性。一切的一切,需要下周一老张审核我们的方案。而我们的心态,也从最开始的畏惧,逐渐被越来越多的疑问代替,然后抑制不住的想知道答案。

终于,开始方案审核了,老张让我们每人挨个讲解了一下自己的需求分析。然后指出不足,顺便夸了几句,给我们增加了点信心。最后给出了完整的方案。

第二步,开始动手?NO!老张说,去逛逛北京城吧!What?我们愣了…..好吧,最后才知道,原来是去中发电子市场采购。可以这么说,在北京搞电子的,没有人不知道中发电子市场,你能想到的一切器件,在这都能找到。而且,毕竟巧妇难为无米之炊,我们动手,总要有器件才行啊。所以,根据方案列出器件清单。面包板有了,是老张提供的,别的东西自己解决。于是,一群菜鸟,选了一个阳光明媚的日子,兴冲冲的来到了中发电子市场,任人宰割…….

记得那天,我买完电阻,路过一家二手仪器仪表的店铺,看着里面慢慢的仪器,不自主的就走了进去。老板以为我是某个学校的学生,随口跟我聊了几句,我问他二手示波器多少钱,他说看情况,便宜的三四千,好一点的七八千。忽然心里一动,又问他有没有波形发生器,他说有,然后告诉我在哪,怎么用。我很认真的看了很久,心想这就是我要做的东西啊。

第三步,用汇编语言熟悉单片机的基本功能。是的,你没看错,是汇编语言!就是说,之后的项目也要用汇编去完成。当时没有想明白,但是当我一个月后熟练的掌握51的底层结构的时候,我已经有点懂了。先从ORG开始,然后是MAIN…再然后MOVE来MOVE去,别人怎么写,我就抄过来,背下来,然后反复写几遍,竟然就懂了。

从对单片机的一无所知,到跌跌撞撞不小心滚进单片机的大门,就这么发生了。那几天是异常兴奋的,我感觉我就是万能的神,我可以控制一切芯片。每段代码,我写了好多遍,然后又下载了好多遍,每一次成功、失败的过程都激励着我前进。

记得有一天在调试数码管,代码改了一下,重新烧录,结果整个电路忽然就不工作了。我愣了,不至于啊,改动不是很大,就算有问题,也不至于整个电路没反应。于是我花了一个下午查看代码、检查电路都没找到问题。我问阿海,他瞄了我一眼说,你电路有问题吧…我无语,我的电路我清楚,不应该的。到了晚上,八九点的时候,我想再下载一次试试吧,代码没动,烧录进去,结果忽然就好了。我瞬间愣了一下,放佛想到了什么,马上打开AT89S52的器件手册,第一页的一个参数解决了我的所有疑惑:该芯片的flash区擦写次数为1000次。换句话说,因为多次擦写程序,导致这块单片机的程序存储区寿终正寝,已经快被我玩死了!

现在还记得当时兴奋的感觉,可能是因为一群疯疯癫癫的年轻人凑在一起,所以学习的过程并没有觉得多累,反而很嗨。当时用的ATMEL公司的89S52单片机,还是用并口线下载的。先从点亮LED开始,然后是蜂鸣器,串口扫描,串口中断,键盘和灯,键盘控制数码管,软件延时,按键消抖等等。随手放几个当年的代码,现在看来,真的是惨不忍睹。

这是个串口扫描的:

 ORG 0000H

 ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#60H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV PCON,#00H
SETB TR1
MOV SCON,#50H  
LOOP:JB TI,FH
JB RI,SD
SJMP LOOP
SD:CLR RI
MOV A,SBUF
INC A
MOV SBUF,A
FH:CLR TI
JMP LOOP
END

这是个定时器定时的:

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP INTER

ORG 0100H

MAIN:MOV SP,#60H

MOV TMOD,#01H

MOV R2,#0FH

ACALL INTER1

HERE:JMP HERE

INTER1:MOV TL0,#0BCH

MOV TH0,#03CH

SETB EA

SETB ET0

SETB TR0

RET

INTER:MOV TL0,#0BCH

MOV TH0,#03CH

DJNZ R2,FAN

CPL P1.0

MOV R2,#0FH

FAN:RETI

这是个按键控制数码管显示的:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:CLRP2.0

MOVP1,#0FEH

MOVA,P1

CJNEA,#0FEH,SAO1

MOVP1,#0FDH

MOVA,P1

CJNEA,#0FDH,SAO2

MOVP1,#0FBH

MOVA,P1

CJNEA,#0FBH,SAO3

MOVP1,#0F7H

MOVA,P1

CJNEA,#0F7H,SAO4

LJMPMAIN

SAO1:ACALLDELAY

MOVA,P1

CJNEA,#0FEH,PAN1

LJMPMAIN

PAN1:CJNEA,#0EEH,PD1

MOVA,#00H

LJMPSEND

PD1:CJNEA,#0DEH,PD2

MOVA,#01H

LJMPSEND

PD2:CJNEA,#0BEH,PD3

MOVA,#02H

LJMPSEND

PD3:MOVA,#03H

LJMPSEND

SAO2:ACALLDELAY

MOVA,P1

CJNEA,#0FDH,PAN2

LJMPMAIN

PAN2:CJNEA,#0EDH,PD4

MOVA,#04H

LJMPSEND

PD4:CJNEA,#0DDH,PD5

MOVA,#05H

LJMPSEND

PD5:CJNEA,#0BDH,PD6

MOVA,#06H

LJMPSEND

PD6:MOVA,#07H

LJMPSEND

SAO3:ACALLDELAY

MOVA,P1

CJNEA,#0FBH,PAN3

LJMPMAIN

PAN3:CJNEA,#0EBH,PD7

MOVA,#08H

LJMPSEND

PD7:CJNEA,#0DBH,PD8

MOVA,#09H

LJMPSEND

PD8:CJNEA,#0BBH,PD9

MOVA,#0AH

LJMPSEND

PD9:MOVA,#0BH

LJMPSEND

SAO4:ACALLDELAY

MOVA,P1

CJNEA,#0F7H,PAN4

LJMPMAIN

PAN4:CJNEA,#0E7H,PD10

MOVA,#0CH

LJMPSEND

PD10:CJNEA,#0D7H,PD11

MOVA,#0DH

LJMPSEND

PD11:CJNEA,#0B7H,PD12

MOVA,#0EH

LJMPSEND

PD12:MOVA,#0FH

LJMPSEND

SEND:MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

LJMPMAIN

DELAY:MOVR7,#100

D1:MOVR6,#50

D2:DJNZR6,D2

DJNZR7,D1

RET

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,80H,0C6H,0C0H,86H,8EH,7FH

END

现在看来,写的很简陋。不过对于当时的自己来说,已经很知足了。

当时的我们,没有开发板,只有一块面包板。所有要用的东西,都是自己焊接的。可能耽误了很多时间,但是对后来工作中电路的检查能力,起到了很好的锻炼。因为我们手动焊接每一个LED,每一个电阻,每一个按键,接触了布局布线。所以导致我们对电路的敏感度非常高,在后来的工作中,检查故障电路的时候可以很快推断出故障出现的位置。这是那些整天叫嚣仿真万能的人体会不到的!!!这里还是要说一句,个人观点:初学者少碰protues仿真,什么时候用?当你已经完全学会单片机,在项目中要验证代码和原理可行性的时候再去仿真。想通过protues仿真来学习单片机,这真的是笑话了!

第四步,真的要动手开始做了。玩真的!具体指标记不清了,大概是:4×4矩阵键盘控制,数码管显示,频率10HZ~1000HZ按键可控,三角波、正弦波、方波可选。难点主要在频率可通过按键控制上,就是说从10到1000,我随便输入一个数字,输出端都要给出相应的频率。频率是通过定时器定时中断控制的,这就要求有一个算法,能根据输入值,计算出每次频率更新时,需要赋给的定时器初值。这涉及到16位的除法运算,汇编里面的除法器貌似只有8位,不够用。没办法,我们到处找16位除法的算法,最后用减法循环模拟了一个,效果还不错。

虽然是一个小组,但是我们四个暗地里多少也会有点竞争,谁都不想落在最后。最快的是阿海,波形发生器的每一步都是他先规划好,做出来,然后我们几个再去模仿。当然,不是单纯的复制。矩阵键盘的扫描上,我跟他的算法不一样,DAC0832的驱动电路,我俩也各不相同。但是,不可否认的是,他给我树立了很好的榜样的力量,让我知道,这个方向,这个思路是可行的。

记不清哪一天了,是个下午。我愣愣的把示波器打开,检测输出波形,当看到正弦波断断续续输出的时候,我傻了,原来我真的可以做出来。而那一天,距离我们开始做需求分析,不到45天。

后面的事情,很顺利了。大家的项目陆陆续续都出来,然后坐在一起进行经验交流。还有件事比较重要,就是学习C语言。虽然汇编效率高,但毕竟移植性太差,已经慢慢没落了,而C语言的生命力还很强,很多地方都能用到。

学完C语言,开始接触AVR和430单片机。在51里面摸爬滚打了一个月,可以说,我们是把51揉碎了,一点一点学完的,跟那种自学,仿真,或者看视频的效果完全不一样。当我拿到430的开发板的时候,我只用了3天时间去熟悉它。前面一天熟悉开发环境和开发软件,后面两天看相关例程。因为我们动手过、实战过、焊接过、调试过,当我们再去看这些高级单片机的时候,真的是一种轻而易举、水到渠成的感觉。

总结:很多人学51学的很仓促,觉得这是个很基本的东西,快没人用了,简单过一下就行。大错特错!上世纪80年代,intel将8051的内核技术转让给各个厂家,才有了不同厂家的51单片机。而后续的各种高级单片机,可能内核已经不是51,但在用的时候,都可以看做是一些寄存器+功能模块。记得逛一个论坛的时候,一位工作多年的老工程师说了这样一句话:51,妙用无穷!现在我才有一点体会到这种感觉,可以这样说,如果你能把51单片机吃透,记住,是吃透,市面上的所有单片机,你都可以信手拈来!

另外,花钱的事。怎么说呢….先上图

这是我学单片机买的板子,还有几块没照,光这些已经花了好几百。首先要说的一点,也是重中之重:学单片机一定要买开发板!因为他是实战的技术,你在电脑上玩赛车玩的再好,到实际中也不管用。Protuse的问题我在上面已经说过了,因为天朝大学的无能,没有搞清楚这个软件应该放在单片机应用的哪个阶段(个人观点,不喜勿喷)。

​我参加培训花了4000元,后面,陆陆续续买开发板花了也有一千左右。但是没有一次会觉得不值。参加培训,我是在拿钱换时间,我一下子就跟从业十年的单片机工程师坐到了一起,单片机市场、类型、编程语言、画图经验、应聘技巧等等,用我老师的原话:你能学到我的一两成技术,就能正常就业了。

这里,我不是要催大家去参加培训,我的目的是转换大家的思路。尽量少做伸手党,要舍得投入,自学是最慢、最没效果的。

大概是11月份,进入找工作的阶段了。说起来比较丢人,因为我性格上比较内向,面试的时候表现的不是很好,错过了一些机会。找到的第一份工作是在一家医疗器械的小公司,月薪只有2500,因为当时已经毕业几个月了,不想再花家里的钱,所以有点着急。而且,试用的阶段也是比较戏剧性的。为什么?

公司那边同意给我一个试用的机会,前提是,把它们现有产品里面的一个bug改过来,限时一个月。当我打开他们的代码的时候,我乐了!为什么?可能这个问题对于别的新人来说很麻烦,但对我来说,太简单了。因为他们的代码竟然是用汇编语言写的!可能这就是缘分吧。

那个时候的我对汇编熟练到了什么状态?我可以看代码不需要注释!当然现在不行了,毕竟好几年没用了。也很感谢当时项目组的王公,帮我讲解产品的原理图,我才能快速的明白电路原理,另外,程序风格写的非常好。果然,半个月不到,问题解决了,我也顺利入职了。

后面的工作,比我想象的轻松很多。因为公司小,产品单一,所以研发的事情一拖再拖。主要工作就是组装机器、产品配送、故障电路调试、还有售后维修。周末偶尔回到燕郊培训部,感受一下当初学习的气息,顺便拿几片不要钱的芯片。也会跟找到工作的同学聊聊工作的内容,发现各有搞笑和无奈的地方。

培训部有一点很好,即使你离开了,想要什么资料,它都会帮你找来。记得10年初的时候想学一下cadence这个软件,问那边的朋友有没有相关资料。结果给我发过来一个2G的系列视频教程,是一个叫于博士的大神制作的视频教程,从原理图到PCB都有,把我乐坏了。因为当时这个教程在网上还没传开,所以显得很珍贵。

终于,待了不到一年,大概是2010年八九月份。做够了文案整理和国标的研究,我感觉到了自己的退化,这不是我应该做的。于是我提出了辞职,裸辞,就是说还没找好下家。刚好赶上当时换住的地方,一下子交了很多房租和押金,弄得自己很拮据。所以,这里奉劝各位,辞职以前,尽量找好下家,不然的话后果很严重。

总结:1、很多人写程序风格很烂,什么注释也不加。这是很坑人的,我可以负责任的告诉你,就算是自己写的代码,如果没有注释和良好的风格,三个月后,保证你自己也看不懂。这里贴一段当年入职时调试的代码,懂的人自然就懂了,知道写的风格有多好:

;***************************************

keyvalue    data    30h

power data 31h;理疗输出功率变量

time data 32h;治疗时间存储变量

timepal data 33h;输出功率定时参数低位

timepah data 34h;输出功率定时参数高位

timelastset     data    35h     ;备份用户设置治疗时间

STORE_TIME      data    36h     ;预热开始定时参数位置值存储空间   

————————————————————————–

checkkey:

jnb keyflag,setbex1 ;有键盘中断进入键盘处理程序,没有则跳转

        mov r1,keyvalue         

k1:     cjne r1,#0feh,k2

        lcall powinc           ;跳转到功率增加子程序段

  ajmp  kout

k2:  cjne r1,#0fdh,k3

        lcall powdec          ;跳转到功率减少子程序段

  ajmp kout

k3:  cjne r1,#0fbh,k4       

        lcall timeinc         ;跳转到时间增加子程序段

  ajmp kout

k4:  cjne r1,#0f7h,k5       

        lcall timedec        ;跳转到时间减少子程序段

  ajmp kout

k5:     cjne r1,#0efh,setbex1

        lcall onoff           ;跳转到onoff子程序段

kout:   clr keyflag         ;清除键盘中断标志

        lcall playkeysound    ;播放按键音

;       lcall d100ms

  lcall d100ms          ;每秒最多响应3次按键

        setb ex1              ;开键盘中断

2、小公司锻炼人,虽然待遇一般,但是接触的东西多。一旦你换到一个新的环境,你会发现你比别人已经优秀太多了。

3、换工作的时候一定要谨慎,尽量找好下家再辞职,不然的话自己很被动。

当时在网上投了很多简历,记得有一天面试回来在公交车上。手机忽然响了,接通以后是一个中年男人的声音:

你会用单片机么,我们这需要单片机工程师,你过来吧!

我乐了,心想这公司招人的方式也太直接了,我就问他:

您那用的是什么单片机啊,51,430还是AVR?

谁知道他说了一句:

你说的都不对,430不是单片机,是DSP!

我愣了,心理纳闷,这是哪路神仙在玩我啊,430用了好几个月,明明是单片机,怎么到他那变成DSP了。直接说他不对吧,肯定不合适,会让人很没面子,于是问了问面试的地点,第二天就过去了。谁知道这一次,迎接我的,是一个超大的坑!坑爹的公司啊!当然了,这是后话,当时我的愿望还是很美好的。

面试的过程很诡异,现在想想,他貌似没有问我什么技术问题,当时的场景更像是一个传销人员给我洗脑。大致情况就是,他们公司之前是做工程项目的,比如修路什么的。企业很大,去年的利润是十几个亿。但是是劳动力密集型企业,现在想转做技术密集型,所以准备成立一个部门,进驻电子行业,将来你们都会成为这个部门的骨干。前期待遇不是很高,月薪只有2500,但是后面部门做起来……可以想象,没经过什么风雨的我,一下子就被那大叔的十几个亿吸引了,满脑子都是钱,貌似没怎么考虑就答应了。

第二天去他们办公室,心凉了一半。真的是个办公室啊,只有不到20平米,焊接的试验台都没有,只是一个茶几,上面放了一个尖嘴的烙铁。尖嘴烙铁,貌似只有入门的学生或者修理工人习惯用,正经调试电路的人都是用平口烙铁的。里面三个人,一个叶工负责带头,两个小弟负责帮忙,其中一个人拿出本51的指令集,用手指着上面一个指令问我这是什么意思,貌似是想考考我。我瞄了一眼,顺嘴一说,他就没话了。虽然过去一年有点懈怠,但基本功还在。

当时貌似是在做一个单片机定时控制继电器的一个设备,想用弱电控制强电的开关。难度不大,主要是安全问题需要注意。据说去之前,两个小弟里面的一个已经做了快半年还没做好,用的还是51单片机。刘工(就是昨天面试我那个)问我:

你擅长哪个单片机,需要多久能搞定?

我看了下他们的原理图,以及需要实现的功能说:

51,430,AVR都能做,十个工作日左右吧。

刘工想了想说:别用51了,用高级一点的单片机,还能练练兵。

我说:那就AVR吧,下载调试也方便。

第二天我就后悔了,不是说做不了。正常的实验环境,是一点问题都没有的,问题是他这里不正常,什么都没有。没有示波器,没有试验台,没有面包板,没有下载线。仅有的一个烙铁还是尖嘴的,还有一些零散的电阻和LED,以及控制电路要用到的器件。

我擦了下冷汗,算了算要用到的器件说:我去趟中发….

下载线我自己学习的时候买了一条,主要用他们提供的一块液晶。AVR单片机控制的,具体型号记不清了,不过底层驱动都写好了,我只负责应用。然后多出来的几个引脚负责开关控制。总算在第十个工作日搞定了。这个时候,叶工有事请了半个月的假,又发生了一件让我想不到的事…..

貌似聘请叶工的月薪是5K多一些,而我们几个人都是2.5K,然后刘工感觉我的工作能力可以顶替叶工,毕竟这十个工作日我解决了很多问题。而且那两个小弟也开始向我靠拢,于是,刘工私下主动辞退了叶工,这让我们很是诧异,原来商场如战场是真的…..

后面的工作,进入了研发的节奏,这是我想要的。定时控制完了之后,有个项目,是要给一个仓库做一个温度检测系统。仓库很大,所以要用到zigbee技术,放置许多无线结点,然后数据上传到电脑上。我对zigbee比较感兴趣,于是着重看了很多相关的东西。最后发现,这个技术对应到单片机上,只是一些指令的控制,毕竟让一个单片机工程师整天研究通信频率、通信协议不太正常。于是刘工申请了几块模块,让我们进行测试。

我选择了mega8做为控制核心,一是调试方便,二是芯片体积小,引脚少用到温度检测上比较合适,第三,mega8上面有SPI接口,直接就能驱动zigbee模块,省得模拟了。

那两个小弟对此一片空白,于是我又去了一趟中发,买了几片mega8,焊接mega8的调试板,还有下载线,杜邦线。回来以后,又找了块黑板,给他们讲解了一下mega8如何使用。戏剧的是,去年这个时候我还在苦逼的学习,今年已经可以给人讲课了。

模块调试的很顺利,一个星期就调试通了,但是越来越感觉那个刘工人品有问题。之前辞掉叶工是一方面,后面许诺的很多福利都拿不到,然后又把销售和研发放在一个办公室,我一天有三分之一的时间都在听那个销售哥们打电话,根本没办法正常思考,最坑爹的是工资要拖欠三个月才发。反应了很多次,无果。

某天的一个下午,我给他们演示了如何把采集到的温度数据无线接收后,上传到电脑上,然后开始和软件部门的同事商量如何编写上位机收集串口数据的事情。刘工加入了我们的谈话,然后彻底毁了我对他的印象…

软件部的同事之前只会从数据库,或者固定的文件读取数据,这次我把数据发到串口上以后,他们不会采集,或者说他们之前没做过类似的东西。

这个时候,刘工插话了:是不是跟进制有关,换成二进制会不会好一些?

我……

刘工:要不八进制也试一下。

我看了看软件部沉默的同事,说:刘工,这个跟进制没关系,是我们两边现在对接不上。

刘工:真的么,换成十六进制呢?

我无语了,现在也想不起来那天是怎么结束的了,只是记得当时心里就累了,萌生了想走的想法,于是开始投简历。

总结:很多公司习惯返聘一些退休的高级员工,他们回来工作不是为了钱,只是为了找点事情做,所以工资开的很低无所谓。但这对应届生就有一个不好的影响,公司在招人的时候会说:我们这个德高望重的员工都拿这么点钱,你觉得你可以拿多少? 我相信很多应届生都不知道该怎么回答。

另外,面试的时候千万不要随便相信一些不知名公司吹出来的牛皮,公司利润再多,发不到你手上也没用。而且,如果方便的话,可以适当要求参观下办公地点,一定要清楚地知道会不会拖欠工资。

越往后面试,越会觉得面试很直接。为什么?公司找你来是做项目的,行就是行,不行就是不行。而面试官基本都是懂技术的,几句话就能问出你的深浅,你前面说的再好听,技术不会别人也很难给你机会。因为你已经不是应届生了,没有培养的意义,所以,我们在工作的路上,一定要学习不止,这样,当机会来的时候,你才不会眼睁睁的看着它走掉。

简单算了下,在第二家公司只待了三个月,zigbee的接触与一些网络协议是我最大的收获。我想找一个靠谱的公司,让我不用担心饿肚子,同时也能认真做一些靠谱的研发工作。终于,有一家台资企业愿意给个面试的机会,我把这一年的收获整理了一下,对自己说了声加油,然后就去了!

第二个星期,我拿到了这家公司的offer,月薪5K,四险一金都有。好吧,总算解决温饱了,剩下的日子可能会有些累,但总算是一个成长的过程,很庆幸之前经历的那一切。最怀念的是当初的培训部,那里教的不光是知识,还有学习的方法。即使有些东西是我不会的,但如果我想去学,借助那里的资源和学习的方法,我可以最快的速度学会。据说现在已经变成在线辅导了,更适合广大的学员,但已经离我很远了。

说一下这段时间断更的原因:

1、学车,一把年纪了,竟然没有驾照,自然要抓紧时间。而且平时动脑多一些,动手少一些,导致学车的时候各种弱智的情况都有出现,唉,不提了。现今驾照已经到手。在这里奉劝那些还在学校的朋友,抓紧寒假或者暑假的时间,赶紧把驾照弄下来。将来工作了,你就会明白什么是人在江湖身不由己,只能一个周末一个周末的挤时间去练车。

2、把妹…用这个词不太合适,也是缘分到了,刚好遇到一个特别靠谱的妹子,结束了本人多年单身狗的生活。理科男大部分情商都偏低一些,遇见喜欢的女生都不好去表白,本人也是错过了好多,不过这次总算是把握住了,狠狠地把握~~~(此处应该有鲜花)

个人建议,该理性的时候理性,该感性的时候感性!

3、公司项目紧,这才是最苦逼的。最忙的时候,连续两个星期一直在加班,女朋友都异常的生气,不过这也没办法,研发这行就是这样,任务来了就要认真扛着。国庆前的那一个星期,整个工程部都在加班,早点的晚八点回家,晚一些的十点回家。

好了,言归正传,继续苦逼的单片机学习之路。

这家台企公司挺小的,只有不到十人,进去以后才知道,总部在台北,北京这里只是个研发部。老总每年春天会来呆一个月左右,视察一下工作状况。平时都是公司的主观大姐进行管理,公司在人民大学地铁口附近。不过最近几年因为雾霾的情况越来越严重,老总都不愿意来了,嘎嘎嘎~~~

幸运的是,从家到公司,有直达的公交车,四毛钱就搞定了。面试的时候主管大姐说,如果定下来的话,希望能尽快入职,因为公司有项目要进行,我一下子就兴奋了,终于有东西可以做。

入职第一天,就是给我分了一台旧电脑,然后重装系统。系统装好后,装各种常用的编译环境,51单片机用的自然是KEIL C,AVR单片机常用的有两种ICCAVR和AVRSTUDIO,自学的时候我用的后面一种,不过进到公司里发现大家都用ICCAVR,于是我也慢慢换过来了。430的话,用的是iar embedded 。

第二天,技术主管方工拿了一块板子,上面有一块液晶屏,跟我说:这个液晶上电启动的时候屏幕会黑一下,你查查看是什么毛病!

我问了下:这是什么单片机?

方工:AVR mega128.

我:液晶型号呢?

方工:12864.

我一听,心里有底了,虽然之前没怎么用过这个液晶,但是我用过别的型号的,太复杂了不敢说,简单的显示个字符、符号,那都不是事儿!跟方工要了这个液晶的器件手册,还有JTAG仿真器,mega128的器件手册遍地都是,然后就开始调试了。

AVR的单片机有一点好处,那就是仿真器便宜,在某宝就卖四五十块钱,仿真器上电连到板子上之后就能进行单步仿真,每一条指令执行的效果都能在板子上看出来,这样对于错误排查,是非常有效的。尤其是当你用一款不怎么熟悉的器件的时候,这种直观的效果,比你傻傻的PROTUSE仿真形象多了。

用了半天时间,把液晶的器件手册过了一遍,一个寄存器一个寄存器的看,然后对照当前的代码,判断问题出现的地方,就出在初始化的位置。具体黑屏的原因没看出来,于是用仿真器连上板子,一步步查,很快,故障原因找到了,初始化顺序有些问题,调整了一下就好了。

    这段时间很多人加我好友,问了很多问题,我知道的,我不知道的,都有很多。


    首先,我真的不是大神,只是在某些方面会的多一些,真正的大神,都在一声不吭的忙着做项目,我也就爱闲逛,所以才多说一点,多写一点。在一些真正的高手眼里,可能我还不入流。


    其次,这段时间真的被问了很多问题,也渐渐知道了自己不擅长的地方在哪,所以今后也会更加认真的去研究一些东西,有机会的话也会继续分享自己学习的经历。


    第三,其实单片机入门真的很简单,买块开发板,然后跟着配套视频学就行了,如果有不懂得地方,多听几遍,不理解的词,多百度几次,有句话说得很对:百度一下,你就知道,百度十下,你就知道的太多了!现在我遇到问题,也会习惯性的百度,基本都能解决。

    但是,还是像前面说的,向别人问问题的时候一定要说清楚自己在做什么,不要什么都不说,然后就:

大神,我代码调不通,什么问题啊? 

或者,粘贴一大片代码过来,然后说:

大神,我代码有问题,这是啥原因啊?
最后,分享两个查芯片资料的网址,平时查什么芯片的datasheet,我基本都会用这两个网站
http://www.datasheet5.com 还有 http://www.21ic.com/

前段时间忙着订婚,那叫一个紧张+激动,最兴奋的还是收红包的时候,多多的money啊~~,好了,继续回到故事里!

现在想来,之前方工让我调试那个液晶屏可能是对我的一种测试,不过当时没有想到那里,所以也就顺顺利利的过去了。稍后的日子相对轻松一些,因为项目还没有正式启动,我每天就是看看资料,跟新公司的同事打好关系,例如时不时的打下热水什么的,来了送快递的,我就先跑出去。其实帮同事收快递有个好处,我记性不好,刚见面的人很难记住名字,但是快递单上都会有名字,这样既当了好人,又能熟悉同事的名字。

慢慢都清楚大家的职责和负责的方面了,不算我,研发人员一共四个

方工,精通光纤检测方面的技术

刘工,擅长网线、路由方面的检测设备

阿月(男的)主要负责DSP算法的设计,

还有一个杨工,主要负责软件、上位机方面的研发,公司现有的上位机软件都是他写的,很厉害,说起各家大型的软件机构,头头是道。

正式项目还没有启动,方工还在设计和规划,公司自然不能让我闲着,给我分配了两个任务,没想到的是,这两个小任务都把我折腾了一下。

任务1:老产品升级!理论上来说这种活都是很简单的,设计原理都不用考虑,因为东西是现成的,只需要对相应的部分进行优化就好了。

那个任务交到我手上的时候,是这样跟我说的:设备上的液晶部分的驱动IC停产了,于是厂家那边重新换了一颗IC进行液晶模块的设计,IIC协议通信。接到我们的电路上的现象是字符有些乱码,应该是IIC的时序不兼容,调整一下时序就好了。于是我真的以为就是时序不兼容,真的就傻傻的去调整时序去了,结果那真的是一个坑爹的活啊!

于是那几天的工作就是在各个驱动子程序里面添加 NOP,一个,两个,八个,十个,但是怎么加,还是有乱码,现在想来,自己真是够傻的,不过当时真的就是被带到死胡同里面去了。

不管怎么加,都是有乱码,而且一点好转的迹象都没有,我开始有些疑惑:不应该这样啊!老的液晶加上后,显示正常,新的液晶加上以后,打死也不正常。整个板子的供电电压是3.3V,因为用的msp430f147,但是液晶部分的电源用了一个升压芯片,升到了5V。也就是说,液晶的驱动信号是3.3V的,但电源是5V 的,会不会是5V的液晶不应该用3.3V的信号驱动?

看到有吧友说我更新断断续续,我也没办法, 女朋友情绪不稳定,总要我陪她,每天下班聊个电话要好久,然后就困得不行了……..哎,大家忍忍吧

故事继续,于是我做了一个测试,从家里拿了一块51的最小系统板,完完全全的5V供电,5V驱动。把430里面的驱动程序移植到51里面,做了一个简单的液晶屏幕从左到右点亮的测试程序,很顺利,没有调试,一次就成功了。

接上新的液晶模块,上电以后看效果,奇迹出现了!!!屏幕很完美的从左到右慢慢点亮,没有一点乱码。

到此为止,我觉得问题应该解决了,就跟厂家那边沟通,说了自己的看法:认为新型的液晶驱动IC性能不如老款,5V电源供电的时候,3.3V的驱动信号无法让液晶正常工作,然后整理文档,开始写总结了。

意外的是,下午的时候厂家那边回了一封邮件,把我的推测完全推翻了!

厂家回复说:他们做过测试,给液晶屏5V供电,用3.3V信号驱动,是没有问题的。这下我晕了,只能重新找问题。

于是我拿着万用表,量信号,一会儿量量电阻,一会儿量量电压,其实自己也是晕的,感觉最有可能的结果被推翻。但是厂家那边既然说了这个话,肯定是有依据的,毕竟要出那么多的货。

于是重新整理思路,首先确认自己板子上的3.3V驱动信号,用万用表量了一下,3.29V,没问题;然后确认给液晶供电的5V电源芯片,用万用表量了一下,5.11V!!!之前培训时大量的焊接、调试经验以及这两天的调试过程,让我对这个数值感觉到了一丝不安。其实之前就已经量过,是有些偏高,但是一般的芯片兼容电压都是比较宽的,不应该出事。

不过现在排除了那么多可能,剩下的要一个一个认真过滤。于是,用最小系统上面的5V接过来给液晶,GND连在一起,之前设备上的5.11V用壁纸刀割断,上电,乱码终于消失,瞬间,整个世界都美好了!

也就是说,因为升压芯片性能不稳定,原本该升到5.0V的,升到了5.1V,就因为这0.1V的电压,导致液晶屏工作不正常。当我把这个结果告诉方工和刘工的时候,他俩也是一脸的不敢相信,因为通常来说,电子设备虽然有额定工作电压,但是是有一个比较宽的范围的,比如一些芯片5V额定电压,但是4.5 到5.5也能运行,像这次这个液晶,及其罕见。

果然,下午的时候把结果发送给厂家那边,他们没话说了,兼容性做的这么差,估计他们自己也没想到。

这周一去了趟上海,跑了两个地方,累的要死,都没时间看看东方明珠塔。感受有两点:1、交通和北京一样堵;2、说话很好听,可能从小习惯了说普通话,没有自己的第二语言,觉得每个地方的方言都有自己的特色。

好了,继续更新。

任务2,说不上是产品升级了,有一台设备,线路通断检测用的,使用1602做的显示屏。可以同时检测12条线(或者是16条线,记不清了)中间是否有断点。检测结果会显示在液晶屏上,上级感觉显示结果排布的不够美观,想修改一下,于是也交给我了。这次任务的结果么,呵呵呵呵呵呵呵……………………………..

当时心里想的是,这个应该更简单了,电路都不用动。单片机是AVR的AT MEGA32,于是拿了JTAG做单步调试用,跟主管要了源程序准备大干一场。打开代码后,我大致看了一眼整体框架,心里有种不好的预感…….因为这个代码写的,真特么乱啊,怎么形容呢….

打个比方,原本是延时的子程序,他会写一半,另一半放在中断里;原本是中断的子程序,他会写一半,另一半放在显示驱动里;原本是液晶显示驱动的子程序,他会写一半放在别的地方,于是整个框架你会看到他的各个地方调用各种看不出功能目的的子程序,不是一般的乱。

终于,我坚持看了三天,实在看不懂他的流程,找方工说了当前的状态。方工哈哈一笑,说:交给杨工吧,这程序作者不在这上班了,风格确实写的乱,我们看他的程序时也是一边看一边骂。

方工的话可能是种安慰,还是觉得心里过意不去。后来无意中聊起这个程序的作者,听说当时跟公司的主管大姐闹矛盾,故意把程序写的很烂,定义变量的时候经常用fuck1、 fuck2来定义,后来直接走人了…..能有这样的奇葩,也是醉了。

任务转交给杨工,虽然他是写上位机的,但是C语言功底很好,调试了四五天,搞定了,不过我感觉他也挺恼火这种事情的,只不过不好意思开口说脏话,后面主管大姐让他再修改一些细节,他都不愿意改,因为实在是太乱。

我很好奇这么乱的程序他是怎么看懂的,于是就跟他聊。

他:你用软件什么看代码的?

我:用的ICCAVR。

他:怪不得看不懂,ICCAVR其实就是个编译软件,看代码的话效果一般。你可以试试source insight,这个非常好。

果然,我装上试了下,看起来非常舒服,所有定义的变量,子函数都能自动识别出来,而且我后来才知道几乎所有写代码的工程师都会用这个软件,如果不知道这个软件的话,会显得有点业余….好吧,看来我真的很业余。如图

随便打开了一个文件,左侧是整个程序中用到的函数名、库名,点击函数名,会自动跳到该函数。所有引用的库、定义的变量都会自动识别,给字体搭配不同的颜色方便区分,颜色也是可以定义的,还有更多功能就不一一介绍了,大家慢慢研究就行了。

使用方法也是我自己慢慢摸索的,所以也不要问我教程了,因为我也没有。

总有朋友加我QQ,问我一些问题,问的最多的有两个:

1、51学到什么样才算可以,这个问题确实要谨慎的回答。我想了想,分为内外两方面,内部,熟悉51单片机的内部结构,定时器、中断、串口,想用哪一部分功能的时候都信手拈来,记得参加培训的时候,我和凯凯因为按键的驱动程序争执了半天,他感觉只能通过中断来进行按键检测,而我用的扫描的方式,让他觉得不可思议。外部,知道一些常用的器件,常用的总线通讯方式,例如IIC总线,SPI总线,都能用51的IO口模拟。

知道上面那两部分就够了么?不够!因为单片机是用来做项目的东西,你只是知道了每个部分的环节,没有连起来,就好像练武功,你知道所有的招式,但如果不能把招式连起来形成一整套动作,没有意义。所以必须要用51做个项目出来,只有这样,你才能经历研发的整个流程,在实际中验证自己所学的东西是否有用。

2、学习单片机需要什么样的基础?需要学好数模电才能学单片机么?如果看一些卖开发板的视频教程上说的,他们会说的很轻松,只需要简单的数电、模电、C语言基础就可以。确实,按照视频上讲的,能够玩转他们的开发板,但是学习从来就不是轻松的事。而工作中更会遇到各种各样的突发状况。

为什么上完小学要上中学,为什么上完中学要上大学? 能不能直接上中学? 不行,因为小学的知识是为中学铺垫的,中学的知识是为大学铺垫的。而单片机是一项一直在钻研的技术,你会遇到各种新的芯片要了解,新的技术去学习,了解完当下的问题,你会遇到新的问题。你会的东西越多,越会感觉自己知道的东西少。

如果单从入门来说,高中生就可以进行单片机的学习,但是要学好,都会经历一段时间,就看自己的努力程度了。

非常对不起吧里的朋友,一下子断更断了半年多。中间经历了很多很多,有高兴的,也有不高兴的,但是对一个人的人生来说,都是一场经历,也是一种财富。这段时间我会试着把这个帖子结束,毕竟已经拖得太久了,而且过后可能会尝试换一种工作方式了。

接下来,故事继续。

还是在那家台企的公司,那两个任务完成以后,研发项目开始启动。那是第一次接触比较大的项目,要研发的设备名称是OTDR,英文全称是Optical Time Domain Reflectometer,翻译成中文是光时域反射仪。它是利用光线在光纤中传播时的瑞利散射和菲涅耳反射原理设计而成的一种光纤检测设备。

如果你听不懂没有关系,用人类的语言来说,光在光纤中向前传播的时候,会发生一些散射和反射,这些散射和反射的传播方向与光源发出的光传播方向相反,通过检测这个反射回来的光对应时间的强度与状态,可以知道光纤的长度、故障点等等相关信息,所以这种设备在光纤施工的过程中是比较常用的。所以在心里我就把这个东西定义为一个检测光纤的玩意儿。

怎么做?

总负责人是方工,对光路检测研究比较多。记得刚入职的时候,还扔给我一本光学方面的书让我看,当时我还纳闷,这单位啥情况,不研究电子研究光。但是后面才意识到,电子电路也好、外语也好、编程也好,都只是一个工具,我们要做的是使用这些工具,按照特定的需求,做出产品,做出一个给人用的产品。例如,要做一个MP3,那么就要对音乐有一定的了解;要做一个相机,那就要对图像效果有一定的研究,比如爱自拍的人喜欢什么样的效果。

这些知识,或者需求,单单一个只懂电的人肯定是搞不懂的,你处在哪一行,就要研究哪一行的专业知识,这是必然的。

方工的做法很直接,买回来国外的设备,拆了复制。不要觉得诧异,北京中关村电子市场就有很多专门抄板的,我估计很多小公司也都是这样做的,除非你处于行业里的领头羊,那样的话你就处于被抄袭的地位,否则多少都会有一些借鉴的地方。

在我来之前,国外设备的原理图已经被推测的七七八八了,处理器大致分为三部分:ARM+DSP+FPGA。

FPGA部分负责控制激光发射端和数据采集部分,FPGA收到采集的命令以后,首先控制激光头发光,发光时间从10ns到几百ns不等。发光的瞬间由一个并行AD对反射回来的光强度数据进行持续采样,采样时间貌似是和发光时间相等,时间太久记不清了。采到的数据存到FPGA内部的RAM中,经过简单的处理然后通过MCBSP接口发送给DSP。

DSP对FPGA收到的数据进行分析,如果光纤是一条完整的线路,那么反射回来的光强度会随着时间逐步衰减;但如果一条光纤是由两条或者多条光纤通过端子连接起来的,那么连接点位置会反射回的光强度就比较大,通过判断光强度随时间变化的一个关系,就能大致知道光纤有没有断点或者弯折的地方,这是OTDR的大致原理。

ARM部分负责统筹全局,同时驱动屏幕把采样结果通过曲线的形式显示出来,毕竟图像更容易让人理解。

ARM部分和DSP部分都有人负责了,就剩下一个FPGA部分没人管,于是乎,我又开始搞FPGA。现在回想起来,那段时间其实也是挺开心的日子,衣食无忧,每天也能学到东西,领导提的要求都能满足。

大学的时候接触过CPLD,那时候用的编译环境还是MAX PLUS II,编程语言是VHDL。MAX PLUS II是altera公司提供的开发工具,据说在2000年(百度上查到的数据,官方的数据没查到)左右就停止更新了。这次使用的器件是altera公司的cyclone ii系列的EP2C8T144,MAX PLUS II不支持,于是转向了quartus II。

刚开始用的quartus II版本好像是7,有一个逻辑编译死活过不去,是用switch语句写的一个状态机,当时觉得挺奇怪,因为就是一个很简单的判断过程,于是卸掉quartus II 7,改为quartus II 9,再次编译,我靠,竟然就过去了。当时百度了一下原因,好像是因为软件自身功能限制。所以现在养成一习惯,工作中比较重要的软件,只要不是特别麻烦的,都会尽量升级到比较新的版本,即便不是最新,也是第二新。

印象中quartus ii 9这个版本还带有仿真的功能,但是到了10就没有了,后面的应该也没了吧。一开始心里还有些不习惯,没了仿真怎么验证,后来发现了一款功能更强大的仿真软件:ModelSim。

关于FPGA的仿真这里要说一下,玩过单片机的,调试的时候都习惯有个仿真器,这样的话程序下载进去,通过点击电脑这边的仿真界面能控制实际电路中的单片机的运行步骤,执行几行指令、或者执行到什么地方都能够控制,实时在电路上看到现象,哪里出了问题能立刻找到,这样调试非常方便。

但是FPGA中没有这样的仿真器(NIOS II软核仿真除外),真的没有!也就是说我们没办法像在线调试单片机那样一步一步的在线调试FPGA,怎么办?

答案是软件仿真!关于软件仿真,我找到了ModelSim。

ModelSim的使用方法很简单,需要你会写tesebench。也就是说你要模拟FPGA在电路中的工作条件,给它发送相应的控制信号,这样的话FPGA的程序就会运行起来,无论是外部引脚还是内部变量都会跟随运行时间发生变化,只要观察特定时间的信号是不是符合我们的要求就可以了。

我在网上找了几个例子,参照了一下,发现写法很简单,也是基于硬件语言,基本上一天就搞定了。如图所示,非常爽~~~

然后说编程语言,编程语言肯定离不开VHDL与Verilog的比较。

由于就在那段时间用了一下可编程逻辑器件,所以这两种语言的优劣也不太清楚,VHDL据说是美国军方设计的编程语言,相对复杂一些,而Verilog是民间研发的,入门更简单一些。所以当时就选择了Verilog。

C语言与VHDL或者Verilog语言最大的区别是什么?

很多初学者会觉得里面的if语句,或者while语句用法差不多,感觉区别不大。但实际上,C语言是顺序执行的语言,VHDL和Verilog语言是并行执行的语言,这是他们最大的区别。

顺序执行指的是处理器只有一条任务线,所有的任务按照一定的顺序排在这条线上,按照从上到下的顺序循环执行。偶尔有一些中断、定时的需求,处理一下就完了,执行的任务以任务线上的需求为主。

但是VHDL或者Verilog语言不一样,它是并行执行的语言,可以有多条任务线,这些任务线是同时进行的。

​打个比方,C语言是一条流水线,一道工序挨着一道工序,想增大单位时间内的工作量的话,只能加快速度。但是VHDL或者Verilog语言是多条流水线,想增大单位时间内的工作量?简单,再开一条流水线就行了。

硬件部分方工已经设计好了,我主要负责在上面编程。刚开始的时候只是测试电路上的一两个功能,任务少,我还没什么感觉。但是当需求多了以后,我就有了一种明显的精神分裂的感觉,感觉脑子里有团浆糊。这是写惯了C语言顺序执行的程序,写Verilog出现的一种症状。适应了几天,然后就过去了。

那段时间每周都会开例会(这句话不标准,应该是大部分公司都会定期开会),上一周的工作总结,下一周的工作安排。作为一个性格内向的人,我是比较抵触这种会议的,因为需要发言。但实际上这种会议对于工作的促进是非常有用的,它能让你快速的理清楚你上一周做了什么,下一周应该做什么。进度到底是快了还是慢了。

当然,有的地方也会通过写工作日志的方式来记录工作的进度。可以肯定的是,在这两种方式下工作、生活,效率都会很高。

前期调试的过程,大部分都比较顺利,激光器的开关控制、数据的采集、数据的处理,虽说编程语言不一样,但是有大量可借鉴的经验。唯独一个地方出现了问题,那就是数据的上传。现在回想起来,这个问题算是不大不小,但是解决不了会让人无比恶心的一个问题,那就是数据的上传。

数据在FPGA,要上传到DSP里,通过DSP的MCBSP接口。FPGA上面没有这个接口,需要用普通的IO模拟,于是我把这个接口的时序图拿来,一个时钟一个时钟的卡,确保每段时间都满足。但是上传的时候,死活传不上去,比之前电压的问题还要恼火。需要上传的有几百个字节的数据,每次只能传上去一个,然后就没反应了。总之,很恼火。

这个问题卡了我好几天,方工也过来看了几次,一开始他也觉得是个小问题,但是好几天没动静,他也急了。我把情况跟他说了一遍,时序方面的事他对我也很放心,毕竟之前的工作表现都很好,不可能连个时序图都模拟不好。他在他的位子上坐了一会儿,然后跟我说:

实在不行,改并行接口!

我心里接受不了这个结果,说:很简单的问题,不应该,而且那样的话板子要重画了。

方工又想了想:你在传送的时候,每个字节之间多加一点延时试试。

我当时无精打采,明白方工的意思,但是心里对那个DSP的datasheet有股怨念:老子明明按照你的时序走的,为什么就是不行?

但是工作的事不能耽误,于是我在每个字节之间加了一小段延时,好像是几个us吧。再试,忽然就特么好用了,几百个字节几秒钟就传了上去。记得当时浑身都放松了下来,心里一块大石头落了地。然后杨工写了个小软件,把采到的数据绘制成曲线,当然,这其中有一定的处理,不过已经不是我的工作范畴了。

绘制出来的曲线和我们买的样机生成的曲线几乎一致,在断点处都会反射回较强的光,但是随时间衰减的特性表现的不是很明显,于是杨工和方工两个人又开始到处找资料、研究算法。至于我,可以暂时休息一会儿了~~~

总结:

1、FPGA与单片机是两种不同的器件,擅长的领域不一样。注意,最关键的一点:FPGA的本质是一堆逻辑门,通过硬件描述语言转换成电路,所以它是没有CPU的,它是一大坨可以任意定制的逻辑器件。当然通过一定的方法可以给它嵌入一个CPU软核,这样的话,它可以变成CPU+逻辑电路。在并行运算的方面具有非常大的优势,多用于通信、图像处理等等。

单片机是有CPU的,可以被理解为跑程序的微型电脑。相比较而言,单片机C语言偏向于软件。

2、关于经验。方工随口一说加个延时,然后问题就解决了,靠的是什么?貌似也只能是以往大量的经验。

但是关于经验,有时候也是有争议的。如果过于依赖经验,就会变成知其然不知其所以然,最常见的一句话:

这个电阻(或者电容)选这么大就行,经验值!

相信很多人都听过这句话,我个人比较懒,听到这种答复也懒得追究,毕竟省事、省心。但是对于爱刨根问底的人来说,这句话解决不了任何问题。

这里给大家的建议是:把经验当成一个工具,可以经常使用,但是不能过度依赖,同时要搞清楚每一个“经验值”背后的原理。毕竟设计电路、分析电路,最本质的依靠的还是原理,而不是经验。

3、流程图。关于流程图,很多人都不画,直接去写程序。倒不是说不行,分情况。

第一种,如果一段程序,你之前写过类似的,整个流程已经非常熟悉了,那样的话是完全可以不画流程图的。

第二种,你要做的是一个新产品,之前没有写过类似的程序,那么强烈建议你画一下流程图。这样的话,整个过程、其中的细节、先后的顺利你就都能整理清楚,甚至一些没考虑到的细节在画图的时候自然而然的就考虑到了。

经常有一些新手,程序不知道怎么写。但是我问他这个功能他知道,我问他那个功能,他也知道,所以不是不会写,而是理不清流程。不知道应该先做什么后做什么,只要把流程图画出来以后,相信一半以上的问题都能解决。

OTDR的项目告一段落之后,方工觉得我能力还可以,因为我总是能在他们觉得没问题的地方发现问题,并解决问题,于是开始让我独立负责一些简单的项目。

事实上,电子产品设计调试的过程中,解决问题很麻烦,发现问题同样很麻烦!注意,这里说的是发现问题的根源。问题根源找到之后,解决起来就相对容易一些。就如同看病一样,如果找不到病因,那么你是没办法对症下药的。

独立负责项目的过程很激动,也很辛苦。因为在此之前,方案都是由别人确定好,或者分工好,然后我这里执行的是一个确定好的方案。但是独立负责的话,你就要考虑很多之前没考虑过的事,例如方案是否合理,怎样能满足需求,成本如何控制更低一些,器件如何选型等等。这些事情都是你自己要先拿出一个基本的思路,然后再和别人讨论的。如果没有足够的知识储备,做这些事是很吃力的。

独立研发的过程不多说了,因为涉及到当时公司的一些产品原理,万一手一哆嗦写多了不好。上面的项目我只涉及了三分之一的部分,写出来也没有太大影响。

总之,那几年经历了一些项目,学到了很多东西。有些事,真的要自己经历过才能明白,加班在公司过夜的情况也出现过,但是很开心,没有怨言。

在北京的日子虽然悠闲自在,但毕竟不是家,所以从2013年开始我就在想一件事,北京对我来说到底是什么?这是每个去大城市的人必然要思考的一个问题,每个人的答案都不一样,因为每个人的经历也都不一样。

第一个问题:要在这里定居吗?不会!虽然这里很发达,什么都有,但是缺少家的感觉,更不要说那恐怖的房价。我是个恋家的人,肯定会回去。而且父母年纪大了,需要人照顾。

第二个问题:要在这里呆多久?这个问题很难回答,当一个问题很难回答的时候,可以使用排除法。福尔摩斯说过一句话:把所有的不可能排除掉,剩下的,无论多么不可思议,它就是真相。

呆多久我不知道,但是我知道的是,呆的越久,越不想走。因为我认识的朋友很多都在这边,生活习惯也越来越适应这里。呆的越久越走不掉,既然这样的话,越早离开这里越好。所以,意识到这个问题以后,我就开始考虑回家的事。

第三个问题:回去以后能做什么?继续搞自己专业?我打开智联招聘,看了一下廊坊本地的相关职业。果然,比北京少太多太多太多太多了….但也不是完全没机会。

花钱找个事业单位上班? 每天开关电脑,然后喝茶看报纸?老妈到时挺希望我找个这样的工作,但是我闲不住啊!

假如专业没得搞,事业单位也去不了,怎么办?能否找到自己的第二职业?

这三个问题差不多是每个离开大城市的人都可能会考虑的,我自己么,呵呵~~~

仔细盘算了很久,当时我得到的答案是:首选当然是找到自己专业相关的工作;次之的话,去做销售,毕竟门槛低,为此还买了好多相关的书去学习;最后,如果前面两个选择都不合适,那就花钱找个事业安心单位上班吧。

这三个答案确定下来以后,就开始着手离开的事了。

首先,专业不能丢。我和单片机之间已经不是简单的工作关系了,而是一种骨子里的喜爱,即便换了工作,我也会在业余的时候研究一下。而且还会继续学习,有位前辈曾经说过一句话:高级电子工程师和初级电子工程师之间的区别在于,在面对基础知识的时候,高级工程师基本上是没有盲点的。我想,我会一直向着这个方向学习的。

其次,销售方面的书买了几本,什么《羊皮卷》啊,《营销与策划》啊。《定位》啊之类的,不一定能看下去,但至少摆摆样子。

第三,开始和公司提出辞职,同时和北京的朋友一一告别。公司那边很意外,开始挽留,我把真实的想法跟公司同事说了之后,同事也表示理解。

为什么理解?因为其中一个同事也有了类似的想法,只不过他更潇洒一些。怎么潇洒?那哥们2009年在北京沙河买的房子,当时花了60万左右,后来涨到了200万。由于个人问题一直没解决,于是在我辞职没多久他也辞职,把房子卖了,然后全国旅行去了,我那个羡慕啊~~~

走的那天,主管大姐安排我们几个同事一起吃了个饭,算是给我送行。很感激这家公司的几个同事,有问题一起分析,没有太多勾心斗角,平淡,真诚。

其他的一些朋友也找时间给我送别,当初一起来北京的几个同学,有的已经离开了,还有的贷款买了房子,准备留下来。当初来北京时的意气风发已经磨掉了很多,可能这就是成长吧。没有挽留,也没有喝的酩酊大醉,就是坐在一起聊聊天,如果时间倒回到刚来北京的那两年,估计两者画面差不多,只是几年前的画面里多了一些人,每个人脸上还有很多的憧憬。

呵呵,写的有些伤感了。

所以,把一切收拾妥当,没用的扔掉,2014年我回到了廊坊,一个熟悉又陌生的城市。可能有的人会说:你在外面读了那么多年书,又在大城市生活过,可是现在回到小城市,和那些一直生活在小城市的人有什么区别呢?

我想,可能就和那只井里的青蛙一样吧。如果我没有出去过,我的世界就是井口这么大;但是当我出去后又回来的话,再次望向井口的时候,我必然会看到不一样的风景!

本帖结束。