《谈学单片机有前途还是嵌入式系统有前途》一文吴坚鸿回复整理
六月初吴坚鸿发表了《吴坚鸿谈学单片机有前途还是嵌入式系统有前途》一文。后被andy1989转发至博客中,在发烧友中引起了非常大的反响。对于论坛上非常多发烧友的评论。吴坚鸿一一作了答复。吴先生对于每一个发烧友的评论都非常认真的回复了,因此小编整理出来。供很多其它的发烧友们学习!
稍稍啰嗦一下,吴坚鸿的回复能够解决非常多单片机学者的疑问,假设有耐心看完的话,对大家会有极大的帮助的!
(这是对于大家反映这么热烈的回复)
”我比較偏爱自己独立开发自己喜欢的东西,这不为赚钱,仅仅是自己个人对电子的爱好、热情!
只是在工作中。个人的力量是有限的,团队合作也非常重要。“英文阅读能力要好”这点非常重要。无论是看參考资料还是软件开发寻求帮助对英语阅读能力都有非常高的要求。
“掌握经常使用的不同厂家单片机,要掌握各种经常使用外围芯片,经常使用数字电路,模拟电路。
你要还掌握CPLD,DSP的编程,你要会电路板设计,你英文阅读能力要好,你的学习能力要很好,以上全部的都还不够。你必须有几年以上各种独立的项目开发经验。
”嗯,给我们刚開始学习的人一方向!
非常少有资深的project师谈谈自己的感想的(可能我没找到,有知道的给我推荐下哈…不甚感激),给我们些启示!顶顶… ——(1)假设你是在校生。除了多动手做实验外,专业基础课要重视。硬着头皮学,能学多少是多少。由于出来社会后就没有那么多时间去学基础课。基础课是最难学。也是最乏味的。
真正搞单片机开发,入门是简单的。
(2)假设你如今已经出来社会,那么就直接从C语言開始学,会编写简单的程序后,立即找单片机开发的工作。无论工资多少,管吃即可。至于用什么教材。我上个星期在帮朋友找教材的时候,看了网上郭天祥的《十天学会单片机》的视频第一课,感觉学习思路跟我是一致的,所以极力推荐。
本人在此声明,假设我是郭天祥的托。天打雷劈,不得好死。
论坛里非常少有在社会上打拼这么多年的 吧,不知阁下的单片机事业怎么样。可否分享一二?谢谢了——我的算不上什么单片机事业。可是我自己还是特别满足我如今的状况。
我是自由职业者,喜欢电子,一直在外面接不同的开发项目。也有很多公司或者老板想招安我,我都一一谢绝。由于我过贯自由创作的日子。喜欢做不同领域的产品,我也喜欢每一个月搞一两个项目。然后回广西老家跟家人团聚共享美时光。做技术开发我有我的原则,不搞破解别人程序的项目,不搞违法的项目(类似赌博机,给我再多钱我也不干)。
假设志向高些。或者目标长远些,单片机能达到的高度还是有限
但一般这类人学嵌入式之前都会学过单片机——一般这类人学嵌入式之前都会学过单片机”这个观点我也认同。我仅仅是认为假设不是工作非常明白的须要,大部分的人学嵌入式都用不到。
==马云语录 “无为就是有为” —老子的《道德经》
楼主,我是一名即将大三的学生了,学的是通信专业,和电子有点关系。近期在看郭天祥的书自学51单片机。也算是进了个门。可是我有个疑惑想请问楼主。
就是怎么样在学校把理论基础的东西学好?我们如今学校开的课好像什么都涉及一点,我们有学过数电、模电、信号与系统、通信原理,下学期要学dsp、图像处理、eda、通信电子线路、电磁波、信息论等等。
。关于这些理论的课程我都须要一一用心地去掌握吗,还是要用到的时候再去学习?上学期一直都在自学tcp/ip(由于当时没找到方向。所以随便先学点东西)。差点儿全部的课都没去上。并且tcp/ip也没学得怎么样。如今打算以后往单片机、硬件这方面发展。专搞硬件有空也自己弄弄程序、软件。
可是听楼主的话还有网上的帖子都有说到要把理论基础打扎实,可是就是不知道怎么走这一步,什么理论应该深入,什么不必深究,这一点我实在非常费解(习惯了逃课自学,课堂上的东西的确难以吸收,我怕像上学期一样逃课结果会什么都学不了,可是专心理论的学习我又会没时间学好单片机)。还有楼主说高数要学好。我高数非常烂。
。不知道要怎么学好高数,project数学这些也算是高数吗,要学到什么程度才干够把单片机和这些理论东西结合起来呢?
思绪有点乱,望楼主能解答一二。
——(1)
问:就是怎么样在学校把理论基础的东西学好?
。关于这些理论的课程我都须要一一用心地去掌握吗?
硬件电路也不是你在学校一下子就行掌握的,要以后在做项目中慢慢积累,慢慢消化。
可是单片机。C语言是战略高地,你仅仅要占据了这个高地。你就有了向外围电路扩展的资本。
你不是说你看过郭天祥的书吗?你也可以看看他网上的《十天学会单片机》的视频,超级经典。我当初就看了他的第一课,他说了一句超级经典的话,顿时让我认为他是单片机教育普及的第一人。大意是,先掌握单片机与C语言。“以后缺什么补什么”。这个双引號里面就是他的原话。
其细致看了chenyao3612和吴坚鸿在《吴坚鸿谈学单片机有前途还是嵌入式系统有前途》一贴中的对话,chenyao3612也是一个十分坚持和有韧劲的电子学习者。他由于看了吴坚鸿的帖子。就讲述了自己学习的一些经历。我相信他的分享可以给非常多电子学者一些启示。非常多时候学习并非一件非常easy的事情,在学习中我们也有迷茫和看不到方向的时候。可是关键在于你是否可以像chenyao3612一样坚持下去。
我一直都相信。人生无论是什么,都是一种学习,仅仅要经历了,就是学习了;学习的话,无论你学什么。你都会进步。你知道了你曾经不知道的东西,这就是一种进步。以下先是chenyao3612的讲述,之后有吴坚鸿的回复。
看了半天。最终从第一页看到了如今。我曾经是学机械的。
毕业了一直打杂。开车床,还不是数控的。
我为什么想学电子。
发现搞机械非常不受人尊重。人人认为机械不就那点东西。(事实上我认为机械比什么都要深奥。仅仅是中国不重视基础,不重视基础材料。
所以永远差日本德国十万八千里)。
再就是如今国内懂电子的基本不懂机械。
懂机械的基本不懂电子。我想会机械又会电子。所以我想学电子。所以我从去看五月份就開始在网上摸索。由于我高中物理学的还比較好。。对基础知识理解还比較清晰。
所以尽管不专业。但总能说出点大概的味道来。
譬如说什么信息传输。除了有线的。基本就是波(分为机械波和光波)。
全部的东西都离不开这个东西。什么測距啊。
什么无线电啊。什么光啊。所以我自认为我的理论还比較清晰。而且和比較喜欢这些基础的原理(尽管不能从专业的角度非常懂。但我能从物理角度有自己的理解)。而且我认为这些东西非常重要。对以后开发项目非常有帮助。
对各种传感器能更好的理解。
这些东西我仅仅能理解但总不知道应该怎么去学电子。
去年我遇到一个贵人,我非常喜欢和他谈这些大道理,基础知道原理。再就是把自己的想法也告诉他。他就问我,你说你想学,你究竟想学什么?
你总不能说什么都想学,你想学硬件还是软件?我说我什么都想学。我想学硬件也想学软件。什么都想学。想学电子想学机械。
想学心理学。
想学管理。他说好吧好吧。无论你以后想学硬件还是软件。你先学单片机吧。你能够先从51单片机学起。 那是去年的五月份。
那说了那样的话给我。
我那时什么叫单片机都不知道。在我心理一直以为硬件就是收音机数模电路。
软件就是电脑。
这是我去年的理解。但我如今回忆学的又可笑,又有点道理。
从他说那些话给后。
那个星期的周末我就去书店买了本21天学通51单片机。由于那书店里计算机类里关于单片机的书真的不多。
。都是些高级的。非常高深的东西。
当时是那么认为。。
如今还是那么认为。
。。
买了那本书后。我那一个月就天天看前面单片机的内部结构。
和后面的中断,计时器。 重点还是单片机结构。再就是看了一点点汇编的操作指令。由于你懂一点点内部结构了再看汇编的指令感觉还算比較好理解。由于中断和计时器。
我认为有理解了。可是那些寄存器太多怎么都记不住啊。所以没看了。再就是中间的C51我一点都没有看。看啊看啊。迷迷糊糊的看。開始一点看不懂。再看第二遍。
再看第三遍。
再看第四遍。一个月后。
最终有点点懂了。
当时仅仅看前面的单片机结构。
和后面的中断,计时器。重点还是单片机结构。
由于中断和计时器。我认为有理解了。
可是那些寄存器太多怎么都记不住啊。
所以没看了。
再就是中间的C51我一点都没有看。(如今才发现,事实上非常个单片机都是不同的。
)。
好吧開始自己动手做程序了。
就想学一门语言啊。。就在网上搜啊搜啊。有说先C的。有说先学汇编的。
由于我认为学东西就要从老东西学起。什么新东西不是老东西抽象来的。
。
所以我选择了汇编。
自己就天天看汇编啊。
。又看了一个月。
全然是看书。
还是没有操作过。
二个月就这么过去了。又開始迷茫了。
就在网上搜啊找啊。最终知道了什么叫ISP,什么叫仿真。什么叫仿真器什么叫开发板。
。
好吧。为了学东西钱算什么。花了两三百买了个开发板和仿真器。电子发烧友电子的。可是还是不能动手。
最多点两个灯。。所以搞来搞去就是会几个跳转。会让P1.0=0//灯亮了。P1.0=1//灯熄了。
一两个跳转还好。。
要是有三四个跳转自己就头都大了。唉,又买了本王爽的汇编语言,天天看,天天看。还跟着在DOS里面操作。妈的,这个东西也太基础了点吧,我认为这么下去不是个办法。再就是发现怎么说的和我曾经在21天学通51单片机里说的有点不同。无论是汇编语言。还是CPU,RAM,ROM结构。
我又開始想了。。后来才搞明确。原来王爽的这本书汇编是X86,我曾经那个是8051.。操。全然两个不同的东西啊。
我是学单片机的。
不是学写QQ应用软件,或者什么驱动的。我如今这点皮毛都没有怎么可能理解那东西。。方向应该错了,立即又停下来了,再不停下来和我曾经看的21天学通51单片机要浑了。头都大了。。。。。。
三四个月又过去了。。。这半年自己还是边在开车床,边在网上搜。什么是单片机。什么是三极管。什么是运放。 转眼到过春节了。什么都不会。
又遇到那个贵人了。
。他问我学的怎么样??
我说学到非常多东西啊。
他说能做什么东西了没?
我说不能。就会点灯。他说你要试着做点复杂的。
。我说好吧。
。但是又不知道怎么下手。
。
。。
但听说做东西的时候会学到非常多东西的。
。我就硬着头皮。但是再硬着头皮也还仅仅是会点个灯而已。
程序循环两下就晕了。。
好吧。
。。我又要開始思考了。
。//*************这里我特点建议在求学的道路上迷茫的人啊,当你们迷茫的时候不能放弃。在学什么东西还是接着学。重点来了,这时就要把自己抽离出来。要把自己当一个局外人。。站在一个非常高的平台想自己的处境。********************//
当时我就把自己抽离出来。又開始想问题了。。
当时就想程序肯定不是这么写出来的。
妈的那么复杂。谁搞的明确啊。就算花结构图也画不明确啊。。
肯定得学门高级语言。别人说高级语言什么结构什么模块的。
应该那样才有头绪。 好吧我又买了本谭浩强的C语言。。妈的,好难看懂啊。。就像高中的教材书一样。。
慢慢看是看的懂。。但懂了又怎么样? 天天算加减乖除那又是个什么意思?
真真假假。假假真真 再就是什么数据什么算法。什么运算符,什么表达式。
。。。这些有什么意义啊。。
这下又迷茫了。
。又在网上查这个查那个。
。他*的。。看到一个广告所以又买了个学习资料。。。
里面有视频。。。说什么从万能板学单片机。。。
又看了一个星期。就学会了在外面接晶振。
。再就是教你怎么下载了他写好的程序。能够有音乐。。。
事实上这些我曾经就会了。。好吧再接着往下学吧。
。
開始讲C51了。。。但是一点听不懂。
。
。
我就翻我电脑里的东西。。
不小心翻出了一个好东西。
。这时就到了2012年7月份。就是前半个月。。。。
原来第一个开发板送的光盘里里有个 郭天祥的十天学会单片机C语言。
。。
。最终原来就是这么简单。
。他讲的我居然都听的懂了。。为什么。
。。
为什么我也不知道为什么。。是他讲的好还是怎么了?确实是他讲的好。
傻子都能看明确。。。但这时我又想了一个问题假设我不是由于前面我看了汇编,我会这么easy看懂了。我想我不能。。。原来WHILE IF FOR就是汇编里抽的JNC JMP等两三个指令组合的。。。这时我豁然开朗了。。。。。
这半个月来。
我看视频十了。
在我看到视频五的时候我辞职了。找了一份非常轻松的工作。在一个电子厂做流水线的事。一天六个小时。
工资非常低。一个月一千块钱。我知道我要的是时间。我要的是接触电子。
我要的学会用烙铁。
我要的是学会认各种基本元器件。拟我什么都无论了。
。
。
。。
由于曾经的机械天天加班没时间学东西。
再说也不是一个行业。
。
再说我认为我自信我已经能自学了。我已经入门了。。。我会敲代码了。。我掌握了LCD1602。 原来一切就是这么回事。
。
。
什么IIC协议(这里说一下。我认为IIC协议非常重要,非常多东西都是IIC协议或者是类似的人为定的协议。就像前面楼主说的那个三个单片机通信的问题。
事实上就是IIC协议的DIY。尽管没有真正的搞懂,也不会。
但我是这么理解的。) 我如今要做的就是学精C语言的语法。学精通51单片机。试着去驱动一些IC。
我如今就在过着这种生活。。
白天上班。。
晚上看周天祥。看C语言基础。,把语法规范。。(这时候看的懂C语言了)。
————————————————– 好吧。
我把我摸索的过程在这里和大家分享到这里。。我认为我每一步都走的非常曲折。。可是我认为真是这每一步曲折才让我到如今这个状态。我想要的状态。。我如今对硬件。软件。MCU。windows,嵌入式也有了自己的理解。
。
所以我来发表一下我的两个观点:
1.假设你想真正的学东西,想学精。想学的长远。还是先学汇编再学C。
尽管学汇编有点难。可是你花两个月时间。就像我去年五六月份一样的。了解一下单片机结构和汇编语言。假设你仅仅想玩一玩不求甚解的话就直接学C吧。。
但我警告你学了C再学汇编就会认为非常难非常难了。我不知道为什么。
。
反正网上别人学了C的再学汇编的人都这么说。
。。
说太难了。不要学。。但我当初什么都不会的时候都认为汇编非常easy。。。
仅仅是编不了大程序。。。但会点灯。。。。
想点哪个就点哪个。。。
要谁亮谁就亮。要谁熄谁就熄。
。。。
2.先学单片机不要学嵌入式系统。单片机和嵌入式系统的关系就和汇编与C语言的关系一样的。
。
所以楼主的全部观点我都支持。赞同,顶。可是楼主说不要学汇编我就不能理解了。
那你为什么又要人家学单片机不要学嵌入式呢???
?
在我大脑里。你对知识对真理的看法是矛盾的。
事实上非常多人都非常难入门,入门了就好了。事实上非常多人就陪MCU和CPU的关系都不知道。就连寄存器和存储器的关系都不知道。就连RAM,ROM的差别都不知道。就连I/O口与寄存器的关系都不知道。所以我建议从零的入门步骤是先花一两个月学51单片机内部结构和汇编。
一定是51单片机的结构。和针对51的汇编。由于汇编有非常多种汇编。
单片机有非常多种单片机。会了51.其他基本就会了。
但就是由于大同小异的异。当一点都不懂的人遇到了这些不同的单片机头就会大。就会迷糊。
所以一定是学51单片机的结构。和针对51的汇编。
学到什么程度呢。能点灯即可了。。
不要学的非常精。
。
然后就是周天祥的十天学会单片机C语言。
。。
OK。
。你就到我这个水平了。。。。我的水平就是小学一年级的水平。这半个月来我仅仅会驱动1602CD。
视频里的一些视频由于我是电子发烧友电子电子的开发板。
所以有点不同。试验基本都做不了。。
。但我认为我能做好。
。。由于1602还是被我整会了。。这里还有点建议。。。去学外围的IC的时候什么都是假的就是看IC的手冊。
看时序图。时序图非常关键。
————————————————-唉。事实上知识原来都非常easy的。就是被人一层层的抽像了。所以我们就认为好难好难了。。从麦克思维方程抽像出元器件。从元器件抽像出数字电路和模拟电路。 数字电路抽象就到CPU了。再抽象就到计算机了。高低电平抽像就到了0101. 0101抽象就到了汇编。。
汇编再抽象就到了各种高级语言。一切都是抽象,一切都是浮云。
。
。。
。
。要轻蔑一切知识。要重视一切知识。非淡泊无已明志,非寂静无已志远。
。楼主非常宁静所以能够志远。可是把钱看的太重。非淡泊,所以无法明志。
楼主教个朋友。希望你能加我QQ290314786.太我学习的道路上指点一下我。。我不会拿一些详细的问题来问你的。
我仅仅是想有时候我有我的一些理解我想问一下你我理解的对不正确。
我不会拿一些详细的问题来问你的。我仅仅是想有时候我有我的一些理解我想问一下你我理解的对不正确。由于这对我非常重要。。
。
再次谢谢。吴工,搞技术的人是相吸的, 先讲到这里。我要拉屎了。
我要吃饭了。 吴工。吴总。吴师傅一定要加我啊。不然我会非常失望非常遗憾的。。。
。。
。
——chenyao3612的观帖感悟
我非常感动,看到你写了那么多东西给我,我细致所有看完了。你这个回复非常有參考意义,会给后面非常多新人启示。你的观点我都认同。由于我们的学习体会都非常相似。你提到“楼主说不要学汇编我就不能理解”,我当初说这句话的时候。仅仅是想告诉大家一个信息,真正做项目的时候还是要用C语言,一旦用了C语言。单片机看起来就没有那么复杂了。你对汇编语言的理解非常不错。我当时在学校的时候。一開始就是专门学X86的汇编,当时我就想,这个东西有什么用。
最后一个学期,才学到单片机,当时就是用汇编来教学的,我那时候还不知道C语言也能够编写单片机的程序。
正由于一開始用汇编教学,我们班里除了我和少数几个人之外,大部分的同学都没有坚持下去。
我们学校的实验室里面的设备,没有仿真器,没有烧录器。仅仅能敲入十六进制的代码。
所以我们做实验的时候。就是先编写汇编程序,然后自己把汇编程序翻译成十六进制代码。然后一个个敲进去实验室的仪器里。我当初就是这样过来的。
后来毕业工作之后,我才知道能够用C语言编写单片机程序。用了C语言之后,一切都So
easy!,当然,非常可能就是你说到的原因,由于我已经有了汇编的基础。
我也想破例加你的QQ,可是我也有我的原则。有什么问题能够在我的帖里交流,我们还是做网友吧。
重申一下我的立场,只做网友。
——吴坚鸿的回复
恩。事实上我说的也有点过了。
。
我仅仅是站在我的地方说一些问题。事实上当我成家了。
。我有孩子了。。
我想我应该也会有这些现实问题。无论怎么样。
我能理解你所说的。
。你能够加我QQ吗???由于我自己会理解非常多东西。但我不知道我理解的对不正确。再就是我今后的学习目标。。
我想跟您说一下。您也帮我指导和參考。主要还是长远的。一年两年三年五年。
呵呵,原来高手也是这么来的。。
你一说我们的经历好像哦。可些如今我的水平还是六七年前你水平。
但有点不同的是你还敲过十六进制的代码。
那你和那个60的牛Xproject师一样的啊。你敲的16进制。他敲的是0101.。
也教我敲一下啊。
怎么把HEX文件直接敲进去啊?
——chenyao3612
我会把你当-朋友。可是不要加我QQ。有什么问题直接在我的帖里交流。
那是非常古老的设备了。假设你开发过烧录器。你也能够明确它的原理。
我就开发过AT89S52单片机与SST89E516RD单片机的烧录器,烧录器的原理就是类似于操作一个EERPOM。你仅仅要把这些十六进制的数据存入到有固定地址的程序存储器里面,就完毕了烧录的过程,非常easy。
详细的烧录时序,单片机的芯片的资料上有。当然。也有一些国产的单片机不会公开这些时序,由于它要防别人破解。
——吴坚鸿的回复
好吧。
仅仅要您能指导一下我的学习。在哪里都一样。我如今请教关于关于IIC协议的几个问题。
第一个就是那个第9帧数据的时候是从机自己主动把电平接低是吧?
?
?所以我主机在8帧数据完了我就要把数据线拉好,好检測从机有没把拉低是吧???
第二就是周天祥在视频里面说了一句假设从机过五秒后不应答就默认他已经应答了。这句话我一直不能正确理解。
我自己是这么理解的。从机不应答就说明传输数据错了。可是他说五秒后不应该就默认他已经应该了那是他主机单方面的觉得吧?事实上从机这一字节数据还是没有收到正确吧?
第三就是IIC协议是一种固定的协议。
有固定的格式。但有些IC的时序和那个IIC非常像。但那都不叫IIC协议是吧?就像你说的那三个单片机通信的问题。等于就是你自己为那三个单片机建立一种协议。仅仅是參考IIC或者是模拟?
我这样理解有没有问题
你的意思就是说给单片机烧程序就像单片机通过IIC协议对EERPOM里面写数据一样是吧?我这样理解有问题吗?
——chenyao3612
你问到详细的IIC协议的细节问题。我不能回答你,我也没有那个时间与心思专门为了你这个问题而去查找资料。我要告诉你的是一种思考问题的方式。
通讯仅仅有两种模式,一种是并口方式。一种就是串口方式。你说的IIC,SPI。RS232等等都是串口方式,一个脉冲仅仅能传送一位数据。并口方式就是一个脉冲能传送1个字节(或者很多其它字节)的数据,数据传输更加快。至于IIC,SPI,这些细节时序。假设不是程序调试出了问题非要去查看这些协议,我一般都不理。
我帮别人做项目。一般都是先在网上查找一些有没有现成的C语言驱动程序。找到这些驱动程序之后,然后站在人家的肩膀上做些改动,那就是我的程序了。假设真的找不到这些驱动程序。我才会自己花时间慢慢看IC资料的时序,慢慢调试。
正所谓“攻心为上,攻城为下。”
你的理解基本正确。
不管是用并口还是串口方式来数据传输,都是一样,关键是要把数据放到相应的“房间”里,就完毕烧录的过程。
——吴坚鸿的回复
是啊。这点我也没搞明确。
人家说IC的驱动程序。是不是就是说写好的时序子函数。
我们拿过来了。仅仅要往函数里面赋值或者做个表格即可了
——chenyao3612
是的。对于单片机的外围芯片,假设能找到现成的驱动程序是最好。假设没有就要自己依据IC资料来写。我要睡觉了。今晚先聊到这,近期我的项目太多,有三个项目客户等着我交货。本来还想今晚加加班搞,可是跟你聊得太投入了,仅仅能明天再弄。晚安。
回答你第三个问题。三个单片机通讯,能够用RS232这些固定时序(或者IIC,SPI),这些固定时序能够不变,可是在这些时序上面传送的数据,每一个数据的含义你能够自己来定义。哪个单片机做主机,哪个单片机做从机,从机收到哪些数据,然会返回什么数据,这些都是你能够定的。可是载体的RS232协议(标准时序)不用你来变。
把钱看得非常淡一些。你说得非常洒脱。
等你每一个月要上缴几千元的时候,你就不会那样说了,哈哈。有空再聊,
我真的睡觉去了。晚安。
——吴坚鸿的回复
唉,谁不喜欢钱。只是我们搞技术的要装的清高一点。那样才显得额外的牛B。就像周天祥说他大学从来不上课的。
读研也从不上班。
在吴工这里能学到非常多大的方向啊。。
实在谢谢了。你的每段话都对我非常有启示作用。
真心的谢谢
——chenyao3612
在吴坚鸿这一系列的博文中。我已经说过非常多次了。假设大家正在学习单片机,或者正准备学习单片机。能够去吴坚鸿的这个帖子中给他留言。有什么问题能够虽然向他请教。我个人是非常崇拜他的,并且他对于网友的问题都非常热心。