本人是一名普通高校的学生,离毕业不到一个月了,电子信息类专业。在一个普通的城市度过了我四年的大学生活。此时,我正坐在一间即将不属于我的教室里。在此,我将写下这段时间关于专业知识学习的经历与体会,希望能给还有机会在大学继续学习的学生一点启发或激励,愿他们能够更顺利地学到更多的知识,让心血浇灌的花木更加茂盛! 在此之前,有几点说明。其中,一些内容可能过于具体化,普通性差一些。 一、我走的是单片机方向。相对而言,算法方面研究较少,偏硬件。 二、不敢说学的多好,总结可能不完全正确、全面,仅供参考,欢迎指正。 三、这篇文章的技术含量是一个一般普通高校的学生的水平,主要是为刚入门或准备入门的学生而写,高手请不要见笑。 四、内容分为以下几个部分: 1、基础知识 2、方法 3、效率 4、一些小点 5、学习过程 6、经历 五、此文发表于2013年 06月 21日 电子工程世界论坛。 正文: 1、基础知识 基础知识也是针对单片机方向的,其他方向可能需要些调整。 先说一下主要课程。我们学校比较年轻,这个专业更年轻,我们之前只有两三届学生。新成立的往往会有较多的问题,比如,课程安排。安排不好,自己再不会调整,到最后很无奈的。关于学校的课程,我这样理解,真正对以后的实践性学习有帮助的,只有几门基础。这个头开好了,以后基本上全部依靠自学和互学。这些课程是:电路分析基础、数电、模电、c语言、数据结构、操作系统、微机原理、单片机(涉及汇编,若有精力,可看汇编教材)、嵌入式。传感器之类的,个人认为可以忽视,需要什么传感器,再找型号就可以了。如果不负责任一点,数电、模电、c语言、单片机必不可少。基本课程这就差不多,根据方向再添加吧。看一下课程安排,若不合理,制定自己的计划吧,逐步培养自学能力。别等老师讲完课,你也毕业了。我看有的重点大学学生,大一就用单片机做开发。我们上一届,大四第一学期,开单片机课,这就是差距。 还有就是一个容易忽视的内容,分立元件的识别与作用的理解。认识常用分立元件,理解所标参数的含义,它们的基本特性。 再说一下怎么学习基础知识。你要努力做到两件事情:理解与思考。你学这些是为以后的应用,不是考多少分,不理解,开发时肯定会遇到很大困难。一开始理解不透很正常,但要认真去体会。整体把握后,在实践中去验证你的理解,你一定会有所体会。比如,电容充放电,高中就讲过,但它有什么作用呢?如果搭一个电路,不工作,并一个电容,工作了,你就会意识到“电容使电路保持工作状态”,再根据充放电的性质,可以分析出,电容先被充电,负载工作,电压下降,电容放电,使电压保持在负载的工作电压范围内。上网一搜上拉电阻的作用,一大推,看完是不是会有些茫然呢。直到有一天,你的控制器输出一个信号,负载却没反应,你加个上拉电阻,负载有动作了。一测电压,有明显上升,于是,你意识到,上拉电阻增大了电压幅度。不多说了。先在理论上认识一下,再在实践中去体会。 2、方法 这些方法源于我自己开发的小东西,不多,主要是针对检测问题的。 (1)模拟法。 系统运行过程中,可能会在短时间内执行很多动作,现象的变化也比较快,难以准确识别。这时,可以分析一下这个过程,看看能不能手工模拟出这个过程,真正需要研究的往往是一个小的过程,或者可以分解成一个个小过程,不会涉及太多次反复性变化。可以试着人工模拟,看系统到底识别到什么内容。比如,小车运行,靠近边缘的一条黑线,到那一侧的检测电路(比如有至少两个传感器)清晰而稳定地检测到下方是黑线。这个过程,这几个传感器都检测到什么组合信号,又是以怎样的顺序出现?这个就可以模拟一下,尽管与实际速度不同,但可以得到清晰的变化过程,可以发现一些东西,对确定和修改检测程序很有价值。模拟的思想就是认为创造系统运行会出现的过程,通过控制一些量,使信息可以清晰的呈现出来。对过程分析有所帮助,当然,要考虑模拟与实际中的不同的因素对结果的影响。 (2)原理分析法。 有的过程,很难通过一些方式, 把变化清晰地呈现出来。这时,可以从原理出发,看看能不能推出实际结果。分析原理,要明确因果关系,这点很重要。对于电机,我懂得不多,有一点小的体会。电机性能与磁场分布、强度,线圈电阻率、绕法等因素有关。我接触过这样的电机,在电压和脉冲信号一样的情况下,由于外力被迫停止转动时的,尽管电流增大,但平均电压还是小于转动时的值,参数满足一定条件时,这两个电压的差别是比较明显的。我想通过比较超过某个电平的脉冲的频率,来判断电机是转动还是被迫停止。但我却发现,参考电平怎么调,都不能出现明显的不同的频率。如果峰值不同,差异不会小到那种程度。后来,我分析,电机转动的过程。通电导体在磁场中受力。我意识到,电机转动了,只是刚转一点就因外力而停止。手很难控制得特别牢固,况且,齿轮之间的间隙也为电机转动提供了小的空间。电机在外力作用下,每次都发生微动,电平达到了转动的值。两种情况的频率是一样的。只比较峰值频率是看不出区别的。 (3)对比法。 这是一个很经典的方法,不再举例。一定好控制好各个变量。有时陷入困境,思路可能打不开。不要忘记它 3、效率 (1)计划。 做一件事情之前,一定要有计划。就算开始订不好,也要订。计划各段时间应完成的内容,你就有意识要在那个时候达到某个进度,而不是大脑中,只有继续做的思想。做一个流水灯模块,比较简单。不必分太细。①程序到什么时候写完。②电路到什么时候搭完。③调试程序,到什么时候完成。不要以为,这么简单还计划什么。这是一种习惯,当任务复杂的时候,作用就体现出来了。计划确定了一个顺序,制定计划过程要考虑到前后的关联性。尽量避免出现做了一个内容,却发现应该在之前做另外一件事情,进程遭到破坏。 (2)紧迫感。 和计划相似,但有所不同。在时间比较紧,任务还比较多时,更能体现出它的作用。在你需要在短时间内万年场一个任务时,这一点一定要努力把握。比如,焊一个模块,看一下表,再看一下当前要焊的元件。告诉自己:要在XX时把它焊完!带着这种意识,你的动作和反应速度都会加快。每个环节省一点,累积起来就能省很多时间。紧迫感,还会增加你动作的协调性,减少等待。比如,把电阻放好,烙铁还未热,可以先在相关位置涂抹助焊剂(如果需要),还不热,做几个标签,稍后会贴到一些导线上,便于识别。激起紧迫感,晚上意识到未完成任务而疯狂地追赶,白天为什么不抓紧呢?夜之痛。当一天刚开始的时候,你很难意识到今天晚上可能会完不成任务,只有你真的到了晚上,才意识到,体会得那么清晰。可是第二天,你就忘记了,于是重蹈覆辙,这就是人性的弱点吧。记住它吧,当你在阳光下研究的时候,想想那灯光下的夜之痛吧。你还能放任自己吗?说明一下,不是一定要完成当天任务,但一定要避免因为白天时间利用不充分而导致为未完成任务。你的大脑里,要装着两件事。①现在要做什么②什么时候完成它。让自己对当前状态有一个清晰的认识。随着进展,这两件事会发生变化,但一定要装着,直到你完成整个工程。 (3)问题处理的方式。 测试过程,发现现象不对,有地方出了问题。怎样测,是先测可疑硬件电信号,还是改程序,用现象反映情况?有时,可能会有多种考虑方式。你可以先分析一下,出现哪种问题的可能性大,怎样检测更容易,更快捷。 (4)假设完成法。 意外,随时可能出现。比如,元件损坏,或研究过程中,发现需要新器件,要网购了。东西邮到之前,这个工作不能做。但不要松懈,看看你是不是还能做点别的。哪怕是一点准备工作。假设东西已经到了,比如,需要换件,你可以先把待换器件拆下来,等新的到了,换上。而不是,件到了,发现需要先拆原来的件。 (5)注意力。有时,进展很不顺利,这时又出现问题,就可能反应迟钝。这时,你要告诉自己:迅速解决这一问题!这句话,不一定能帮助解决问题,但你大脑里要保持这个意识,避免发呆之后,思绪飘向远方。甚至,你会突然间忘记刚才的事情。这个时候,慢慢地回忆:刚才发生了什么?你可能没有心情立即去解决它,但即使如此,你也可以把它认真地记下来。 4、一些小点 这些和具体研究内容关系较大,有些杂。 程序 (1)多次用到的数据定义成变量,多次用到的语句定义成函数,使程序简洁,增强可读性。一些不易于区分的数据,用明显的名称代替。 (2)测试函数,用特有的明显的现象表现出来,从而能容易地判断是否执行了这个函数。 (3)同步性。 定义一个变量,要知道它的含义,表示的是什么,有时,它有对应的标志量。比如,改变timer输出的脉宽,对应改变一个标志量,下一次,查标志量就可以知道脉宽,这样有时可以带来很大方便。但一定要保持同步性。当你改变一个量时,要考虑这个量是否有对应的标志。只改量不改标志,二者失去同步性,对后面的程序的执行可能会带来麻烦。尤其是在调试过程中,发现一个新的地方需要改那个量,这个地方本不在原来的考虑范围内,就容易忘记修改对应的标志量,再查询标志量,就容易出现问题。 (4)简约之美。 这是编程的一种风格,有些时候可以考虑这种思想。用最简单的方法解决问题。检测一个状态的切换,从一个状态进入另一个状态,不一定十分干脆,获得的信号不一定十分清晰、明确,可能会发生包括反复出现在内的一系列变化。如果细致地描述这一过程,可能会写出一个很复杂的判断函数。不仅容易出现逻辑错误,一旦出现问题,很难找到具体位置。尽量避免出现一大群switch、if、while在一个函数里尽情地舞蹈的情况。用最简单的方法解决问题,分析过程,寻找新状态与原状态最大的区别,或是特别的一个简单的变化,抓住它。一个函数,可以有很多行,但结构、实现的功能以及思路一定要清晰。这就是简约之美。可以考虑一下。 (5)完整性。 不能忽略意外的情况,有if,后面要有else,最好有对应的动作,即使你认为不会出现,意外就是出现了你认为不会出现的情况。运行不完整的程序,一旦出现了你没有考虑到的情况,很容易对现象进行误判。 硬件。 (1)显示模块。这个太重要了。不能完全依靠电脑显示,很多时候,系统需要单独运行。这个模块应简单,并能清晰地反映多种现象,以便区别多种情况。 (2)电源指示灯。反映控制器是否上电,避免每次现象不对,都去测控制器电源电压。 (3)器件个体的选择。对一个含有多个相同型号的电路,焊接之前,可检测每个元件的特性。选择特性最接近的个体,以增强输入输出的整齐性,提高个体间功耗的均衡性。一个模块个体间功耗差异越大,模块稳定性越差。 (4)确定清晰的检查思路。出现问题,立即测量,却没有发现问题之所在。这时,需要整理思路,列出所有的可能,根据可能性及检测难度,确定检查顺序,进行检测。 (5)现象突变。在你认为没有做任何改变的情况下,现象突然发生变化。你或许会想:“怎么会这样?上次明明还没事啊。”我可以很肯定地告诉你,一定发生了变化,或在程序,或在硬件系统本身(包括电池电量等),或在外部环境。一定至少有一个发生了变化。有些细微的变化会在你不知不觉中发生,踏下心来,去寻找它!可以考虑,顺着现象,逐步逆推,认真分析任何可能的影响因素。 (6)当你不能控制一个器件,那是因为你没有充分了解它的特性。最基本的资料是手册。认真读手册,建议尽量读英文的,只要你对英语不反感,我指的是不反感,不是有没有好感。翻译的毕竟不如原版。它不难,你能做英语阅读,就能做它。看不懂不是理由,认真地看下去,一点点,坚持着分析。从最简单的开始,一直看,你一定可以。当时,我同学看我看时,感觉了不起,其实那没什么,他看他也懂。认真阅读,体会他的描述,当然,网上典型应用电路域程序也有参考价值,但手册还是第一位的,也有一些几乎不能找到手册的产品,那就从网上找通用的方法吧。首先,确定产生了那个控制信号,再从电压电流上考虑值是否合适。同时,注意影响因素,有的器件对一些物理量很敏感,要发现这些量,格外注意它们的变化。考虑是否需要采取措施控制一下,避免可能会出现的麻烦。 (7)硬件的偶然性。硬件不同于程序,再复杂的程序,只要逻辑正确,就能得到预期的结果。硬件不同,它有物理上的输入输出,这些信号不都是准确的数字量。可能会出现错误。比如一个光电开关,调到某个检测距离。摆好位置,使初始状态没有障碍物。程序这样,一直检测,出现障碍物,立即执行一个明显的动作。可能会出现这样的情况,明明没有障碍物,却执行了那个动作,而且多次发生。注意一下检测频率,如果很高的话,降低频率看一下。这个情况或许立即消失。过于频繁的检测使单片机检测到了不稳定的信号。一个小延时就能解决问题。这种偶然性也出现在其他的一些传感器当中。 (8)捕获特点。有时需要反馈调节,要得到一个变量,并进行相应的操作。但变量可能是一个很难直接测量的电压或电流。这时,需要捕捉到这个特点,用一种方式获取一个量,使它能反映这个量的变化,而这个量可以比较容易地识别和处理。 (9)听别人的建议。别人提出建议,认真听。可以不采纳,但也别否定,人家说的往往是有道理的。 (10)不要被名字、符号所限制。这其实也是理解的一种体现,有时,手册或其它一些地方会有一些误导性的名称,一定要体会它的结构、功能,分析各个引脚的含义,不要单纯地看符号,可能导致错误理解。 (11)关于为什么。你可能会在研究过程中看到一些奇妙的现象,激发求知欲。要不要问为什么,暂时放下现有的进度,转而分析这个呢?看当前情况,如果时间比较紧张,最好不要深究,一旦进去,可能会占有大量时间,避开它,保持进度就可以了。如果时间比较充足,可以试试,但可能因为相关知识不足而耗去大量时间,也不一定会有好的答案。要有这个准备。发现一个新的现象、定理,不是不可能,但实际上微乎其微。真想研究它,就坚定地做下去! (12)快递。了解你学校周围快递服务情况。各地可能有所不同,选择廉价而较快的快递,一定要要快递!否则,买家用个垃圾快递,你就痛苦地等待吧。别省那两块钱,多花两天时间不值。除非你不急着用。发现需要器件,立即购买,别总因为几块钱犹豫不决。 (13)保持怀疑。一切皆有可能。当现象总是不对时,问题有可能在你认为不会出现的地方,打开思路,考虑那些你不曾怀疑的地方。用电路或程序进行测试 。程序简洁,现象清晰,或许,你会豁然开朗。为什么会出现这个,还是知识不足,理解不够,拿一个控制器(单片机)来说,它的内部结构是相互关联的,一个结构被操作就可能影响另一个结构。但你从程序上根本看不出来,只有理解了这个操作的含义,你才知道那些语句到底使内存或外设发生了怎样的变化。 (14)注意对器件的每一步操作与变化。不要认为器件具有自我保护机制,电位器怎么转,信号怎么给都没事,可能造成不可恢复的损坏。测试一定要谨慎,调到安全性最高的状态,一旦出现异常,回想当时正常时,进行了什么操作。 (15)出错的一种检测法。如jtag问题,可以人为地制造错误,看能否出现相同的错误提示,为找到错误提供一种思路。 (16)焊接。先考虑一下布局,可以适当留出空余,万一后来发现需要有小的改动,避免大拆大卸。避免大锡疙瘩,难看放一边,容易造成连接不充分,难以改动。比如地线一些公共点,可以适当分成几个点,分别相连。 (17)芯片的保护。了解一些基本保护电路。diy的系统有时会出现一些不稳定的变化,容易导致芯片过压或过流,造成损坏。当某个芯片连续损坏时,你应该引起重视了。 (18)记录的准确性。出现一个现象或是进展到某个程度,需要记录下来。一定要十分认真,完整而清晰的记录。比如电路,每个元件完整的型号名称,清晰的连接方式,电源信号等。 (19)器件选型。接触不多,当需要去实现一个功能,确定电路的基本结构,却没有元件具体型号时,要考虑这个。根据功能,分析器件参数,看输出能不能满足需求,同时保证输入在器件承受范围之内。 (20)裸线必粘。有一些情况,系统各个模块不能都放在一个电路板上,这时需要导线连接。注意那些外露的金属,尤其是和电源地线关系比较大的。一定要格外注意。意外的触碰可能会带来很大的麻烦,这种金属头一定要好好保护。主要是导线的头和板上一些突出的带电金属部分容易接触。 (21)器件的损耗。任何器件都是有寿命的,如果研发时间比较长,就可能遇到这一问题。不是说非要怎么预防,但最好有这个概念。注意系统的各个部分,纯电路部分,在芯片质量没问题的情况下,一般不易出现问题。涉及其它方面时,比如机械,这种损耗就比较明显了。损耗可能导致不能工作或性能下降。注意它的表现,动作、声音等方面是否发生了变化。模块稳定性下降,一下降低了系统的稳定性。本来调的差不多了,突然开始出现各种各样的问题,看看是否和一个损耗性较强器件有关系呢。另外,性能下降的同时,还可能增大功耗。最大功耗增大,容易导致某个时刻,个别负载得不到充足的电压,从而出现错误。 (22)减少导线串接。尽量避免多条导线串接。这会增加出现问题的可能性。 (23)购买芯片前,至少要了解它的功能和基本应用电路,一定要认真阅读,避免错误理解或多次购买。 (24)规整性。比如连接上,一组导线可以用排线,就算单条导线,也应该固定在一起。尽量保持清晰。 (25) 5、学习过程 (1)观察你的学校。校园文化对一个学生的学习是很有影响的。虽然你很难改变它,但你要充分的了解它。看看你的专业在学校是一个怎样的状况。周围有没有和你志同道和的同学,有没有可以求教的老师。有没有相关的科研室。学校是不是组织或参加一些比赛。了解之后,你要根据实际情况,制定一个基本计划。同时,好好利用网络学习。 (2)基础。前面已经提到,根据课程安排及自己的需求,确定学习方案。说明一点。学习过程中,有两方面特别重要,那就是理解与思考。它们要贯穿你学习的整个过程。在你没有同伴时,这两个能力显得尤为重要。一定要好好锻炼。既要努力的去理解,体会,还不能因为某个问题总也想不通,就总在那卡着,这个慢慢去把握吧。 (3)当你基本完成基础知识的学习后。开始动手了。买一个开发板。一般的教材讲的都是51单片机,先买51的。循序渐进啊。这一点太重要了。学习过程中,除了贯穿的那两个,还需要格外注意的就是这个。一定要一步一步走,每一步,你可以努力的快走,但不能减少步数。否则,你会陷入困境,因为没有达到那个水平,却要去完成那个任务。意志不强,就认输了。意志强,就会面对解决不完的问题,心里一点底都没有,熬得难以继续。当你学习开发板的时候,你应该已经对51单片机有了一个整体的认识和把握。下面就是在实际操作中加深理解与运用。 板子随便买个就行,外设有一些就够了,你要做的是学会基本编程方法,能控制一些简单外设。做到这两个,开发板就发挥了它的价值。认真学习实例,好好理解,下载例程,你会看到,闪烁的led点亮了希望。下一步,可以下载第二个例程,但也可以这样,分析第一个例程的代码,研究功能如何实现,根据理解,想出另一个现象,改程序去实现它。这个过程有助于你对控制语句的进一步理解。还可能让你看到你程序中的问题,建立编程思想。以后的例程也应该这样去做。当你比较熟练时,可以不看例程,直接分析外设特点,自己写程序去控制它。这点外设弄得差不多了,你可以综合一下。看看能不能达到预期的效果。 如果你还想丰富一下,可以研究一下工程的组成,分析一下程序各部分和内存的对应关系,当然,以后遇到了,再研究也行。 (4)当你完成这两个内容的学习以后。可以考虑做一个小作品了。这个作品是锻炼你简单系统的设计能力和焊接技术。因为之前的开发板上,都是人家给你做好的。题目不要太难,系统不要太复杂。关于电路板,看看学校有没有制板机,能不能接触到,可以考虑做pcb。不过,这个可能需要学习布线,看看这个是不是你学习的重点。如果没有专用工具,建议不要手工制作,耗费大量时间,很难达到好的效果。 说明一点,程序尽量自己写,之前谈到不看例程,用自己的程序控制外设就是为这个做准备。你可以回顾一下,开发板的最初的那些例程,代码都很简单的,你认真分析一定可以自己写出来。你要培养写程序的能力。如果开始不培养,习惯了“粘贴+修改”模式。总有一天,你会发现,你没有编程的能力,那时你还需要自己写代码,悔之晚矣。开始就有这个意识,一直坚持,就能练出一定的编程能力。 这个作品完成的速度和效果,与你之前基础知识的理解很有关系。如果有同伴还好一点,要是没有,你忽略或没有正确认识一个问题可能会让你耗很长时间。即使如此,也要勇敢地做下去。还有一点,你可能会用到proteus,关于这个软件,我认识不多。个人理解是,可以检查程序中,一些逻辑上的错误,io口模拟的通信协议是否正确。库里面,很多器件是没有的,尤其是一些传感器。可以理解,传感器接收的信号很复杂,难以用软件准确描述。而且,情况过于理想化,仿真出来,实物出不来,太正常了。差别体现在两方面,软件模拟毕竟是纯软件,不一定与实际执行完全准确对应。另一方面,已提到,那是一个完全理想的状态,根本没有考虑电源输出能力,负载消耗,电磁干扰等多种因素。 (5)看看你学校的情况吧,如果有条件,看看能不能进科研室或是参加一些小比赛。如果没有这些。现在,有两个方向(中间可以再做一两个小东西),一个是做一个复杂些的系统,另一个是学一个先进一些的单片机。看着选吧,做复杂系统锻炼你系统设计能力。学先进单片机让你打破51的限制,感受高性能单片机的优越性。可以先学先进单片机再做复杂系统,这是一个思路。 先进单片机的学习。还是先买开发板,思路基本相同。这个控制器的手册应该比51的教材内容要多。还是那个思想,整体把握。注意体会前后的联系。它本身是一个系统,内部结构是相互关联的,一定要有这个意识。看看它的片上外设,常用外设一定要好好学习。这是它比51先进的一个重要体现。此时,可以用库函数,它们是对外设的基本操作。要实现特定功能,还需要自己去写应用函数。例程可能给的是一个特别简单的操作。如果时间允许,最好自己去实现一个稍微复杂一点的功能。这是对你根据手册描述,运用库函数实现外设的某个功能的能力的锻炼。从中,可以看出你对控制器的理解程度。一旦出现问题,就要特别认真地去读手册上关于这个外设的描述,虽然可能会有一些印刷错误,但功能还是清楚地描述了。也许,其中的某一句话就能使你的问题迎刃而解。注意,不要一开始就过分细致地读手册,从头到尾读完,再拿开发板练习。那样会耗掉大量时间,也难以消化。 复杂系统的设计。这个复杂是相对之前的小东西而言的。六、七个模块差不多,这只是一个参考。如果之前,所做的东西多是借鉴的别人的方法,这次应该以自己设计为主了。说明一下,不要为做复杂系统而去做它,而是为实现某些功能而去做,这是一个系统,各个模块要相互协调,实现某种功能。硬件上可以是这样的一个顺序:功能->模块->各块具体实现->整合。对于一个偏硬(这是我个人的说法。游戏机,我认为是一个偏软的系统,大量程序用于处理键盘和屏幕之间的内容。输入端有多种传感器,输出端驱动多种负载产生各自的动作,这是一个偏硬的系统)的系统,硬件部分的工作量相对可能会大一些。要在开发之前,就作好计划。先建立一个清晰的思路,让这个系统已经在你的大脑里形成具体而清晰的形象。如果连一个清晰的思路都没有,怎么保证硬件系统能按时完成呢。软件方面。在设计硬件的时候,应该已经考虑了各个内容对应方案的选择,根据方案,完成各个模块的程序。整体运行时,可能会出现一些问题,这就看排查问题的能力了。抓住三点:程序的逻辑、硬件的状态和现象。根据这三点,推出可疑的地方,再进行检测。程序的逻辑,编程时就应保持清晰,检查时,如果直接分析找不到可疑点,就让现象去告诉你吧。注意,所作的改动(比如添加现象)对原有逻辑的影响。把整个过程分成几段,逐段检测,逐渐细化。硬件的状态,一方面要清楚硬件的特性,还要分析电源、输入、输出都是怎样的状态,抓住影响因素。做一个题目,要清晰地看到自己当前的能力,和这个题目的难度,应该是基本可以完成或者稍微超点负荷可以完成才去做。因为实际情况往往比你预想的更困难。真做了,发现每一步都很费劲,就会陷入困境,即使意志很强,也不知要熬多久,时间恐怕不允许了。当你独立完成这样一个系统,并使之稳定工作时,应该可以认为有一点水平了。再往后,就根据你的目标进行规划吧。 把握自己。这个内容似乎来得有些突兀,就放在这里吧。研究的进度有两方面影响因素。一是专业知识,二是自己的状态。下面说一下状态的把握。一帆风顺时,没什么可说的,注意保持适当的紧迫感就可以了。情况往往不是那么顺利。这时,能不能把握好自己对工程就会产生较大的影响。 不要沉浸在过去的失误中。失误是很正常的,尤其是刚开始接触一些东西的时候,有的失误不会造成什么大的影响,也有些失误可以给进度带来很大影响,还可能有财物上的损失。后悔万分。于是,你就不断地回想发生的那一刻,如果当初没有那样该多好。如果当初注意到那个,现在就已经怎么怎么样。那种心情可以理解,可是,你心里要清楚,你面对的永远是现实,你也只能活在现实中。所以,你要做的,是在现在这个情况下,应该怎么做。你要看看,你的行为造成了多大的损失,需要换什么件,怎样恢复到能工作的状态。还要认真分析,为什么会出现这个情况,如何避免它的再次发生。一个情况出现,一定是使它出现的充分条件满足了,是你的行为满足了这个条件。所以,不要怪它出现,要认真对待这个问题,避免再次带来麻烦。你没有这个意识,这次不出现,下次也出现,下次出现还会带来很大损失。只有出现了,你认真采取措施了,才能有效地减小下次出现的可能。你的那个行为,你再想多少次,都不会对实际情况有任何改善。只会让你停滞不前。只要你采取一点弥补措施,就增加了一点解决问题的可能。 请不要带着情绪去研究。研究到某个时候,你可能会觉得。我已经很认真,很努力了,为什么还是不行啊。这时候,你要去感知一下你的心情,有没有感到厌倦,有没有想放弃甚至把它人为整坏?如果有,不要强迫自己了,你现在需要调整。现在,你要放下当前所做的事情,让自己处于完全放松的状态。让自己的心情逐渐平和。带着情绪研究,情况只会变得更糟。如果还是不平静,去就做一些享受的事,让自己快乐,或者是疯狂地释放。另一方面,对外界保持平和。多少天都没有进展,还有人天天过来问:弄好了吗。那是一种怎样的心情呢?说者无意,因为他根本不能体会那种感受。可是听者却可能进一步受到刺激。他宁愿听到:失败了吗,遇到新的问题了吗。那样或许会舒服许多。但是,人家出于好意。不能计较的,要平静地去接收这种声音,继续自己的研究。 学会执着。这个包含两方面的含义。一是培养执着的精神,二是学会怎样去执着。说一下第二个,出现问题,作调整,再试,又出现问题,再调整,再试。。。这是执着,但是效率很低,也容易让自己的行为变得机械化。执着是需要思考的。即使你不能找到问题之所在,也要试着去寻找可能的情况。让你所做的改动和你的猜想有关系。一个不期望现象连续多次出现,很明显,有一个比较稳定的因素导致了它。要改变那个因素,而不是靠很多次实验,碰到一次正常的情况。 毅力与自控。这是两个不同的内容。毅力,完成任务的必要条件,一定要好好培养。自控,可以不去控制,但当你需要控制时,就可能控制住,这就是自控能力。周围很乱,噪声很大,学不进去,可以理解。但如果没什么大的声音,也没人打扰你,只是没有教室之类的学习环境。要是学不进去,那就是自控能力不够了。有意识地去锻炼吧,在孤军奋战时,这个显得尤为重要。 了解自己的作息状况。比如,研究着呢,困了。是挺过去,还是休息一会?你要清楚,挺着,能不能有进度,挺多长时间,可以恢复。歇会,多长时间可以恢复。你要对自己充分了解,就可以算出,那个对进度耽误更少。 激情减弱。当研究一个工程时,如果工程较大,可能会进入持久战。一个人,一天到晚,都在做一件事情。日复一日,而且没有很快就要完成的迹象。这时,很容易进入失落状态,激情减弱。感到不能再维持下去了。你会发现连续几天什么都没做,都是无意义的耗时间。这时,需要进行调节了。调节也是需要时间的,别急,慢慢调,直到你感到可以继续研究了。 面对孤独,保持一种勇敢。记得曾经在书上见过这样的话。人的一生,不管曾经遇到什么,最终都要去面对孤独。暂且不对这个观点进行论断,有时,不用到最终,就会遇到孤独。而且并不短暂。原因很简单,不能单纯的理解为与世隔绝、过于内向这类的东西。如果你非常渴望去做一件事,却找不到志同之士,还不肯放弃,就很容易陷入孤独。尽管,你周围可能有别人,但你们做着完全不同的事。那是一种隔离。勇敢地做下去吧,虽然,也许并不能保证能做到什么程度,但至少可以保证做自己心里愿意去做的事情,并为之竭尽全力。 6、经历 本人09年来到这个地方。一个并不发达的城市。学校也很一般。我知道,我应该做一些事情,但我却不知道要做什么。上课、上自习、其他一些活动。难道我的大学生活就这样度过吗?我总想做一些特别的事情。我知道,差距是越拉越大的。举个简单的例子,小学体育老师,会挑选那些体能好的学生当运动员。体能好的学生本来就强,加上专业训练,越来越强。而那些本来就不太爱运动等体能较差的,本来基础就差,还被忽视,就越来越差,到最后,可以想象,差距会达到哪种程度。我刚到学校就想,虽然和一些学校相比,我已经落后了,但是如果我疯狂地追赶,利用几乎所有的时间,结果会怎样? 但我当时,没有发现什么。学校里没有那种环境,广告栏上有社团活动、老乡会、外面的商店的优惠活动等。但永远(我在学校的这一段)也不会看到,工科类的比赛之类的内容。而且我当时也很傻,他不提供信息,我也不知道自己去搜索。学校里只有软件科研室,给外面做点小项目之类的。我大二时,感到已经耽误了不少时间了,也找不到什么,就去了科研室,那里大多是学计算机的,我们班一共去了四个,待了一段时间,我出来了,第一个出来了,我发现那个世界不属于我。后来,我们开了单片机,我感到,这是唯一的希望了,终于起步了。 我知道比较晚了,只能尽力去追赶。同时,我找不到同伴,找不到合适的老师,也没有科研室。陆续买了些书,开始看一本用于单片机的c语音编程,一些很简单的例子。当时的单片机用的是汇编。现在回想起来,感觉有点浪费时间,当然,当时好像也没有太着急,那时接近期末了。放假后,开始买编程器之类的基本的东西。准备做一个特别简单的东西,检测某个表面的物体颜色,黑色亮一个灯,白色亮另一个灯。就这样的一个弱智产品,一个假期没做出来。手工腐蚀电路板也耽误了些时间。当时有一个很严重的问题,没电表!这么重要的东西,我都没有意识到它的必要性。另外,单片机好像也有问题。我记得后来测引脚电平,感觉明显不对。当时买的at89c51,后来一段时间内,一直用stc,表现正常。 后来买了一本模块化设计。感觉这本书比之前的c语音编程更有一点含量。我记得那是我第一次在网上买书,当当网的。介绍常用模块,每个模块举一两个例子。后来我决定做个温度计。那时我比较依赖于仿真软件,总是想先仿真成功,再做实物。而且,编程方面,我开始的方向就不合适。当时的顺序是:看程序,分析程序,运行程序,改程序。我之前已经提到,应该一开始,程序特别简单的时候,就练着自己写。一点点积累,后面的程序像温度计系统这样测都能写出来。我当时却在研究怎么改程序。书里的程序不能正常运行。现在看来,很正常。那些代码都不见得是作者本人写的。更没有人去很认真地确定所有代码都正确,书就出来了。我后来是在网上找到了能正常运行的读写温度计的代码。这一关终于过了,但也花费了不少时间。然而,还有别的问题整体的代码运行现象不正常。我就每天去教室,电脑一放,插电开机,分析研究。多少天都研究不出来。耽误了大概有一个月,甚至稍微多一点。 一天,我去了另一间教室,可能是我原来想去的教室没地。我一开门,坐在最后一排的靠窗那部分的临着过道的那个位置的女的就看我。我走到最后一排,坐中间位置。她好像又看我,我开始我的研究。后来,好像是别人都走了。她走过来,看我在干什么。正看到我的代码。我问她为什么会注意我,她说我一进来,就抱着那么多书,很少人会这样。她就觉得我是在研究东西。我跟她说代码调不出来,我看她竟然好像是在分析,就继续描述。后来,她指着一个地方。说这里为什么这么写,我似乎也意识到不太对。那是一条检测器件的while语句。如果器件能被检测到,就应该跳不出循环。可是,我之前单独测温度计读写时,就是这个语句,就通过了。我也没有再深究。仿真,毕竟是仿真啊。我把那个地方改了。现象一下子就出来了,特别不可思议。真的特别感激她,要不是她,我不知道还要熬多久呢。 终于开始搭电路,我当时还是受一些说法的左右,想做电路板,感觉用万用板好像是低级。其实,不该那么想啊。在设备很受限制的情况下,还要做电路板,会耗费很多时间和精力,也没有多少收获。当时,还是那样做了。四处找打印店,热转印纸对打印机不好,很多店不给印的。有一家,以五块钱一张的价格给我印了两张,后来发现不能用。只好用贴胶条法。不过,那倒还真是一个双面板。后面是钻孔,买个便宜电钻,相当不给力。1.6mm的覆铜板,钻一个孔,大概要一分钟,真的让我很崩溃。终于钻完。可以焊接了。焊完后,一试,不能工作。发现了一个焊接问题。改好后,还是不行。连接真的没有问题。还找别人直看,也没有解决问题。后来误打误撞,在某个支路串了一个电阻,一下子就好了。后来,想到,是负载过大导致系统不能工作,没有加滤波电容。书上的电路图中没有画,我也不知道加上,一个电容就卡了这么久,还是对基础知识理解不够啊。当我完成这个温度计的时候,多半个学期过去了。很快就要到期末了,我没有再花大的精力去研究。其实,反正我也不准备考多少分,应该再学一点啊。 接下来的假期。我决定做一个语音系统。类似于音乐盒吧,录放音和点阵显示。点阵很容易,录放音遇到问题。当时我的思路还比较窄。对一个现象,不能找到足够的参数和影响因素。这些东西往往就是能否实现功能的关键。当时,也作出一些怀疑。但还是没有解决问题。终于开学了。这的确是一个遗憾。我找到老师,一个学校里相对比较有实力的老师。他那有时可能会接小活,虽然没证明吧。我想跟着他研究一段时间。其实,在大二的时候,他有一次想参加竞赛。后来嫌人少,嫌水平低,自己放弃了,我们还能做什么呢。这次找他,他竟然让我做一个开发板,我不想做这个。还是好好准备了,后来找他,却被告知因毕业生的一些事情,暂时不弄了。他一句话,我的准备全白搭。后来,我还是把电路板做出来了。当然,还是手工。实现了部分功能。 后来没有再作调试。我想,我得学一个高级点的控制器了,经查阅资料,终于决定买个arm板。 我一个同学找到我,说想做个小车。他基本上没有焊接经验。单片机编程做过一点。很快,我们开始了。他的计划让我惊讶,因为他预期的时间太短了。我之前的体会是,一个东西,你觉得很简单,一做就会发现问题远远超过你的想象。所以,他的计划我不敢相信。但合作一次太难得了。我们开始了。我第一次体会了合作的感觉。真的是效率明显提高啊。工作分配,他写程序,我做电路,快的超过的我的想象。而且交流,在思路和方法方面也起到了很大的作用。不同的思路相互补充,真的很有效果。他时间意识强,我的意志比较强,和到一起,加快了进度。有一次,下雨了,前一天晚上,他请我吃宫爆鸡丁了,这次该我请他。我冒着雨,出去买饭,风也很大。后来,我们神奇地按计划完成了任务。这学期,我们有一门选修课是ic卡。老师让我们作出实物。我们班同学就戏称,全班同学过不过就看你了。后来,分了几个大组,我的组模拟的刷卡机,扣费和充值。比较简单。没有考虑加密问题。其他的组都是买的成品,有的改了程序。只有我的组是焊的电路。我继续学习arm板。当时很多时间都用在了看手册上,每天晚上在407待着,电脑斜着一放,读长长的手册。那个教室里有的人对我特别熟。我还买了两本关于那个型号的控制器的书。后来假期的时候看的时候多一点,基本上是白买了,没什么作用。好好学习手册,好好研究例程,就可以了。 假期,这个假期真的是感觉意义不大,白天看看程序,晚上看ucos和数据结构。白天,看手册,学习外设,晚上举着个书在那看。之前,在学校的时候,就已经看了一些ucos,看的很慢。 又开学了。第一时间找老师,定毕业设计。继续学习开发板,一小段时间后,想去试试找工作。当时有个别同学已经走了。我觉得现在这样下去,恐怕也不会再怎么提高,还有一些思想的影响吧。于是,我走了。去了北京。可能和简历写得过于简单有关吧,面试的大多是技术支持,也有焊接,只有两个是技术研发类的,一个感觉我水平不够,另一个要我的代码,当时没发,过几天发了,没有回应。通过面试,我也发现了点东西,那就是在学校当前的环境下,还能再提高一点:做一个具有一定功能的复杂的系统。尽管那个小车从模块数量上勉强算复杂系统,但功能过于简单,都是基本的实现,没有通过改变而达到某种优势。我的这个复杂的含义,除了模块达到数量外,要有一定难度。或者这个功能本身就具有一定难度,或者,功能不难,但要提高,其中有值得研究的东西。之前那个小车,功能不难,而且各个功能相互独立,进一步增加了幼稚的程度。如果我已经完成一个“有点含量”的作品。或许这两家会有要的。此时,是大四上学期。我意识到,很难找到了,回到学校,和我同学。 我决定再完成一个作品。找了一个比赛题,购买器件,那天弄得太晚了,回来被风吹有病了。耽误了几天。后来开工,解决了一堆非电子问题。又把完整的程序写出来,各个基本函数完成测试。此时已很近期末。我意识到弄不完了。我把东西都带回了家。从北京回来到期末这段时间,我每天大包小包的奔波于宿舍与教室之间。教室成了我的食堂。这里本来就冷,冬天有时气温很低。阴面教室就更冷。一开门,一股寒气迎面袭来。人们大多在阳面教室上自习,我东西多,也不跟他们争。每天都在阴面待着。一个不利的情况的出现,可能会带来一些有利的东西。尽管需要忍受寒冷。但人很少。我可以占很大地方。而且出较大噪声,这都是在阳面教室不能实现的。每天晚上,可能会有一两个人来这个教室。我们都很熟。他们跟我不是一个学院,尽管他们不懂这个,但都给了我支持与鼓励。有时实在太冷。我去五金店买了条电热丝,把砖块之类的放在地上,电热丝放上面,插电。一会砖块就被烧热了。能让脚温暖一会。这个有点危险。我清晰地记得我在女生宿舍楼旁,拿了两块砖。走到教室,一开门,一个女生正看见我,笑着。我手里就拿着砖块,站着看着她。 我清楚地记得一次,晚上去教室,走进教学楼。前面有几个女生吃完饭去教室,走在楼道里,她们的笑声回荡在整个楼道里。我拎着几十斤重的包,以几倍于她们的速度从她们身旁略过。我不知道,她们是怎么看待这个另类的。 我在学校和同学说,那时大概是刚开工左右的时候。一定要弄完!最坏的情况是利用假期。我不能忘记说过的话。到家很疲乏,休整一下,很快开始。我才发现,我缺乏设计能力,因为之前做的东西都有参考,那些电路很多来自网上,根本没有经过自己充分的思考,就用了。当自己真的去设计时,由于缺乏基本的设计经验。犯了一些很幼稚的错误, 一方面包括对电路没有一个准确的认识,另一方面,基本知识掌握也不到位。这些因素耽误了时间。 我意识到,进度太慢,晚上很痛苦,就加班,很多时候过十二点。我把英语读写、听说之类的教程都用作草稿纸,画的很乱,真有点搞科研的感觉(自以为是一下,呵呵)。就是水平没法比。为了分析是什么限制了进度。我睡觉前把一天所做的工作,简单记录下来。发现问题,分析问题,解决问题。其中有些体会,不管是编程方面还是硬件(不止是电路)。到临近三月底时,我看到了希望。却突然出现情况。电机不正常了。感觉就要达到终点,却又退了好几步。控制一下心情,开始解决这个问题。这个问题竟然花了很长时间。各个因素几乎都把影响减到最小(之前正常时,我根本没考虑这些),还是比原来效果差一些,我知道,和电机参数有关。这一关终于过了。开始双车共同运动。到某个时候,我发现,好像坚持不下去了, 从开始到那时,已经熬了很长时间,而且还看不到很快就要完成的迹象(系统很不稳定)。这种情况下,很容易完全被消沉淹没。我告诉自己,要继续下去,出非我***。经过短暂的调整,工作继续进行。后来,系统稳定性有所提升。我就开始重复那个动作,一次又一次。我还是感到有可能。终于,我完成了。那是一个后夜的时刻。我没有怎么激动,只是告诉自己,我完成了,我做到了。随后,睡去。 此时,已是五月。远远超过当初的计划。这是一个迟来的完成,但终究是完成。我的行动给父母带来很多影响,我心里知道。最晚的时候,到过四点。为这个,我放弃了从不肯放弃的锻炼身体。也耽误了实习的时间。稍作休整,我去找同学,开始找公司。有一家面试过了,当时很欣喜。回来,坐在公交车上,夕阳是那么的灿烂。随后,我开始工作。画电路图、测试之类的。可能和需要回校有关,经理没有给我安排太多的任务。 回校后,大家正忙着毕业设计。第一天,遇到三个同学,看见我都说让我给他们看毕业设计。有一个让我改程序。就是设定温度,测温度,报警这种东西。经过研究,我发现卖家提供的代码有问题。改一个不是自己写的有问题的程序,有时消耗的时间和精力会超过编写相同功能的程序。这种难度的工程,我想就是这样。另一个人,买的套件,是关于stm32的。人家直接不给代码!也没有电路图。我只把大概的器件连接图画了出来。 在多说一点。实用性问题。如果能根据情况,研究个东西,把它应用到实际生活中,哪怕是个很小的应用,也是有意义的。 马上就要走了。不再感慨万千。希望那些努力研究的学生,尤其是孤军奋战的学生,能够从本人的这点学习经历中获得一些思路、力量。即使不能保证达到某种结果,也要让自己的行动最大程度的增大它的可能。让明天的阳光迎接我们的笑容!
|