|
|
May 20
如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累 的10条有益的涉世忠告。好好地遵循、把握这些忠告和建议吧,比起所学的课堂课程来,它 毫不逊色! 1. 买个闹钟,以便按时叫醒你。 贪睡和不守时,都将成为你工作和事业上的绊脚石,任 何时候都一样。不仅要学会准时,更要学会提前。就如你坐车去某地,沿途的风景很美,你 忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达。“闹钟”只是一种简单 的标志和提示,真正灵活、实用的时间,掌握在每个人的心中。 2. 如果你不喜欢现在的工作,要么辞职不干,要么就闭嘴不言。 初出茅庐,往往眼高手低 ,心高气傲,大事做不了,小事不愿做。不要养成挑三拣四的习惯。不要雨天烦打伞,不带 伞又怕淋雨,处处表现出不满的情绪。记住,不做则已,要做就要做好。 3. 每个人都有孤独的时候。 要学会忍受孤独,这样才会成熟起来。年轻人嘻嘻哈哈、打 打闹闹惯了,到了一个陌生的环境,面对形形色色的人和事,一下子不知所措起来,有时连 一个可以倾心说话的地方也没有。这时,千万别浮躁,学会静心,学会忍受孤独。在孤独中 思考,在思考中成熟,在成熟中升华。不要因为寂寞而乱了方寸,而去做无聊无益的事情, 白白浪费了宝贵的时间。 4. 走运时要做好倒霉的准备。 有一天,一只狐狸走到一个葡萄园外,看见里面水灵灵的葡 萄垂涎欲滴。可是外面有栅栏挡着,无法进去。于是它一狠心绝食三日,减肥之后,终于钻 进葡萄园内饱餐一顿。当它心满意足地想离开葡萄园时,发觉自己吃得太饱,怎么也钻不出 栅栏了。相信任何人都不愿做这样的狐狸。退路同样重要。饱带干粮,晴带雨伞,点滴积累 ,水到渠成。有的东西今天似乎一文不值,但有朝一日也许就会身价百倍。 5. 不要像玻璃那样脆弱。 有的人眼睛总盯着自己,所以长不高看不远;总是喜欢怨天尤 人,也使别人无比厌烦。没有苦中苦,哪来甜中甜?不要像玻璃那样脆弱,而应像水晶一样 透明,太阳一样辉煌,腊梅一样坚强。既然睁开眼睛享受风的清凉,就不要埋怨风中细小的 沙粒。 6. 管住自己的嘴巴。 不要谈论自己,更不要议论别人。谈论自己往往会自大虚伪,在名不 副实中失去自己。议论别人往往陷入鸡毛蒜皮的是非口舌中纠缠不清。每天下班后和你的那 些同事朋友喝酒聊天可不是件好事,因为,这中间往往会把议论同事、朋友当做话题。背后 议论人总是不好的,尤其是议论别人的短处,这些会降低你的人格。 7. 机会从不会“失掉”,你失掉了,自有别人会得到。 不要凡事在天,守株待兔,更不要 寄希望于“机会”。机会只不过是相对于充分准备而又善于创造机会的人而言的。也许,你 正为失去一个机会而懊悔、埋怨的时候,机会正被你对面那个同样的“倒霉鬼”给抓住了。 没有机会,就要创造机会,有了机会,就要巧妙地抓住。 8. 若电话老是不响,你该打出去。 很多时候,电话会给你带来意想不到的收获,它不是 花瓶,仅仅成为一种摆设。交了新朋友,别忘了老朋友,朋友多了路好走。交际的一大诀窍 就是主动。好的人缘好的口碑,往往助你的事业更上一个台阶。 9. 千万不要因为自己已经到了结婚年龄而草率结婚。 想结婚,就要找一个能和你心心相 印、相辅相携的伴侣。不要因为放纵和游戏而恋爱,不要因为恋爱而影响工作和事业,更不 要因一桩草率而失败的婚姻而使人生受阻。感情用事往往会因小失大。 10. 写出你一生要做的事情,把单子放在皮夹里,经常拿出来看。 人生要有目标,要有计 划,要有提醒,要有紧迫感。一个又一个小目标串起来,就成了你一生的大目标。生活富足 了,环境改善了,不要忘了皮夹里那张看似薄薄的单子。
February 18 话说有两兄弟,他们一起住在一幢公寓楼里。一天,他们一起出去郊外爬山。傍晚时分,等他们爬山回来,回到公寓楼的时候,发现一件事:大厦停电了!这真是一件令人沮丧的事情。为什么呢?因为很不巧,这两兄弟是住在大厦的顶楼。那么,顶楼是几楼呢?那就更加不巧了,顶楼是八十楼。很恐怖吧。虽然两兄弟都背着大大的登山包,但看来,也是别无选择,于是,哥哥对弟弟说:“我们爬楼梯上去吧。”于是,他们就背着一大包行李开始往上爬。到了二十楼的时候,他们觉得累了。于是弟弟提议说:“哥哥,行李太重了,不如这样吧,我们把它放在二十楼,我们先上去,等大厦恢复电力,我们再坐电梯下来拿吧。”哥哥一听,觉得这主意不错:“好啊。弟弟,你真聪明呀。”于是,他们就把行李放在二十口,继续往上爬。
卸下了沉重了包袱之后,两个人觉得轻松多了。他们一路有说有笑地往上爬。但好景不常,到了四十楼,两人又觉得累了。想到只爬了一半,往上一看,竟然还有四十楼要爬。两人就开始互相埋怨,指责对方不注意停电公告,才会落到如此下场。他们边吵边爬,就这样一路爬到了六十楼。
到了六十口,两人筋疲力尽,累得连吵架的力气也没有了。哥哥对弟弟说:“算了,只剩下最后二十口,我们就不要再吵了。”于是,他们一路无言,安静地继续往上爬。终于,八十楼到了。到了家门口,哥哥长吁一口气,摆了一个很酷的姿势:“弟弟,拿钥匙来!”弟弟说:“有没有搞错?钥匙不是在你那里吗???”
大家猜猜发生了什么事?正确,钥匙还留在二十楼的登山包里!
有人说,这个故事其实在反映我们的人生。二十岁之前,我们活在家人、老师的期望之下,背负着很多压力,不停地功课、考试、升学,就好像是背着一个很重的登山包,加上自己也不够成熟有能力,所以走得很辛苦。二十岁以后,从学校毕业出来,踏上工作岗位,开始自己的职业生涯,自己喜欢做什么就做什么,想怎么做就怎么做。就好像是卸下沉重的包袱。所以说,从二十岁到四十岁,是一生中最愉快的二十年。
到了四十岁,人到中年,发现青春早已逝去,但又有很多遗憾,于是开始Compain,骂老板不识货,怪家人不体恤,埋怨政府,埋怨国家,埋怨社会。。。就这样在抱怨遗憾中又过了二十年。
到了六十岁,发现人生所剩不多,于是告诉自己,不要再埋怨了,就珍惜剩下的日子吧。于是,默默走完自己的最后岁月。到了生命的尽头,突然想起:好像有什么忘记了。是什么呢?是你的钥匙,你的KEY,你人生的关键。你把你的理想、抱负、关键都留在二十岁,没有完成。
想一想,是不是也要等到四十年之后,六十年之后才来追悔?我们想一想,我们最在意的是什么?想一想,希望将来的自己和现在有些什么不同?是不是可以做些什么来不让这个遗憾发生呢?那么,我们要做什么呢???
对,我们要做好我们的职业生涯计划。
在美国,有一群心理学家,他们跑去哈佛大学的MBA毕业班做调查。他们问这些学生:你们马上就要毕业进入职场,那么,你们回根据什么来选择你的工作呢?结果,有七成的人回答说,根据他们所学的专业来选择职业。另外有三成的人说,他们会根据自己的兴趣来选择自己的职业。五年后,这群心理学家再进行追踪,发现其中最为成功的,最出色的人都是当初说,要根据自己兴趣去选择工作的人。那么,这代表什么呢?我觉得,这表示,你在寻找工作的方向上,你的兴趣比你所学的专业更为重要!
我们知道一位非常著名的科学家、诺贝尔物理奖获得者:华人丁肇中先生。这两天丁先生就在上海交大低温研究所里,研究一种最新的冷冻技术,是用于宇航器的。这个宇航器将被投到太空当中,寻找一种反物质。丁先生当然是一位聪明人。丁先生自己也承认自己算是比较聪明,但他更加承认,他的成就是得益于他对于这个领域的天然兴趣。他说过““兴趣比天才更重要”。这就是今天,我想和大家分享的第一个重点:兴趣对于职业生涯选择的重要性。
那么,除了兴趣,还有什么在你的职业生涯的选择当中起到至关重要的作用的呢?
在这里,我要提一个人。他就是职业生涯理论的鼻祖,美国学者 John Holland 。他长期研究人格和职业匹配的关系,做了很多这方面的研究,用在许多大企业的调查当中,发现了一些规律,并在1971年出了一本专著。我想,这些规律,对于在座的朋友思考自己的未来是很有帮助的。那么,他的规律是什么呢?他说,人生来就分四类人:ABCD。第一类人:他们生性比较谨慎,比较保守,对数字敏感,适合于做财务,会计,行政,总务一类工作。第二类人呢,他们讲究章法,讲规矩,能驾驭一定的人事,具有领导力,这类人适合于做职业经理人。第三类人,他们比较灵活,沟通能力很强,无论和怎样的人沟通,都没有障碍。他们比较适合做营销,公共关系等一类工作。最后一类人,他们比较喜欢创新,爱冒险,不断有新的想法,像这样的人比较适合做艺术家,另外还比较适合做企业家。等一下,我们还会讲到,企业家和经理人的不同点。
所以说,职业生涯的第一步,就是全面地认识你自己。认识你的兴趣,个性,价值观。只有清楚认识你自己,才有可能做接下来的工作,才有可能做好职业生涯规划。但是,有时候,我们也会发现,有时候,我们并不了解自己,无法真正了解自己,那么,这时候,怎么办呢?我建议,这时就把自己放在一个大环境中,宽松的环境中,去发掘自己的潜力。换言之,有时候,不妨多给自己一些机会,跳一些槽,让环境来验证自己的个性,能力,兴趣等等。当然,这种行为也有弊端,稍后我们就会讲到,为什么要跳槽,怎么样跳槽,跳槽的代价,跳槽的最低时限等等问题。
好了,我们现在知道,职业生涯的第一步,基础,就是“全面认识自己”。接下来,第二步,职业生涯规划的核心,就是“作好职业调查”。
在这里,我有一个人的意见,想和大家探讨:人,每个人,不可能只有一份工作适合你。适合你的肯定是一类工作,或者更多,是几类工作。打个比方,就好比你到了豆蔻年华,想去找男女朋友,那你要找的,肯定不是某一个人,而是某一类人。这个观点大家认同吗?比方说,你,想找一个女朋友,那在你的心里面,就想好要找一个大眼睛,长头发,性格开朗的,身材苗条的,爱好体育活动的,喜欢小动物的女孩子。你要明白,其实,像这种类型的有很多。是不是,各位?所以说,在工作的选择上,你也会遇到很多个选择。如果有时因为客观原因,失去一个工作,真的请不必太在意。
有时侯,我有一些小朋友,他们失恋了,来找我倾吐心事。我经常对他们说的一句话是:记住“三草经”。什么是三草经呢?有些朋友可能知道的——兔子不吃窝边草;好马不吃回头草;天涯何处无芳草。这个三草经,我觉得几乎也可以用到我们的职业的选择上。第一,兔子不吃窝边草,我个人建议,我们的年轻朋友不用去朋友介绍的、亲戚介绍的,或者有朋友、亲戚在的公司里做事。我更加希望,他们能够用自己的实力去开拓自己的职业生涯。第二。好马不吃回头草,我同样做一个个人建议,当初我们既然选择离开,我们的就不必要重新回去。你一定可以找到一些同类,或者更加值得你去的职业。所以,第三点就是天涯何处无芳草。大丈夫何患无妻;我们也不担心没有好工作。
那么,做职业调查做多少个呢?我的建议是:3个。在根据自己的个性、兴趣等确立了职业方向之后,我们需要针对自己所感兴趣的三个职业进行市场状况调查。我知道,有些朋友,他有抱负,有思想,有能力,也渴望成功,但是他没有成功。很多原因,其中有一个关键的问题:没有做对事情。
我给大家三个词,大家想一想这三个词有什么不同:做事、正确地做事、做正确的事。做事,仅仅是劳动,能使我们有可能温饱;正确地做事,我们把他理解为做事依照一定的规范,可能会有效地解决一些问题,使你的工作有了一定价值;但惟有做正确的事,才有可能成功。是不是如此呢?我们要做职业的市场调研,是为了了解什么是正确的,值得我们去做。在这个方向的基础上走,我们才有可能看到成功的彼岸。
这就是今天和大家分享的第二个重点,也是职业生涯规划的一个核心:“作好职业调查”。
最后一点,也是最为关键的一点,我认为是“做好阶段性计划”。中华人民共和国1949年成立至今,已经做了11个五年计划。国家发展要做计划,我们岂能不做乎?国家发展做五年计划,那么我们个人做职业生涯规划,要做多少时间呢?我的建议是要有两个计划,一个是短期的,一个是长期的,这两个计划互有关联。
接下来,我要请问大家,诸位平时有做计划的请举一下手。恩,我看到几乎有一半人是举手的。接下来,我会把话筒交给大家,让大家来说说自己的做法。
1. 阶段性计划 扬子:三个月到半年。比方说在这段时间内,必须要完成的一些事。包括要去考一些证书,必须要读完的一些书,我会阶段性的完成。 家人(抱歉,记不得名字了):我的短期计划是三年,我会在三年内考出研究生。至于长期计划,我暂时不做,因为我觉得可能三年后会有很多变化,我暂时看不到这么远。 赵吉清:我的短期计划是两年,长期计划是六年。我的终极目标是成为一个复合型的人才。因为我觉得,复合型的人才无论到哪里,无论什么时候,都是被需要的。我准备在六年里面跳三次槽,(笑声,掌声)尽量多了解不同性质公司的工作流程。 郭巍:我的短期计划做到每周,长期计划做到十五年到二十年(惊叹声)。为什么要做每周计划,比方讲,我这周规定自己看完这本书,我会细化到我这周看这本书,每天看多少页,几分之几。我可以把握每天的工作进度都在我的掌握之中。那为什么要做这么长期的计划?因为,我知道,我的计划没有这些年是达不到的。我从小喜欢睡懒觉,不喜欢朝九晚五,所以,不管我去企业里做事也好,读书也好,目的都是为了做一个自由职业人,做一个自由讲师而在积累基础。
2. 关于工作和公司的关系? 个人意见:只有滥公司,没有滥工作。公司本身有好坏,但工作内容本身没有好快。所以,无论如何,一但你选择进入一家公司,至少要做够半年,如果做不够半年,做一个月,两个月,那么纯粹是在浪费时间。
3. 关于跳槽和坚持的关系? 个人意见:跳槽一定有代价,一定有损耗。25-30岁前,多挑槽,不伤元气,可以帮助了解自己。但30岁之后,一定需要沉淀,需要积累。跳槽的目的不全为了收入,要看到背后的能力发展机会。
4. 关于潜力和行为的关系? 个人意见:500万实验是一个小CASE。问题在于,大家相信自己有潜力,但又很懒于开发自己的潜力。说明执行的重要性。“无志之人常立志,有志之人立长志”。
5. 职业危机和瓶颈的问题? 个人意见:职业危机一般发生在有一定工作经验的人身上。当你发现瓶颈的时候,其实就是你上升到某种程度,但能力不足够撑开瓶颈。如果能给自己多加一点附加值,比方知识水平,和能力,就可以突破瓶颈。
6. 价值观的问题。 个人意见:追求符合自己价值观的职业。
时间关系,今天的讨论就到此为止。最后,我送给在座朋友一句话:“When you are over 30 years old ,you , will never get older but wiser”。就是说,当你年过三十,你就永远不会再老了,你只会越来越聪明。我谨把这句话送给在座每一位还没有三十岁,以及已经过了三十岁的朋友,祝大家在自己的职业生涯中找到自己满意的位置,找到真正的快乐!谢谢大家。
未来的不可知和不确定性大家都无法预料,但是我们还是规划自己的一生。在《从优秀到卓越》这本书上我学到了一个深深打动我的理论就是“斯托克代尔悖论”。意思就是我们要把信仰和原则分清楚,信仰是我们一定会成功,原则是事实会非常的残酷。
还有一点是重要的,就是知道自己要的是什么;所以我一直在大学里反思,我活着是为了什么?这个答案一开始可能找不到,但是随着成长,随着经历,或许你想要的东西会越来越清楚。说到财富大家往往会想到金钱,那是没错的。这些在我们的心里似乎象征着成功、成就与快乐。当我们一再地拼命为此而奔波,而忽略了生活中的风景,我想,这是可悲的。纵观历史,能够深植在我们记忆中的一定是那些让我们人生所震撼的东西,简单而伟大。那就是精神和才富——那些会自然地渗透到基因里的东西。
一是学会坚持。就是人的一生精力毕竟有限,而一个人往往可以适合许多行业。大家都知道市场竞争战略中有一个战略叫目标集聚,在经济学中有二个概念叫机会成本和转换成本,以一个人的精力不可能做好好几个行业的事情。当你轻易从一个行业跨入别一个行业时,就付出了很大的机会成本和转换成本。实际上一个人职业生涯的成功,不仅仅是专业知识的积累,还有一个更重要的因素是行业内关系资源的积累。当你更换了行业之后,以前的关系资源将不复存在或是不再能够利用,新的关系资源积累又得从头开始,这往往是一个长期的过程。这样的成本是非常高昂的。当然专业能力上的损失也会很大。所以我奉劝大家学会坚持在一个行业内积累发展,要跳槽最好在一个行业内进行。大家可能研究许多成功职业经理人的事例,你会发现一个共性,他们大多数人一生都在一个行业内发展,只有这样才能不断积累,不断突破,超越别人。
二是学会放弃。实际上每个行业的发展都有一定的同期性波动,不要看到哪个行业热门就往哪里挤。记得我上大学时,那时流行外贸、财会,后来又是房地产,再往后又是证券投资,现在是网络IT等,结果大家都一哄而上,现在呢,这些行业都是竞争激烈,不再是那么好混的。相反一些冷门专业反而因稀缺而吃香。我有一位朋友是学铸造专业的,大学毕业在国有企业工作七年,用他的话说他都成了班上的古董了,他的大学同班同学可能就剩下他没换专业了。结果有一天他终于想出来,没想到找工作时那么容易,很多外企都开出高薪请他,因为市场上这样的人太缺少了。这也就应了一句话,行行出状元。人一生遇到的机会和诱惑可能很多很多,但重要的是要学会放弃,放弃那时短期内看起来更具诱惑力的机会,始终坚持一个方向,将自己的所有精力始终集聚在一个目标上。否则的话,你就是赶上了所有的热门行业和职业,最终可能还是在平原上奔跑。
也许,很多人认为人的个性对职业影响很大,选择职业一定要根据自己的兴趣和特长。实际上职业生涯的现实是残酷的,现实是很多人为了一个好的饭碗忍辱负重,有口好饭吃就不错了,还谈什么兴趣爱好。其次,就是实际上人的可塑性超乎想象的强,职业和个性之间的关联性并不大,甚至人的性格和兴趣都会随着外界环境的改变或适应,而不断改变。从我的经验来看,我认为一个人能从事任何行业的工作,只要他始终如一。所以做好职业生涯规划还有一个要点就是要现实,不要过于理想化。否则期望越高,失望越大。
这是我再别的论坛看到的也是关于职业规划的,希望能对大家有所提示。 单字节无符号数乘法程序 (R2R3R4*R7)=(R5R2R3R4) ;入口 :R2,R3,R4,R6,R7 ;占用资源:ACC,B ;堆栈需求:2字节 ;出口 :R5,R2,R3,R4
NMUL31 :MOV A,R4 MOV B,R7 MUL AB MOV R4,A MOV A,B XCH A,R3 MOV B,R7 MUL AB ADD A,R3 MOV R3,A CLR A ADDC A,B XCH A,R2 MOV B,R7 MUL AB ADD A,R2 MOV R2,A CLR A ADDC A,B MOV R5,A CLR OV RET
;单字节无符号数乘法程序 (R5R2R3R4*R7)=(R7R5R2R3R4) ;入口 :R5,R2,R3,R4,R7 ;占用资源:ACC,B ;堆栈需求:2字节 ;出口 :R7,R5,R2,R3,R4
NMUL41 :MOV A,R4 MOV B,R7 MUL AB MOV R4,A MOV A,B XCH A,R3 MOV B,R7 MUL AB ADD A,R3 MOV R3,A CLR A ADDC A,B XCH A,R2 MOV B,R7 MUL AB ADD A,R2 MOV R2,A CLR A ADDC A,B XCH A,R5 MOV B,R7 MUL AB ADD A,R5 MOV R5,A CLR A ADDC A,B MOV R7,A CLR OV RET
;双字节无符号数乘法程序 (R3R4*R6R7)=(R5R2R3R4) ;入口 :R3,R4,R6,R7 ;占用资源:ACC,B ;堆栈需求:2字节 ;出口 :R5,R2,R3,R4
NMUL22 :MOV A,R4 MOV B,R7 MUL AB XCH A,R4 MOV R5,B MOV B,R6 MUL AB ADD A,R5 MOV R5,A CLR A ADDC A,B MOV R2,A MOV A,R3 MOV B,R7 MUL AB ADD A,R5 MOV R5,A MOV A,B ADDC A,R2 MOV R2,A CLR A ADDC A,#00H XCH A,R3 MOV B,R6 MUL AB ADD A,R2 MOV R2,A MOV A,B ADDC A,R3 XCH A,R5 MOV R3,A CLR OV RET
;双字节无符号数乘法程序 (R2R3R4*R6R7)=(R1R5R2R3R4) ;入口 :R2,R3,R4,R6,R7 ;占用资源:ACC,B ;堆栈需求:2字节 ;出口 :R1,R5,R2,R3,R4
NMUL32 :MOV A,R4 MOV B,R7 MUL AB XCH A,R4 MOV R5,B MOV B,R6 MUL AB ADD A,R5 MOV R5,A CLR A ADDC A,B MOV R1,A MOV A,R3 MOV B,R7 MUL AB ADD A,R5 MOV R5,A MOV A,B ADDC A,R1 MOV R1,A CLR A ADDC A,#00H XCH A,R3 MOV B,R6 MUL AB ADD A,R1 MOV R1,A MOV A,B ADDC A,R3 XCH A,R5 MOV R3,A MOV A,R2 MOV B,R7 MUL AB ADD A,R1 MOV R1,A MOV A,B ADDC A,R5 MOV R5,A CLR A ADDC A,#00H XCH A,R2 MOV B,R6 MUL AB ADD A,R5 MOV R5,A MOV A,B ADDC A,R2 XCH A,R1 MOV R2,A CLR OV RET
;N字节无符号数乘法程序 ([R0]*[R1])=([R0]) ;入口 :R0,R1,M,N ;占用资源:ACC,B,R2,R5,R6,R7,NCNT ;堆栈需求:2字节 ;出口 :R0
NMULMN :MOV A,M ADD A,R0 MOV R5,A XCH A,R1 XCH A,R5 ADD A,N XCH A,R0 MOV R6,A MOV B,M MOV NCNT,B NMLMN1 :DEC R0 DEC R1 CLR A XCH A,@R1 MOV @R0,A DJNZ NCNT,NMLMN1 MOV NCNT,B NMLMN2 :CLR A XCH A,@R0 MOV R2,A MOV A,R6 MOV R0,A MOV A,R5 MOV R1,A MOV R7,N CLR C NMLMN3 :MOV A,R2 MOV B,@R1 INC R1 MUL AB ADDC A,@R0 MOV @R0,A INC R0 MOV A,B ADDC A,@R0 MOV @R0,A DJNZ R7,NMLMN3 INC R0 INC R6 DJNZ NCNT,NMLMN2 MOV A,R0 CLR C SUBB A,M SUBB A,N MOV R0,A RET
;单字节无符号除法程序 (R2R3R4/R7)=(R2)R3R4 余数R7 ;入口 :R2,R3,R4,R7 ;占用资源:ACC,B,F0 ;堆栈需求:3字节 ;出口 :(R2),R3,R4,R7,OV
NDIV31 :MOV A,R2 MOV B,R7 DIV AB PUSH A MOV R2,B MOV B,#10H NDV311 :CLR C MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV F0,C CLR C SUBB A,R7 JB F0,NDV312 JC NDV313 NDV312 :MOV R2,A INC R4 NDV313 :DJNZ B,NDV311 POP A CLR OV JZ NDV314 SETB OV NDV314 :XCH A,R2 MOV R7,A RET
;单字节无符号除法程序 (R5R2R3R4/R7)=(R5)R2R3R4 余数R7 ;入口 :R2,R3,R4,R7 ;占用资源:ACC,B,F0 ;堆栈需求:3字节 ;出口 :(R5),R2,R3,R4,R7,OV
NDIV41 :MOV A,R5 MOV B,R7 DIV AB PUSH A MOV R5,B MOV B,#18H NDV411 :CLR C MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV A,R5 RLC A MOV R5,A MOV F0,C CLR C SUBB A,R7 JB F0,NDV412 JC NDV413 NDV412 :MOV R5,A INC R4 NDV413 :DJNZ B,NDV411 POP A CLR OV JZ NDV414 SETB OV NDV414 :XCH A,R5 MOV R7,A RET
;双字节无符号除法程序 (R5R2R3R4/R6R7)=(R2)R3R4 余数R6R7 ;入口 :R5,R2,R3,R4,R6,R7 ;占用资源:ACC,B,F0 ;堆栈需求:4字节 ;出口 :(R2),R3,R4,R6,R7,OV
NDIV42 :MOV A,R1 PUSH A MOV B,#00H NDV421 :MOV A,R2 CLR C SUBB A,R7 MOV R1,A MOV A,R5 SUBB A,R6 JC NDV422 MOV R5,A MOV A,R1 MOV R2,A ;片内RAM初始化子程序
IBCLR :MOV A,R0 MOV R1,A CLR A IBC1 :MOV @R1,A INC R1 DJNZ R7,IBC1 RET
;片外RAM初始化子程序
EBCLR1 :MOV A,ADDPL MOV DPL,A MOV A,ADDPH MOV DPH,A CLR C EBC11 :MOVX @DPTR,A INC DPTR DJNZ R7,EBC11 RET
;片外RAM初始化子程序(双字节个单元)
EBCLR2 :MOV A,ADDPL MOV DPL,A MOV A,ADDPH MOV DPH,A MOV A,R7 JZ EBC21 INC R6 EBC21 :CLR A MOVX @DPTR,A INC DPTR DJNZ R7,EBC21 DJNZ R6,EBC21 RET
;内部RAM数据复制程序 ;入口 :R0,R7 ;占用资源:A ;堆栈需求:2字节 ;出口 :R1
IBMOV :MOV A,R0 ADD A,R7 MOV R0,A MOV A,R1 ADD A,R7 MOV R1,A IBM1 :DEC R0 DEC R1 MOV A,@R0 MOV @R1,A DJNZ R7,IBM1 RET
;外部RAM数据复制程序 ;入口 :ADDPH,ADDPL,R7 ;占用资源:ACC ;堆栈需求:2字节 ;出口 :R0,R1
EBMOV1 :MOV A,ADDPL ADD A,R7 MOV DPL,A CLR A ADDC A,ADDPH MOV DPH,A MOV A,R7 ADD A,R1 XCH A,R0 ADDC A,#00H MOV P2,A EBM11 :DEC R0 CJNE R0,#0FFH,EBM12 DEC P2 EBM12 :DEC DPL MOV A,DPL CJNE A,#0FFH,EBM13 DEC DPH EBM13 :MOVX A,@R0 MOVX @DPTR,A DJNZ R7,EBM11 RET
;外部RAM数据复制程序 ;入口 :ADDPH,ADDPL,R6,R7 ;占用资源:ACC ;堆栈需求:2字节 ;出口 :R0,R1
EBMOV2 :MOV A,ADDPL ADD A,R7 MOV DPL,A MOV A,R6 ADDC A,ADDPH MOV DPH,A MOV A,R7 ADD A,R1 XCH A,R0 ADDC A,R6 MOV P2,A MOV A,R7 JZ EBM21 INC R6 EBM21 :DEC R0 CJNE R0,#0FFH,EBM22 DEC P2 EBM22 :DEC DPL MOV A,DPL CJNE A,#0FFH,EBM23 DEC DPH EBM23 :MOVX A,@R0 MOVX @DPTR,A DJNZ R7,EBM21 DJNZ R6,EBM21 RET
;外部RAM数据复制到内部RAM程序 ;入口 :ADDPH,ADDPL,R7 ;占用资源:ACC ;堆栈需求:2字节 ;出口 :R0
ITEMOV :MOV A,ADDPL ADD A,R7 MOV DPL,A MOV A,ADDPH ADDC A,#00H MOV DPH,A MOV A,R0 ADD A,R7 MOV R0,A ITEM1 :DEC R0 DEC DPL MOV A,DPL CJNE A,#0FFH,ITEM2 DEC DPH ITEM2 :MOVX A,@DPTR MOV @R0,A DJNZ R7,ITEM1 RET
;限幅滤波程序 ;入口 :A,SDAT,DELTY ;占用资源:B ;堆栈需求:2字节 ;出口 :A
JUGFILT :MOV B,A CLR C SUBB A,SDAT JNC JUGFT1 CPL A INC A JUGFT1 :SETB A SUBB A,#DELTY JNC JUGFT3 MOV A,SDAT RET JUGFT3 :MOV A,B MOV SDAT,A RET
;中位值滤波程序 ;入口 :ADDPH,ADDPL,N ;占用资源:ESELSORT ;堆栈需求:4字节 ;出口 :A
MEDFILT :LCALL ESELSORT MOV A,N CLR C RRC A ADD A,ADDPL MOV DPL,A MOV A,ADDPH MOV DPH,A JNC MEDFT1 INC DPH MEDFT1 :MOVX A,@DPTR RET
;N点算术平均滤波 ;入口 :ADDPH,ADDPL,N ;占用资源:B,R3,R4 ;堆栈需求:2字节 ;出口 :A
AVFILT :MOV A,ADDPL MOV DPL,A MOV A,ADDPH MOV DPH,A CLR A MOV R3,A MOV R4,A MOV R7,N AVFT1 :MOVX A,@DPTR INC DPTR ADD A,R4 MOV R4,A JNC AVFT2 INC R3 AVFT2 :DJNZ R7,AVFT1 MOV R7,N MOV R2,#00H LCALL NDIV31 MOV A,R4 RET
;N点加权平均滤波 ;入口 :ADDPH,ADDPL,N ;占用资源:B,R3,R4 ;堆栈需求:2字节 ;出口 :A
QAVFILT :CLR A MOV R3,A MOV R4,A MOV R7,N MOV P2,ADDPH MOV R1,ADDPL MOV DPTR,#QAVTAB QAVFT1 :MOVC A,@A+DPTR MOV B,A MOVX A,@R1 INC DPTR INC R1 MUL AB ADD A,R4 MOV R4,A MOV A,B ADDC A,R3 MOV R3,A DJNZ R7,QAVFT1 MOV A,R4 JNB ACC.7,QAVFT2 INC R3 QAVFT2 :MOV A,R3 RET QAVTAB :DB
;一阶加权滞后滤波程序 ;入口 :A,DELTY ;占用资源:B,R3,R4 ;堆栈需求:2字节 ;出口 :A
BQFILT :MOV B,A CLR A MOV DPTR,#ABTAB MOVC A,@A+DPTR MUL AB MOV R4,A MOV R3,B MOV A,#01H MOVC A,@A+DPTR MOV B,DELTY MUL AB ADD A,R4 MOV R4,A MOV A,B ADDC A,R3 MOV R3,A MOV A,R4 JNB ACC.7,FT1 INC R3 FT1 :MOV A,R3 MOV DELTY,A RET BQTAB :DB 80H,80H
;双字节取补程序 /(R3R4)=(R3R4) ;入口 :R3,R4 ;占用资源:ACC ;堆栈需求:2字节 ;出口 :R3,R4
CMPT :MOV A,R4 CPL A ADD A,#01H MOV R4,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET
;N节取补程序 /([R0])=([R0]) ;入口 :R0,R7 ;占用资源:ACC,B ;堆栈需求:2字节 ;出口 :R0
NCMPTN :MOV B,R0 SETB C NCPT1 :MOV A,@R0 CPL A ADDC A,#00H MOV @R0,A INC R0 DJNZ R7,NCPT1 MOV R0,B RET
;双字节无符号数加法程序 (R3R4+R6R7)=(R3R4) ;入口 :R3,R4,R6,R7 ;占用资源:ACC ;堆栈需求:2字节 ;出口 :R3,R4,CF
NADD :MOV A,R4 ADD A,R7 MOV R4,A MOV A,R3 ADDC A,R6 MOV R3,A RET
;N字节无符号数加法程序 ([R0]+[R1])=([R0]) ;入口 :R0,R1,R7 ;占用资源:ACC,B ;堆栈需求:2字节 ;出口 :R0,CF
NADDN :MOV B,R0 CLR C NADN1 :MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R7,NADN1 MOV R0,B RET
;双字节无符号数减法程序 (R3R4-R6R7)=(R3R4) ;入口 :R3,R4,R6,R7 ;占用资源:ACC ;堆栈需求:2字节 ;出口 :R3,R4
NSUB :MOV A,R4 CLR C SUBB A,R7 MOV R4,A MOV A,R3 SUBB A,R6 MOV R3,A RET
;N字节无符号数减法程序 ([R0]-[R1])=([R0]) ;入口 :R0,R1,R7 ;占用资源:ACC,B ;堆栈需求:2字节 ;出口 :R0,CF
NSUBN :MOV B,R0 MOV R7,N CLR C NSUBN1 :MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R7,NSUBN1 MOV R0,B RET
;单字节无符号数乘法程序 (R3R4*R7)=(R2R3R4) ;入口 :R3,R4,R7 ;占用资源:ACC,B ;堆栈需求:2字节 ;出口 :R2,R3,R4
NMUL21 :MOV A,R4 MOV B,R7 MUL AB MOV R4,A MOV A,B XCH A,R3 MOV B,R7 MUL AB ADD A,R3 MOV R3,A CLR A ADDC A,B MOV R2,A CLR OV RET December 02 模拟电路 1、基尔霍夫定理的内容是什么?(仕兰微电子) 2、平板电容公式(C=εS/4πkd)。(未知) 3、最基本的如三极管曲线特性。(未知) 4、描述反馈电路的概念,列举他们的应用。(仕兰微电子) 5、负反馈种类(电压并联反馈,电流串联反馈,电压串联反馈和电流并联反馈);负反 馈的优点(降低放大器的增益灵敏度,改变输入电阻和输出电阻,改善放大器的线性和非 线性失真,有效地扩展放大器的通频带,自动调节作用)(未知) 6、放大电路的频率补偿的目的是什么,有哪些方法?(仕兰微电子) 7、频率响应,如:怎么才算是稳定的,如何改变频响曲线的几个方法。(未知) 8、给出一个查分运放,如何相位补偿,并画补偿后的波特图。(凹凸) 9、基本放大电路种类(电压放大器,电流放大器,互导放大器和互阻放大器),优缺 点,特别是广泛采用差分结构的原因。(未知) 10、给出一差分电路,告诉其输出电压Y+和Y-,求共模分量和差模分量。(未知) 11、画差放的两个输入管。(凹凸) 12、画出由运放构成加法、减法、微分、积分运算的电路原理图。并画出一个晶体管级的 运放电路。(仕兰微电子) 13、用运算放大器组成一个10倍的放大器。(未知) 14、给出一个简单电路,让你分析输出电压的特性(就是个积分电路),并求输出端某点 的 rise/fall时间。(Infineon笔试试题) 15、电阻R和电容C串联,输入电压为R和C之间的电压,输出电压分别为C上电压和R上电 压,要求制这两种电路输入电压的频谱,判断这两种电路何为高通滤波器,何为低通滤 波器。当RC<<T时,给出输入电压波形图,绘制两种电路的输出波形图。(未知) 16、有源滤波器和无源滤波器的原理及区别?(新太硬件) 17、有一时域信号S=V0sin(2pif0t)+V1cos(2pif1t)+V2sin(2pif3t+90),当其通过低通、 带通、高通滤波器后的信号表示方式。(未知) 18、选择电阻时要考虑什么?(东信笔试题) 19、在CMOS电路中,要有一个单管作为开关管精确传递模拟低电平,这个单管你会用P管 还是N管,为什么?(仕兰微电子) 20、给出多个mos管组成的电路求5个点的电压。(Infineon笔试试题) 21、电压源、电流源是集成电路中经常用到的模块,请画出你知道的线路结构,简单描述 其优缺点。(仕兰微电子) 22、画电流偏置的产生电路,并解释。(凹凸) 23、史密斯特电路,求回差电压。(华为面试题) 24、晶体振荡器,好像是给出振荡频率让你求周期(应该是单片机的,12分之一周期....) (华为面试题) 25、LC正弦波振荡器有哪几种三点式振荡电路,分别画出其原理图。(仕兰微电子) 26、VCO是什么,什么参数(压控振荡器?) (华为面试题) 27、锁相环有哪几部分组成?(仕兰微电子) 28、锁相环电路组成,振荡器(比如用D触发器如何搭)。(未知) 29、求锁相环的输出频率,给了一个锁相环的结构图。(未知) 30、如果公司做高频电子的,可能还要RF知识,调频,鉴频鉴相之类,不一一列举。(未知) 31、一电源和一段传输线相连(长度为L,传输时间为T),画出终端处波形,考虑传输线 无损耗。给出电源电压波形图,要求绘制终端波形图。(未知) 32、微波电路的匹配电阻。(未知) 33、DAC和ADC的实现各有哪些方法?(仕兰微电子) 34、A/D电路组成、工作原理。(未知) 35、实际工作所需要的一些技术知识(面试容易问到)。如电路的低功耗,稳定,高速如何做到,调运放,布版图注意的地方等等,一般会针对简历上你所写做过的东西具体问,肯定会问得很细(所以别把什么都写上,精通之类的词也别用太多了),这个东西各个人就 不一样了,不好说什么了。(未知)
_______________________________________________________________________ 数字电路 1、同步电路和异步电路的区别是什么?(仕兰微电子) 2、什么是同步逻辑和异步逻辑?(汉王笔试) 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。 3、什么是"线与"逻辑,要实现它,在硬件特性上有什么具体要求?(汉王笔试) 线与逻辑是两个输出信号相连可以实现与的功能。在硬件上,要用oc门来实现,由于不用 oc门可能使灌电流过大,而烧坏逻辑门。 同时在输出端口应加一个上拉电阻。 4、什么是Setup 和Holdup时间?(汉王笔试) 5、setup和holdup时间,区别.(南山之桥) 6、解释setup time和hold time的定义和在时钟信号延迟时的变化。(未知) 7、解释setup和hold time violation,画图说明,并说明解决办法。(威盛VIA 2003.11.06 上海笔试试题) Setup/hold time 是测试芯片对输入信号和时钟信号之间的时间要求。建立时间是指触发 器的时钟信号上升沿到来以前,数据稳定不变的时间。输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time.如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。 保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如果hold time 不够,数据同样不能被打入触发器。 建立时间(Setup Time)和保持时间(Hold time)。建立时间是指在时钟边沿前,数据信 号需要保持不变的时间。保持时间是指时钟跳变边沿后数据信号需要保持不变的时间。如果不满足建立和保持时间的话,那么DFF将不能正确地采样到数据,将会出现 metastability的情况。如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时 间,那么超过量就分别被称为建立时间裕量和保持时间裕量。 8、说说对数字逻辑中的竞争和冒险的理解,并举例说明竞争和冒险怎样消除。(仕兰微 电子) 9、什么是竞争与冒险现象?怎样判断?如何消除?(汉王笔试) 在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。产生毛刺叫冒险。如果布尔式中有相反的信号则可能产生竞争和冒险现象。解决方法:一是添加布尔式的消去项,二是在芯片外部加电容。 10、你知道那些常用逻辑电平?TTL与COMS电平可以直接互连吗?(汉王笔试) 常用逻辑电平:12V,5V,3.3V;TTL和CMOS不可以直接互连,由于TTL是在0.3-3.6V之间,而CMOS则是有在12V的有在5V的。CMOS输出接到TTL是可以直接互连。TTL接到CMOS需要在输出端口加一上拉电阻接到5V或者12V。 11、如何解决亚稳态。(飞利浦-大唐笔试) 亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚 稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平 上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无 用的输出电平可以沿信号通道上的各个触发器级联式传播下去。 12、IC设计中同步复位与 异步复位的区别。(南山之桥) 13、MOORE 与 MEELEY状态机的特征。(南山之桥) 14、多时域设计中,如何处理信号跨时域。(南山之桥) 15、给了reg的setup,hold时间,求中间组合逻辑的delay范围。(飞利浦-大唐笔试) Delay < period - setup – hold 16、时钟周期为T,触发器D1的建立时间最大为T1max,最小为T1min。组合逻辑电路最大延 迟为T2max,最小为T2min。问,触发器D2的建立时间T3和保持时间应满足什么条件。(华 为) 17、给出某个一般时序电路的图,有Tsetup,Tdelay,Tck->q,还有 clock的delay,写出决 定最大时钟的因素,同时给出表达式。(威盛VIA 2003.11.06 上海笔试试题) 18、说说静态、动态时序模拟的优缺点。(威盛VIA 2003.11.06 上海笔试试题) 19、一个四级的Mux,其中第二级信号为关键信号 如何改善timing。(威盛VIA 2003.11.06 上海笔试试题) 20、给出一个门级的图,又给了各个门的传输延时,问关键路径是什么,还问给出输入, 使得输出依赖于关键路径。(未知) 21、逻辑方面数字电路的卡诺图化简,时序(同步异步差异),触发器有几种(区别,优 点),全加器等等。(未知) 22、卡诺图写出逻辑表达使。(威盛VIA 2003.11.06 上海笔试试题) 23、化简F(A,B,C,D)= m(1,3,4,5,10,11,12,13,14,15)的和。(威盛) 24、please show the CMOS inverter schmatic,layout and its cross sectionwith P- well process.Plot its transfer curve (Vout-Vin) And also explain the operation region of PMOS and NMOS for each segment of the transfer curve? (威 盛笔试题circuit design-beijing-03.11.09) 25、To design a CMOS invertor with balance rise and fall time,please define the ration of channel width of PMOS and NMOS and explain? 26、为什么一个标准的倒相器中P管的宽长比要比N管的宽长比大?(仕兰微电子) 27、用mos管搭出一个二输入与非门。(扬智电子笔试) 28、please draw the transistor level schematic of a cmos 2 input AND gate and explain which input has faster response for output rising edge.(less delay time)。(威盛笔试题circuit design-beijing-03.11.09) 29、画出NOT,NAND,NOR的符号,真值表,还有transistor level的电路。(Infineon笔 试) 30、画出CMOS的图,画出tow-to-one mux gate。(威盛VIA 2003.11.06 上海笔试试题) 31、用一个二选一mux和一个inv实现异或。(飞利浦-大唐笔试) 32、画出Y=A*B+C的cmos电路图。(科广试题) 33、用逻辑们和cmos电路实现ab+cd。(飞利浦-大唐笔试) 34、画出CMOS电路的晶体管级电路图,实现Y=A*B+C(D+E)。(仕兰微电子) 35、利用4选1实现F(x,y,z)=xz+yz’。(未知) 36、给一个表达式f=xxxx+xxxx+xxxxx+xxxx用最少数量的与非门实现(实际上就是化 简)。 37、给出一个简单的由多个NOT,NAND,NOR组成的原理图,根据输入波形画出各点波形。 (Infineon笔试) 38、为了实现逻辑(A XOR B)OR (C AND D),请选用以下逻辑中的一种,并说明为什 么?1)INV 2)AND 3)OR 4)NAND 5)NOR 6)XOR 答案:NAND(未知) 39、用与非门等设计全加法器。(华为) 40、给出两个门电路让你分析异同。(华为) 41、用简单电路实现,当A为输入时,输出B波形为…(仕兰微电子) 42、A,B,C,D,E进行投票,多数服从少数,输出是F(也就是如果A,B,C,D,E中1的个数比0 多,那么F输出为1,否则F为0),用与非门实现,输入数目没有限制。(未知) 43、用波形表示D触发器的功能。(扬智电子笔试) 44、用传输门和倒向器搭一个边沿触发器。(扬智电子笔试) 45、用逻辑们画出D触发器。(威盛VIA 2003.11.06 上海笔试试题) 46、画出DFF的结构图,用verilog实现之。(威盛) 47、画出一种CMOS的D锁存器的电路图和版图。(未知) 48、D触发器和D锁存器的区别。(新太硬件面试) 49、简述latch和filp-flop的异同。(未知) 50、LATCH和DFF的概念和区别。(未知) 51、latch与register的区别,为什么现在多用register.行为级描述中latch如何产生的。 (南山之桥) 52、用D触发器做个二分颦的电路.又问什么是状态图。(华为) 53、请画出用D触发器实现2倍分频的逻辑电路?(汉王笔试) 54、怎样用D触发器、与或非门组成二分频电路?(东信笔试) 55、How many flip-flop circuits are needed to divide by 16? (Intel) 16分频? 56、用filp-flop和logic-gate设计一个1位加法器,输入carryin和current-stage,输出 carryout和next-stage. (未知) 57、用D触发器做个4进制的计数。(华为) 58、实现N位Johnson Counter,N=5。(南山之桥) 59、用你熟悉的设计方式设计一个可预置初值的7进制循环计数器,15进制的呢?(仕兰 微电子) 60、数字电路设计当然必问Verilog/VHDL,如设计计数器。(未知) 61、BLOCKING NONBLOCKING 赋值的区别。(南山之桥) 62、写异步D触发器的verilog module。(扬智电子笔试) module dff8(clk , reset, d, q); input clk; input reset; input [7:0] d; output [7:0] q; reg [7:0] q; always @ (posedge clk or posedge reset) if(reset) q <= 0; else q <= d; endmodule 63、用D触发器实现2倍分频的Verilog描述? (汉王笔试) module divide2( clk , clk_o, reset); input clk , reset; output clk_o; wire in; reg out ; always @ ( posedge clk or posedge reset) if ( reset) out <= 0; else out <= in; assign in = ~out; assign clk_o = out; endmodule 64、可编程逻辑器件在现代电子设计中越来越重要,请问:a) 你所知道的可编程逻辑器 件有哪些? b) 试用VHDL或VERILOG、ABLE描述8位D触发器逻辑。(汉王笔试) PAL,PLD,CPLD,FPGA。 module dff8(clk , reset, d, q); input clk; input reset; input d; output q; reg q; always @ (posedge clk or posedge reset) if(reset) q <= 0; else q <= d; endmodule 65、请用HDL描述四位的全加法器、5分频电路。(仕兰微电子) 66、用VERILOG或VHDL写一段代码,实现10进制计数器。(未知) 67、用VERILOG或VHDL写一段代码,实现消除一个glitch。(未知) 68、一个状态机的题目用verilog实现(不过这个状态机画的实在比较差,很容易误解 的)。(威盛VIA 2003.11.06 上海笔试试题) 69、描述一个交通信号灯的设计。(仕兰微电子) 70、画状态机,接受1,2,5分钱的卖报机,每份报纸5分钱。(扬智电子笔试) 71、设计一个自动售货机系统,卖soda水的,只能投进三种硬币,要正确的找回钱 数。 (1)画出fsm(有限状态机);(2)用verilog编程,语法要符合fpga设计 的要求。(未知) 72、设计一个自动饮料售卖机,饮料10分钱,硬币有5分和10分两种,并考虑找零:(1) 画出fsm(有限状态机);(2)用verilog编程,语法要符合fpga设计的要求;(3)设计 工程中可使用的工具及设计大致过程。(未知) 73、画出可以检测10010串的状态图,并verilog实现之。(威盛) 74、用FSM实现101101的序列检测模块。(南山之桥) a为输入端,b为输出端,如果a连续输入为1101则b输出为1,否则为0。 例如a: 0001100110110100100110 b: 0000000000100100000000 请画出state machine;请用RTL描述其state machine。(未知) 75、用verilog/vddl检测stream中的特定字符串(分状态用状态机写)。(飞利浦-大唐 笔试) 76、用verilog/vhdl写一个fifo控制器(包括空,满,半满信号)。(飞利浦-大唐笔试) 77、现有一用户需要一种集成电路产品,要求该产品能够实现如下功能:y=lnx,其中,x 为4位二进制整数输入信号。y为二进制小数输出,要求保留两位小数。电源电压为3~5v假 设公司接到该项目后,交由你来负责该产品的设计,试讨论该产品的设计全程。(仕兰微 电子) 78、sram,falsh memory,及dram的区别?(新太硬件面试) 79、给出单管DRAM的原理图(西电版《数字电子技术基础》作者杨颂华、冯毛官205页图9 -14b),问你有什么办法提高refresh time,总共有5个问题,记不起来了。(降低温 度,增大电容存储容量)(Infineon笔试) 80、Please draw schematic of a common SRAM cell with 6 transistors,point out which nodes can store data and which node is word line control? (威盛笔试题 circuit design-beijing-03.11.09) 81、名词:sram,ssram,sdram 名词IRQ,BIOS,USB,VHDL,SDR IRQ: Interrupt ReQuest BIOS: Basic Input Output System USB: Universal Serial Bus VHDL: VHIC Hardware Description Language SDR: Single Data Rate 压控振荡器的英文缩写(VCO)。 动态随机存储器的英文缩写(DRAM)。 名词解释,无聊的外文缩写罢了,比如PCI、ECC、DDR、interrupt、pipeline、 IRQ,BIOS,USB,VHDL,VLSI VCO(压控振荡器) RAM (动态随机存储器),FIR IIR DFT(离散 傅立叶变换)或者是中文的,比如:a.量化误差 b.直方图 c.白平衡
____________________________________________________________________________ IC设计基础(流程、工艺、版图、器件) 1、我们公司的产品是集成电路,请描述一下你对集成电路的认识,列举一些与集成电路 相关的内容(如讲清楚模拟、数字、双极型、CMOS、MCU、RISC、CISC、DSP、ASIC、FPGA 等的概念)。(仕兰微面试题目) 2、FPGA和ASIC的概念,他们的区别。(未知) 答案:FPGA是可编程ASIC。 ASIC:专用集成电路,它是面向专门用途的电路,专门为一个用户设计和制造的。根据一 个用户的特定要求,能以低研制成本,短、交货周期供货的全定制,半定制集成电路。与 门阵列等其它ASIC(Application Specific IC)相比,它们又具有设计开发周期短、设计 制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点 3、什么叫做OTP片、掩膜片,两者的区别何在?(仕兰微面试题目) 4、你知道的集成电路设计的表达方式有哪几种?(仕兰微面试题目) 5、描述你对集成电路设计流程的认识。(仕兰微面试题目) 6、简述FPGA等可编程逻辑器件设计流程。(仕兰微面试题目) 7、IC设计前端到后端的流程和eda工具。(未知) 8、从RTL synthesis到tape out之间的设计flow,并列出其中各步使用的tool.(未知) 9、Asic的design flow。(威盛VIA 2003.11.06 上海笔试试题) 10、写出asic前期设计的流程和相应的工具。(威盛) 11、集成电路前段设计流程,写出相关的工具。(扬智电子笔试) 先介绍下IC开发流程: 1.)代码输入(design input) 用vhdl或者是verilog语言来完成器件的功能描述,生成hdl代码 语言输入工具:SUMMIT VISUALHDL MENTOR RENIOR 图形输入: composer(cadence); viewlogic (viewdraw) 2.)电路仿真(circuit simulation) 将vhd代码进行先前逻辑仿真,验证功能描述是否正确 数字电路仿真工具: Verolog: CADENCE Verolig-XL SYNOPSYS VCS MENTOR Modle-sim VHDL : CADENCE NC-vhdl SYNOPSYS VSS MENTOR Modle-sim 模拟电路仿真工具: ***ANTI HSpice pspice,spectre micro microwave: eesoft : hp 3.)逻辑综合(synthesis tools) 逻辑综合工具可以将设计思想vhd代码转化成对应一定工艺手段的门级电路;将初级仿真 中所没有考虑的门沿(gates delay)反标到生成的门级网表中,返回电路仿真阶段进行再 仿真。最终仿真结果生成的网表称为物理网表。 12、请简述一下设计后端的整个流程?(仕兰微面试题目) 13、是否接触过自动布局布线?请说出一两种工具软件。自动布局布线需要哪些基本元 素?(仕兰微面试题目) 14、描述你对集成电路工艺的认识。(仕兰微面试题目) 15、列举几种集成电路典型工艺。工艺上常提到0.25,0.18指的是什么?(仕兰微面试题 目) 16、请描述一下国内的工艺现状。(仕兰微面试题目) 17、半导体工艺中,掺杂有哪几种方式?(仕兰微面试题目) 18、描述CMOS电路中闩锁效应产生的过程及最后的结果?(仕兰微面试题目) 19、解释latch-up现象和Antenna effect和其预防措施.(未知) 20、什么叫Latchup?(科广试题) 21、什么叫窄沟效应? (科广试题) 22、什么是NMOS、PMOS、CMOS?什么是增强型、耗尽型?什么是PNP、NPN?他们有什么差 别?(仕兰微面试题目) 23、硅栅COMS工艺中N阱中做的是P管还是N管,N阱的阱电位的连接有什么要求?(仕兰微 面试题目) 24、画出CMOS晶体管的CROSS-OVER图(应该是纵剖面图),给出所有可能的传输特性和转 移特性。(Infineon笔试试题) 25、以interver为例,写出N阱CMOS的process流程,并画出剖面图。(科广试题) 26、Please explain how we describe the resistance in semiconductor. Compare the resistance of a metal,poly and diffusion in tranditional CMOS process.(威 盛笔试题circuit design-beijing-03.11.09) 27、说明mos一半工作在什么区。(凹凸的题目和面试) 28、画p-bulk 的nmos截面图。(凹凸的题目和面试) 29、写schematic note(?), 越多越好。(凹凸的题目和面试) 30、寄生效应在ic设计中怎样加以克服和利用。(未知) 31、太底层的MOS管物理特性感觉一般不大会作为笔试面试题,因为全是微电子物理,公 式推导太罗索,除非面试出题的是个老学究。IC设计的话需要熟悉的软件: Cadence, Synopsys, Avant,UNIX当然也要大概会操作。 32、unix 命令cp -r, rm,uname。(扬智电子笔试)
___________________________________________________________________________ 单片机、MCU、计算机原理 1、简单描述一个单片机系统的主要组成模块,并说明各模块之间的数据流流向和控制流 流向。简述单片机应用系统的设计原则。(仕兰微面试题目) 2、画出8031与2716(2K*8ROM)的连线图,要求采用三-八译码器,8031的P2.5,P2.4和 P2.3参加译码,基本地址范围为3000H-3FFFH。该2716有没有重叠地址?根据是什么?若 有,则写出每片2716的重叠地址范围。(仕兰微面试题目) 3、用8051设计一个带一个8*16键盘加驱动八个数码管(共阳)的原理图。(仕兰微面试 题目) 4、PCI总线的含义是什么?PCI总线的主要特点是什么? (仕兰微面试题目) 5、中断的概念?简述中断的过程。(仕兰微面试题目) 6、如单片机中断几个/类型,编中断程序注意什么问题;(未知) 7、要用一个开环脉冲调速系统来控制直流电动机的转速,程序由8051完成。简单原理如 下:由P3.4输出脉冲的占空比来控制转速,占空比越大,转速越快;而占空比由K7-K0八 个开关来设置,直接与P1口相连(开关拨到下方时为"0",拨到上方时为"1",组成一个八 位二进制数N),要求占空比为N/256。 (仕兰微面试题目) 下面程序用计数法来实现这一功能,请将空余部分添完整。 MOV P1,#0FFH LOOP1 :MOV R4,#0FFH -------- MOV R3,#00H LOOP2 :MOV A,P1 -------- SUBB A,R3 JNZ SKP1 -------- SKP1:MOV C,70H MOV P3.4,C ACALL DELAY :此延时子程序略 -------- -------- AJMP LOOP1 8、单片机上电后没有运转,首先要检查什么?(东信笔试题) 9、What is PC Chipset? (扬智电子笔试) 芯片组(Chipset)是主板的核心组成部分,按照在主板上的排列位置的不同,通常分为 北桥芯片和南桥芯片。北桥芯片提供对CPU的类型和主频、内存的类型和最大容量、 ISA/PCI/AGP插槽、ECC纠错等支持。南桥芯片则提供对KBC(键盘控制器)、RTC(实时时 钟控制器)、USB(通用串行总线)、Ultra DMA/33(66)EIDE数据传输方式和ACPI(高级 能源管理)等的支持。其中北桥芯片起着主导性的作用,也称为主桥(Host Bridge)。 除了最通用的南北桥结构外,目前芯片组正向更高级的加速集线架构发展,Intel的 8xx系列芯片组就是这类芯片组的代表,它将一些子系统如IDE接口、音效、MODEM和USB直 接接入主芯片,能够提供比PCI总线宽一倍的带宽,达到了266MB/s。 10、如果简历上还说做过cpu之类,就会问到诸如cpu如何工作,流水线之类的问题。 (未知) 11、计算机的基本组成部分及其各自的作用。(东信笔试题) 12、请画出微机接口电路中,典型的输入设备与微机接口逻辑示意图(数据接口、控制接 口、所存器/缓冲器)。 (汉王笔试) 13、cache的主要部分什么的。(威盛VIA 2003.11.06 上海笔试试题) 14、同步异步传输的差异(未知) 15、串行通信与同步通信异同,特点,比较。(华为面试题) 16、RS232c高电平脉冲对应的TTL逻辑是?(负逻辑?) (华为面试题)
___________________________________________________________________________ 信号与系统 1、的话音频率一般为300~3400HZ,若对其采样且使信号不失真,其最小的采样频率应为 多大?若采用8KHZ的采样频率,并采用8bit的PCM编码,则存储一秒钟的信号数据量有多 大?(仕兰微面试题目) 2、什么耐奎斯特定律,怎么由模拟信号转为数字信号。(华为面试题) 3、如果模拟信号的带宽为 5khz,要用8K的采样率,怎么办? (lucent) 两路? 4、信号与系统:在时域与频域关系。(华为面试题) 5、给出时域信号,求其直流分量。(未知) 6、给出一时域信号,要求(1)写出频率分量,(2)写出其傅立叶变换级数;(3)当波 形经过低通滤波器滤掉高次谐波而只保留一次谐波时,画出滤波后的输出波形。(未知) 7、sketch 连续正弦信号和连续矩形波(都有图)的傅立叶变换 。(Infineon笔试试题) 8、拉氏变换和傅立叶变换的表达式及联系。(新太硬件面题)
_________________________________________________________________________ DSP、嵌入式、软件等 1、请用方框图描述一个你熟悉的实用数字信号处理系统,并做简要的分析;如果没有, 也可以自己设计一个简单的数字信号处理系统,并描述其功能及用途。(仕兰微面试题 目) 2、数字滤波器的分类和结构特点。(仕兰微面试题目) 3、IIR,FIR滤波器的异同。(新太硬件面题) 4、拉氏变换与Z变换公式等类似东西,随便翻翻书把如.h(n)=-a*h(n-1)+b*δ(n) a.求h (n)的z变换;b.问该系统是否为稳定系统;c.写出FIR数字滤波器的差分方程;(未知) 5、DSP和通用处理器在结构上有什么不同,请简要画出你熟悉的一种DSP结构图。(信威 dsp软件面试题) 6、说说定点DSP和浮点DSP的定义(或者说出他们的区别)(信威dsp软件面试题) 7、说说你对循环寻址和位反序寻址的理解.(信威dsp软件面试题) 8、请写出【-8,7】的二进制补码,和二进制偏置码。用Q15表示出0.5和-0.5.(信威 dsp软件面试题) 9、DSP的结构(哈佛结构);(未知) 10、嵌入式处理器类型(如ARM),操作系统种类(Vxworks,ucos,winCE,linux),操作系 统方面偏CS方向了,在CS篇里面讲了;(未知) 11、有一个LDO芯片将用于对手机供电,需要你对他进行评估,你将如何设计你的测试项 目? 12、某程序在一个嵌入式系统(200M CPU,50M SDRAM)中已经最优化了,换到零一个系 统(300M CPU,50M SDRAM)中是否还需要优化? (Intel) 13、请简要描述HUFFMAN编码的基本原理及其基本的实现方法。(仕兰微面试题目) 14、说出OSI七层网络协议中的四层(任意四层)。(仕兰微面试题目) 15、A) (仕兰微面试题目) #i nclude void testf(int*p) { *p+=1; } main() { int *n,m[2]; n=m; m[0]=1; m[1]=8; testf(n); printf("Data value is %d ",*n); } ------------------------------ B) #i nclude void testf(int**p) { *p+=1; } main() {int *n,m[2]; n=m; m[0]=1; m[1]=8; testf(&n); printf(Data value is %d",*n); } 下面的结果是程序A还是程序B的? Data value is 8 那么另一段程序的结果是什么? 16、那种排序方法最快? (华为面试题) 17、写出两个排序算法,问哪个好?(威盛) 18、编一个简单的求n!的程序 。(Infineon笔试试题) 19、用一种编程语言写n!的算法。(威盛VIA 2003.11.06 上海笔试试题) 20、用C语言写一个递归算法求N!;(华为面试题) 21、给一个C的函数,关于字符串和数组,找出错误;(华为面试题) 22、防火墙是怎么实现的? (华为面试题) 23、你对哪方面编程熟悉?(华为面试题) 24、冒泡排序的原理。(新太硬件面题) 25、操作系统的功能。(新太硬件面题) 26、学过的计算机语言及开发的系统。(新太硬件面题) 27、一个农夫发现围成正方形的围栏比长方形的节省4个木桩但是面积一样.羊的数目和正 方形围栏的桩子的个数一样但是小于36,问有多少羊?(威盛) 28、C语言实现统计某个cell在某.v文件调用的次数(这个题目真bt) (威盛VIA 2003.11.06 上海笔试试题) 29、用C语言写一段控制手机中马达振子的驱动程序。(威胜) 30、用perl或TCL/Tk实现一段字符串识别和比较的程序。(未知) 31、给出一个堆栈的结构,求中断后显示结果,主要是考堆栈压入返回地址存放在低端地 址还是高端。(未知) 32、一些DOS命令,如显示文件,拷贝,删除。(未知) 33、设计一个类,使得该类任何形式的派生类无论怎么定义和实现,都无法产生任何对象 实例。(IBM) 34、What is pre-emption? (Intel) 35、What is the state of a process if a resource is not available? (Intel) 36、三个 float a,b,c;问值(a+b)+c==(b+a)+c, (a+b)+c==(a+c)+b。(Intel) 37、把一个链表反向填空。 (lucent) 38、x^4+a*x^3+x^2+c*x+d 最少需要做几次乘法? (Dephi)
____________________________________________________________________________ 主观题 1、你认为你从事研发工作有哪些特点?(仕兰微面试题目) 2、说出你的最大弱点及改进方法。(威盛VIA 2003.11.06 上海笔试试题) 3、说出你的理想。说出你想达到的目标。 题目是英文出的,要用英文回答。(威盛VIA 2003.11.06 上海笔试试题)
4、我们将研发人员分为若干研究方向,对协议和算法理解(主要应用在网络通信、图象 语音压缩方面)、电子系统方案的研究、用MCU、DSP编程实现电路功能、用ASIC设计技术 设计电路(包括MCU、DSP本身)、电路功能模块设计(包括模拟电路和数字电路)、集成 电路后端设计(主要是指综合及自动布局布线技术)、集成电路设计与工艺接口的研究。
你希望从事哪方面的研究?(可以选择多个方向。另外,已经从事过相关研发的人员可以详细描述你的研发经历)。(仕兰微面试题目)
5、请谈谈对一个系统设计的总体思路。针对这个思路,你觉得应该具备哪些方面的知 识?(仕兰微面试题目)
6、设想你将设计完成一个电子电路方案。请简述用EDA软件(如PROTEL)进行设计(包括 原理图和PCB图)到调试出样机的整个过程。在各环节应注意哪些问题?电源的稳定,电 容的选取,以及布局的大小。(汉王笔试)
共同的注意点
1.一般情况下,面试官主要根据你的简历提问,所以一定要对自己负责,把简历上的东西搞明白;
2.个别招聘针对性特别强,就招目前他们确的方向的人,这种情况下,就要投其所好,尽 量介绍其所关心的东西。
3.其实技术面试并不难,但是由于很多东西都忘掉了,才觉得有些难。所以最好在面试前 把该看的书看看。
4.虽然说技术面试是实力的较量与体现,但是不可否认,由于不用面试官/公司所专领域 及爱好不同,也有面试也有很大的偶然性,需要冷静对待。不能因为被拒,就否认自己或 责骂公司。
5.面试时要take it easy,对越是自己钟情的公司越要这样。
November 30
-- 工作效率和薪水加倍的7个秘诀 如果问“你想不想使自己的收入加倍”,我猜每个人的答案都是“YES”,如果我继续问:“你相不相信现在你的收入会加倍”,我想有一些人可能会没把握,有一些人认为不太可能,我告诉各位“你们每个人的收入一定会加倍”,因为按照每年物价增长率及通货膨胀的正常速度,20年后你的收入一定会加倍。 但是如果你希望,提前在5年内、3年内甚至1年内使你的收入加倍,你必须先使你的生产力加倍,然后收入加倍的美梦才可能成真。 如何使生产力加倍呢?美国职业生涯规划与时间管理专家Brian Tracy,集20年实务工作经验与研究,发现能使你生产力加倍的7个工作秘诀: 一、全心投入工作(work harder at what you do):当你工作时,一定要全心投入,不要浪费时间,不要把工作场所当成社交场合。光这个秘诀,如果你能长期实践,就能使你的生产力加倍。 二、工作步调快(work faster):养成一种紧迫感,一次专心做一件事,并且用最快的速度完成,之后,立刻进入下一件工作。养成这习惯后,你会惊讶地发现,一天所能完成的工作量居然是如此地惊人。 三、专注于高附加值的工作(work on higher-value activities):你要记住工作时数的多寡不见得与工作成果成正比。精明的老板或是上司关心的是你的工作数量及工作品质,工作时数并非重点。因此聪明的员工,会想办法找出对达成工作目标及绩效标准有帮助的活动,然后投入最多时间与心力在这些事情上面。投入的时间愈多,每分钟的生产力就愈高,工作绩效也就提高,自然赢得老板及上司的赏识与重用,加薪与升迁在望。 四、熟练工作(do things you are better at):你找出最有价值的工作项目后,接着要想办法,通过不断学习、应用、练习,熟练所有工作流程与技巧,累积工作经验(一句话解决KNOW HOW的问题)。你的工作愈纯熟,工作所需的时间就愈短;你的技能愈熟练,生产力就提升得愈快。 五、集中处理(bunch your tasks):一个有技巧的工作人,会把许多性质相近的工作或是活动,例如,收发E-MAIL、写信、填写工作报表、填写备忘录等等,集中在同一个时段来处理,这样会比一件一件分开在不同时段处理,节省一半以上的时间,同时也能提高效率与效能。 六、简化工作(simplify your work):尽量简化工作流程,将许多分开的工作步骤加以整合,变成单一任务,以减少工作的复杂度,另外,运用授权或是外包的方式,避免把时间花费在低价值的工作上。 七、比别人工作时间长一些(work longer hours):早一点起床,早点去上班,避开交通高峰;中午晚一点出去用餐,继续工作,避开排队用餐的人潮;晚上稍微留晚一些,直到交通高峰时间已过,再下班回家。如此一天可以比一般人多出2至3个小时的工作时间,而且不会影响正常的生活步调。善用这些多出来的时间,可以使你的生产力加倍,进而使你的收入加倍。一个成功的人,通常是一个行动派的人,一旦懂得提升生产力的方法,就会将这7个小秘诀,默记在心,不断地应用、练习,直到成为工作、生活的习惯为止。只要养成这个习惯,你的生产力一定会提高,收入也会加倍。 November 18 电子技术自立学习法 电子技术自立学习法(转) 人的一生中使用自立学习法的时间最长,自己看书、自己动手就是自立学习法。 1.具备基本条件事半功倍 为了高效率运用自立学习法进行电子技术的学习,应该具备下列一些基本条件: ①自主学习的信心和精神非常重要,这种学习过程中要时刻牢记靠“两条腿走路”的基本方针,学习中遇到的困难首先要靠自己的勤奋思考来克服、解决,学习中动不动问别人不可取,不利于养成“独立自主”的精神。 ②要有自学的基本能力。自立学习过程中,由于主要靠自学,所以掌握一些自学的方法和读书技巧显得相当重要。各门学科,甚至是同一门学科的不同章节内容都有不同的高效学习方法,自立学习过程中不断总结自己的学习心得和经验,寻找、调整适合自己的学习方法、技巧,力求做到事半功倍。 ③由于自立学习的特殊性,学习过程中找一本合适的教材显得很重要,最好选用那些自学读本,这类书在内容选取、写作方式等方面考虑了自学的基本要求,通常内容系统、层次分明,难度适中,解说详细。 2.特点 自立学习法具有下列一些特点: ①学习的主动性强,不受时间条件的制约,能自主选择学习时间。 ②有利于培养自己学习的“造血”能力,大量的知识更新、系统接受知识都是通过自立学习方式完成的。 ③对于某一专题知识可以采用这种学习方式,在一段时间内通过集中精力强化这一个专题知识的学习,达到短时间内掌握这部分知识的目的。 3.注意事项 自立学习法主要注意下列几点: ①注意教材的选择,在选择主教材的同时,最好能够选择一、二本与之相近的辅助教材,作为阅读中的参考教材。不同的作者对问题的讲述有不同的方式,参考教材能帮助读者更容易理解。 ②注意随时总结自己的学习方法,不断改良学习技巧,为以后的自立学习减轻学习负担。 ③遇到学习中困难时动不动问别人是一个缺点,它所造成的问题是所接受知识的记忆深度不够,久而久之就养成了“拿来主义”,不动脑筋,不学会思考,对今后的学习有害无益。 4.适用范围 关于自立学习法适用范围主要说明下列几点: ①自立学习法适用于所有的人,特别适用于没有条件进行系统听课的人群,很适合大学毕业刚刚进入工作岗位的大学生。 ②适用于自己的知识不断更新学习。 ③大学电子技术类教材的特点是强调基础理论,侧重于电路的设计、计算,纯理论性内容占据主导地位,所以教材中的计算公式、证明比较多,它适合于培养学生电路设计的能力。不足之处是由于教材审定方面的原因,教材修订比较慢,与实际电路脱离情况较多,与实用电子电器中的电路差别比较大,往往电子技术考上90多分也不能看懂收音机的整机电路图,这种现象很正常。 ④市场上大量出版的电子类图书与大学电子技术教材有一个明显不同之处,它理论与实际联系紧密,基本上是以市场中各类电子电器中的电路为基础,联系实用电路,书中计算公式较少,侧重于电路的工作原理分析,即电路识图,所以实用性比较强,是一种培养读者电路分析能力和大量熟悉各类实用电路的图书。 ⑤对于电子类在校或刚毕业的大学生而言,在校掌握了扎实的基础理论知识、电路设计和计算能力后,再通过自立学习实用的电子电器方面图书后,其电路识图能力被运用到电路设计之中,使之设计思路开阔、设计能力倍增,必定为工作、学习提供厚实的基础,而创新能力、理论联系实际能力也得到质的飞跃。 大学生应该学习单片机什么知识(转载)
有不少的在校的大学生写信给我,问在学校里应该学习什么电子知识.就业形势越来越严峻,不光是在中国,全球都一样,全球经济的发展速度放慢,至少会持续几年的时间.半导体产业目前进入低潮,很多公司裁员和亏损.但是技术还是在不断进步,摩尔定律还在起作用,半导体产品的集成度,速度,价格都按摩尔定律在发展.在大学里只是混混日子的大学生不少,但也有一些比较努力的学生,想掌握更多的知识, 希望能够在毕业之后找到好的工作,或者想创造一番事业,对于这些学生,我是赞赏的.我相信一分辛劳一分收获,你的努力是不会白费的.这个世界是适者生存,不适者淘汰的社会.像华为公司,进进出出的人不计其数,能适应的,留,不适应的,走. 有网友问我,你在大学里是怎么度过的?我是一个对电子有浓厚兴趣的人,在高中的时候就开始抓电烙铁,把家里的电器搞的乱七八糟(拆了,就不知道怎么装回去,当然现在不会这样了). 在大学里,我对电子很感兴趣,自己也买一些器件(我在广州中山大学读书,广州是一个很好的市场,元器件容易买,不管是旧的,还是新的,开始的时候,自己兜里没有多少钱,就买一些旧的元器件),然后自己组装音响,一开始问题真是多,搞了一个学期才搞定,由于问题多,所以经常到图书馆去查资料,去书店看(没有钱买书的时候就抄一段回来),学到很多模拟电路方面的知识.后来就组装逆变器(学校里晚上要关灯,没有电),逆变器可以在关灯了的时候提供电,别的宿舍都停电了,我宿舍就不会停(有逆变器供电),一到关了灯,同学们都跑到我们宿舍来聊天(别的宿舍都一片黑),也是其乐熔融,还有半夜三更看球赛.还组装了CD,VCD,录像机,我们宿舍成为了娱乐中心,可以卡拉OK,可以看电视,看录像,整个物理系,就我们宿舍是最齐全的娱乐设施.也不知道看过多少张VCD,很多同学是广州,从家里拿来好多VCD(还有一些同学的老爸是抓走私的,收缴了好多VCD,也拿过来看),每到下午6点,就开始放VCD,很多人看. 通过这些组装,学习了很多关于模拟电路和数字电路方面的知识,虽然我别的课程学的不好,但是电路的课程是一流的. 单片机和fpga方面的知识,在大学学的不多,因为学校的东西太落后,都是到公司才学的. 我认为对于搞电子来说,兴趣是最好的老师,如果你没有兴趣,那么最好不要选择电子的专业,因为毕竟有些时候比较累(一个小问题也可能折腾半天),很多时候理论上可以,实践上就不通. 闲话少说,还是讲讲应该掌握哪些东西吧.电子方面的知识很多,比电脑的知识要多不知道多少倍,学习电脑的,只要掌握几门语言就可以了,而搞电子的,需要的知识要全面很多,比如模拟电路,数字电路,单片机,电路制版等......由于电子知识太多,所以一般搞硬件的公司都比较多的员工,分工合作也比较细.因为一个人的能力有限,不可能掌握所有的知识.比如一些人专门设计外壳,一些人专门设计电路板,一些人专门搞出厂测试,一些人专门编写程序,一些人专门从事逻辑设计,一些人专门搞高频无线...... 有人问我,你现在想转行吗?我的回答是不会,因为不管你做什么,你学而不精,还是无用武之地.电子行业需要干一行专一行,而不是学一行丢一行. 我在单片机,CPLD方面有了比较好的基础, 从事这方面的设计会得心应手,如果你改而从事别的设计,比如设计外壳,将一切从头开始. 所以在大学里,必须掌握一些基础知识(这是必要的,毕竟你还不知道毕业后将干什么工作),基础知识主要有模拟电路和数字电路以及高等数学知识(必修课).然后重点学习一些别的知识,比如单片机,FPGA,PCB设计,DSP(这些都是选修课),不要什么都学,自己感兴趣的,有条件的学一学. 有些人的求职简历写着学了什么什么,罗列一大堆,我认为这种人是吹牛,或者是学而不精.每个领域,要想精通,不要说一年两年,可能10年8年,都有的学.如果我去招聘,我反而看重简历里学的知识不是很杂,但有所精通的人.这些人一般有比较多的实践经验.实践比理论要重要的多,对于搞电子的来说.特别是高频,理论通,实践往往不通,但是实践通的,理论上又难于解析. 对于单片机来说,主要学习一下51单片机,尽管有了一些别的单片机,比如AVR,PIC,MSP430,ST,MOTOROLA等,但是51用的企业还是最多的,搞电子的厂家,不用51的,是少数.对于求职,你懂51的话,很多公司都可以去.但是别的单片机,如果对方根本不用,那么他就不会考虑招你进去. 当然对别的单片机进行一些了解,当然是可以的,但重点还是在51上.主要51的开发工具比较成熟,而且供货商相当多,根本不用考虑货源问题.51是开放的内核,多厂家生产,而别的内核都不是开放的,独家生产. 学习51,主要以Keil C51为主,来学习,因为Keil C51是世界上最好的(个人认为)的编译器,懂keil的人也很多,技术支持完备.要以Keil C51 V6.xx版本为基础学习,不要用DOS版或Keil C51 V5.xx,这些版本几乎已经淘汰,只有一些仿真机厂家才当作宝贝,嵌入低版本的编译器,这种做法始终是落后的.目前专门描述Keil C51 V6.xx的书还没有,为了帮助大家学习,与时代同步,我写了一些教程,给大家参考.有时间再看一些别的单片机的资料. PCB制版,可以学习Protel99,介绍Protel99的书很多,也很容易买到,电路制版需要学习的时间不需要很多,可以掌握一下,有条件的最好自己实际去制作一下电路板. CPLD,FPGA是可编程逻辑电路,这个很有必要花功夫学习,目前一些企业的技术还是比较落后,还经常使用8155,8237,138等一些老掉牙的芯片.没有办法,学校里学习的都是这些.用gal,CPLD已经可以完全代替这些电路.而且成本还便宜.一些网友发给我的电路我一看就头晕,一堆的74hc00,74hc04,4069,373,138等,板子很大,为何不用一块GAL,或CPLD搞定? 用这些芯片,不但电路布线复杂,容易出问题,而且影响成品率,容易被人复制.要制造更为复杂的逻辑,那就非CPLD,FPGA莫属了.CPLD的设计主要有Xilinx和Altera两个公司的.可以学习其中的一种.这些开发板,一般都可以买到,不少人制作和销售.我的网站将主要以Altera的为主,因为软件是免费的,我的网站有下载,芯片也容易买. 学习的时候主要以图形设计为主,用语言设计毕竟还比较抽象,有时间就可以加深一下,学习一下VHDL语言. DSP知识,需要学习的人有比较好的数学基础,如果你的数学很好,可以选修一下.DSP设计的门槛比较高,开发工具也比较贵,高校设立dsp课程的也比较少,一般的学校都没有条件去学,有条件学习的,学一下,没有条件的,就不学也罢. 其他知识,比如高频电路,外壳设计(AutoCAD),属于专业性比较强的知识,学习该专业的可以学一下,不是该专业的,可以不学. 总结: 1.学习模拟电路和数字电路,高等数学等基础知识 2.必修单片机,PCB电路板设计 3.选修CPLD,DSP,高频电路,外壳设计等. 4.能力强的学多一些,能力小的,学少一些. 5.注重实践,多动手,理论要联系实际. 这就是我的看法,希望批评指正. November 09 从电路来说,总是存在驱动的源和被驱动的负载。如果负载电容比较大,驱动电路要把电容充电、放电,才能完成信号的跳变,在上升沿比较陡峭的时候,电流比较大,这样驱动的电流就会吸收很大的电源电流,由于电路中的电感,电阻(特别是芯片管脚上的电感,会产生反弹),这种电流相对于正常情况来说实际上就是一种噪声,会影响前级的正常工作。这就是耦合。去藕电容就是起到一个电池的作用,满足驱动电路电流的变化,避免相互间的耦合干扰。旁路电容实际也是去藕合的,只是旁路电容一般是指高频旁路,也就是给高频的开关噪声提高一条低阻抗泄防途径。高频旁路电容一般比较小,根据谐振频率一般是0.1u,0.01u等,而去耦合电容一般比较大,是10u或者更大,依据电路中分布参数,以及驱动电流的变化大小来确定。 旁路是把输入信号中的干扰作为滤除对象,而去耦是把输出信号的干扰作为滤除对象,防止干扰信号返回电源。这应该是他们的本质区别。(转) 去耦电容在集成电路电源和地之间的有两个作用:一方面是本集成电路的蓄能电容,另一方面旁路掉该器件的高频噪声。数字电路中典型的去耦电容值是0.1μF。这个电容的分布电感的典型值是5μH。0.1μF的去耦电容有5μH的分布电感,它的并行共振频率大约在7MHz左右,也就是说,对于10MHz以下的噪声有较好的去耦效果,对40MHz以上的噪声几乎不起作用。1μF、10μF的电容,并行共振频率在20MHz以上,去除高频噪声的效果要好一些。每10片左右集成电路要加一片充放电电容,或1个蓄能电容,可选10μF左右。最好不用电解电容,电解电容是两层薄膜卷起来的,这种卷起来的结构在高频时表现为电感。要使用钽电容或聚碳酸酯电容。去耦电容的选用并不严格,可按C=1/F,即10MHz取0.1μF,100MHz取0.01μF。 分布电容是指由非形态电容形成的一种分布参数。一般是指在印制板或其他形态的电路形式,在线与线之间、印制板的上下层之间形成的电容。这种电容的容量很小,但可能对电路形成一定的影响。在对印制板进行设计时一定要充分考虑这种影响,尤其是在工作频率很高的时候。也成为寄生电容,制造时一定会产生,只是大小的问题。布高速PCB时,过孔可以减少板层电容,但会增加电感。 分布电感是指在频率提高时,因导体自感而造成的阻抗增加. 电容器选用及使用注意事项: 1,一般在低频耦合或旁路,电气特性要求较低时,可选用纸介、涤纶电容器;在高频高压电路中,应选用云母电容器或瓷介电容器;在电源滤波和退耦电路中,可选用电解电容器。 2,在振荡电路、延时电路、音调电路中,电容器容量应尽可能与计算值一致。在各种滤波及网(选频网络),电容器容量要求精确;在退耦电路、低频耦合电路中,对同两级精度的要求不太严格。 3,电容器额定电压应高于实际工作电压,并要有足够的余地,一般选用耐压值为实际工作电压两倍以上的电容器。 4,优先选用绝缘电阻高,损耗小的电容器,还要注意使用环境。
一、电阻 电阻在电路中用“R”加数字表示,如:R1表示编号为1的电阻。电阻在电路中的主要作用为 分流、限流、分压、偏置等。 1、参数识别:电阻的单位为欧姆(Ω),倍率单位有:千欧(KΩ),兆欧(MΩ)等。换算 方法是:1兆欧=1000千欧=1000000欧 电阻的参数标注方法有3种,即直标法、色标法和数标法。 a、数标法主要用于贴片等小体积的电路,如: 472 表示 47×100Ω(即4.7K); 104则表示100K b、色环标注法使用最多,现举例如下: 四色环电阻 五色环电阻(精密电阻) 2、电阻的色标位置和倍率关系如下表所示: 颜色 有效数字 倍率 允许偏差(%) 银色 / x0.01 ±10 金色 / x0.1 ±5 黑色 0 +0 / 棕色 1 x10 ±1 红色 2 x100 ±2 橙色 3 x1000 / 黄色 4 x10000 / 绿色 5 x100000 ±0.5 蓝色 6 x1000000 ±0.2 紫色 7 x10000000 ±0.1 灰色 8 x100000000 / 白色 9 x1000000000 / 二、电容 1、电容在电路中一般用“C”加数字表示(如C13表示编号为13的电容)。电容是由两片金 属膜紧靠,中间用绝缘材料隔开而组成的元件。电容的特性主要是隔直流通交流。 电容容量的大小就是表示能贮存电能的大小,电容对交流信号的阻碍作用称为容抗,它与交 流信号的频率和电容量有关。 容抗XC=1/2πf c (f表示交流信号的频率,C表示电容容量) 电话机中常用电容的种类有电解电容、瓷片电容、贴片电容、独石电容、钽电容和涤纶电容 等。 2、识别方法:电容的识别方法与电阻的识别方法基本相同,分直标法、色标法和数标法3 种。电容的基本单位用法拉(F)表示,其它单位还有:毫法(mF)、微法(uF)、纳法 (nF)、皮法(pF)。 其中:1法拉=103毫法=106微法=109纳法=1012皮法 容量大的电容其容量值在电容上直接标明,如10 uF/16V 容量小的电容其容量值在电容上用字母表示或数字表示 字母表示法:1m=1000 uF 1P2=1.2PF 1n=1000PF 数字表示法:一般用三位数字表示容量大小,前两位表示有效数字,第三位数字是倍率。 如:102表示10×102PF=1000PF 224表示22×104PF=0.22 uF 3、电容容量误差表 符 号 F G J K L M 允许误差 ±1% ±2% ±5% ±10% ±15% ±20% 如:一瓷片电容为104J表示容量为0. 1 uF、误差为±5%。 三、晶体二极管 晶体二极管在电路中常用“D”加数字表示,如: D5表示编号为5的二极管。 1、作用:二极管的主要特性是单向导电性,也就是在正向电压的作用下,导通电阻很小; 而在反向电压作用下导通电阻极大或无穷大。正因为二极管具有上述特性,无绳电话机中常 把它用在整流、隔离、稳压、极性保护、编码控制、调频调制和静噪等电路中。 电话机里使用的晶体二极管按作用可分为:整流二极管(如1N4004)、隔离二极管(如 1N4148)、肖特基二极管(如BAT85)、发光二极管、稳压二极管等。 2、识别方法:二极管的识别很简单,小功率二极管的N极(负极),在二极管外表大多采用 一种色圈标出来,有些二极管也用二极管专用符号来表示P极(正极)或N极(负极),也有 采用符号标志为“P”、“N”来确定二极管极性的。发光二极管的正负极可从引脚长短来识 别,长脚为正,短脚为负。 3、测试注意事项:用数字式万用表去测二极管时,红表笔接二极管的正极,黑表笔接二极 管的负极,此时测得的阻值才是二极管的正向导通阻值,这与指针式万用表的表笔接法刚好 相反。 4、常用的1N4000系列二极管耐压比较如下: 型号 1N4001 1N4002 1N4003 1N4004 1N4005 1N4006 1N4007 耐压(V) 50 100 200 400 600 800 1000 电流(A) 均为1 四、稳压二极管 稳压二极管在电路中常用“ZD”加数字表示,如:ZD5表示编号为5的稳压管。 1、稳压二极管的稳压原理:稳压二极管的特点就是击穿后,其两端的电压基本保持不变。 这样,当把稳压管接入电路以后,若由于电源电压发生波动,或其它原因造成电路中各点电 压变动时,负载两端的电压将基本保持不变。 2、故障特点:稳压二极管的故障主要表现在开路、短路和稳压值不稳定。在这3种故障中, 前一种故障表现出电源电压升高;后2种故障表现为电源电压变低到零伏或输出不稳定。 常用稳压二极管的型号及稳压值如下表: 型 号 1N4728 1N4729 1N4730 1N4732 1N4733 1N4734 1N4735 1N4744 1N4750 1N4751 1N4761 稳压值 3.3V 3.6V 3.9V 4.7V 5.1V 5.6V 6.2V 15V 27V 30V 75V 五、电感 电感在电路中常用“L”加数字表示,如:L6表示编号为6的电感。 电感线圈是将绝缘的导线在绝缘的骨架上绕一定的圈数制成。 直流可通过线圈,直流电阻就是导线本身的电阻,压降很小;当交流信号通过线圈时,线圈 两端将会产生自感电动势,自感电动势的方向与外加电压的方向相反,阻碍交流的通过,所 以电感的特性是通直流阻交流,频率越高,线圈阻抗越大。电感在电路中可与电容组成振荡 电路。 电感一般有直标法和色标法,色标法与电阻类似。如:棕、黑、金、金表示1uH(误差5%) 的电感。 电感的基本单位为:亨(H) 换算单位有:1H=103mH=106uH。 六、变容二极管 变容二极管是根据普通二极管内部 “PN结” 的结电容能随外加反向电压的变化而变化这一 原理专门设计出来的一种特殊二极管。 变容二极管在无绳电话机中主要用在手机或座机的高频调制电路上,实现低频信号调制到高 频信号上,并发射出去。在工作状态,变容二极管调制电压一般加到负极上,使变容二极管 的内部结电容容量随调制电压的变化而变化。 变容二极管发生故障,主要表现为漏电或性能变差: (1)发生漏电现象时,高频调制电路将不工作或调制性能变差。 (2)变容性能变差时,高频调制电路的工作不稳定,使调制后的高频信号发送到对方被对 方接收后产生失真。 出现上述情况之一时,就应该更换同型号的变容二极管。 七、晶体三极管 晶体三极管在电路中常用“Q”加数字表示,如:Q17表示编号为17的三极管。 1、特点:晶体三极管(简称三极管)是内部含有2个PN结,并且具有放大能力的特殊器件。 它分NPN型和PNP型两种类型,这两种类型的三极管从工作特性上可互相弥补,所谓OTL电路 中的对管就是由PNP型和NPN型配对使用。 电话机中常用的PNP型三极管有:A92、9015等型号;NPN型三极管有:A42、9014、9018、 9013、9012等型号。 2、晶体三极管主要用于放大电路中起放大作用,在常见电路中有三种接法。为了便于比 较,将晶体管三种接法电路所具有的特点列于下表,供大家参考。 名称 共发射极电路 共集电极电路(射极输出器) 共基极电路 输入阻抗 中(几百欧~几千欧) 大(几十千欧以上) 小(几欧~几十欧) 输出阻抗 中(几千欧~几十千欧) 小(几欧~几十欧) 大(几十千欧~几百千欧) 电压放大倍数 大 小(小于1并接近于1) 大 电流放大倍数 大(几十) 大(几十) 小(小于1并接近于1) 功率放大倍数 大(约30~40分贝) 小(约10分贝) 中(约15~20分贝) 频率特性 高频差 好 好 续表 应用 多级放大器中间级,低频放大 输入级、输出级或作阻抗匹配用 高频或宽频带电路及 恒流源电路 八、场效应晶体管放大器 1、场效应晶体管具有较高输入阻抗和低噪声等优点,因而也被广泛应用于各种电子设备 中。尤其用场效管做整个电子设备的输入级,可以获得一般晶体管很难达到的性能。 2、场效应管分成结型和绝缘栅型两大类,其控制原理都是一样的。如图1-1-1是两种型号的 表示符号: 3、场效应管与晶体管的比较 (1)场效应管是电压控制元件,而晶体管是电流控制元件。在只允许从信号源取较少电流 的情况下,应选用场效应管;而在信号电压较低,又允许从信号源取较多电流的条件下,应 选用晶体管。 (2)场效应管是利用多数载流子导电,所以称之为单极型器件,而晶体管是即有多数载流 子,也利用少数载流子导电。被称之为双极型器件。 (3)有些场效应管的源极和漏极可以互换使用,栅压也可正可负,灵活性比晶体管好。
(4)场效应管能在很小电流和很低电压的条件下工作,而且它的制造工艺可以很方便地把 很多场效应管集成在一块硅片上,因此场效应管在大规模集成电路中得到了广泛的应用。
曾几何时?单片机一统天下!随着新技术的不断涌现,c51日益受到挑战,作为业内人士, 不知谁可预知它的前途?
计算机系统的发展已明显地朝三个方向发展;这三个方向就是:巨型化,单片化,网络化。以解决复杂系统计算和高速数据处理的仍然是巨型机在起作用,故而,巨型机在目前在朝高速及处理能力的方向努力。单片机在出现时,Intel公司就给其单片机取名为嵌入式微控制器(embeddedmicrocontroller)。单片机的最明显的优势,就是可以嵌入到各种仪器、设备中。这一点是巨型机和网络不可能做到的。 容 计算机系统的发展已明显地朝三个方向发展;这三个方向就是:巨型化,单片化,网络化。以解决复杂系统计算和高速数据处理的仍然是巨型机在起作用,故而,巨型机在目前在朝高速及处理能力的方向努力。单片机在出现时,Intel公司就给其单片机取名为嵌入式微控制器(embeddedmicrocontroller)。单片机的最明显的优势,就是可以嵌入到各种仪器、设备中。这一点是巨型机和网络不可能做到的。 在本文,介绍单片机的最新技术进步,包括数字单片机的工艺及技术,模糊单片机的工艺及技术,单片机的可靠性技术,以及以单片机为核心的嵌入式系统。
数字单片机的技术发展 数字单片机的技术进步反映在内部结构、功率消耗、外部电压等级以及制造工艺上。在这几方面,较为典型地说明了数字单片机的水平。在目前,用户对单片机的需要越来越多,但是,要求也越来越高。下面分别就这四个方面说明单片机的技术进步状况。
1、内部结构的进步 单片机在内部已集成了越来越多的部件,这些部件包括一般常用的电路,例如:定时器,比较器,A/D转换器,D/A转换器,串行通信接口,Watchdog电路,LCD控制器等。 有的单片机为了构成控制网络或形成局部网,内部含有局部网络控制模块CAN。例如,Infineon公司的C505C,C515C,C167CR,C167CS-32FM,81C90;Motorola公司的68HC08AZ系列等。特别是在单片机C167CS-32FM中,内部还含有2个CAN。因此,这类单片机十分容易构成网络。特别是在控制,系统较为复杂时,构成一个控制网络十分有用。 为了能在变频控制中方便使用单片机,形成最具经济效益的嵌入式控制系统。有的单片机内部设置了专门用于变频控制的脉宽调制控制电路,这些单片机有Fujitsu公司的MB89850系列、MB89860系列;Motorola公司的MC68HC08MR16、MR24等。在这些单片机中,脉宽调制电路有6个通道输出,可产生三相脉宽调制交流电压,并内部含死区控制等功能。 特别引人注目的是:现在有的单片机已采用所谓的三核(TnCore)结构。这是一种建立在系统级芯片(Systemonachip)概念上的结构。这种单片机由三个核组成:一个是微控制器和DSP核,一个是数据和程序存储器核,最后一个是外围专用集成电路(ASIC)。这种单片机的最大特点在于把DSP和微控制器同时做在一个片上。虽然从结构定义上讲,DSP是单片机的一种类型,但其作用主要反映在高速计算和特殊处理如快速傅立叶变换等上面。把它和传统单片机结合集成大大提高了单片机的功能。这是目前单片机最大的进步之一。这种单片机最典型的有Infineon公司的TC10GP;Hitachi公司的SH7410,SH7612等。这些单片机都是高档单片机,MCU都是32位的,而DSP采用16或32位结构,工作频率一般在60MHz以上。
2、功耗、封装及电源电压的进步 现在新的单片机的功耗越来越小,特别是很多单片机都设置了多种工作方式,这些工作方式包括等待,暂停,睡眠,空闲,节电等工作方式。Philips公司的单片机P87LPC762是一个很典型的例子,在空闲时,其功耗为1.5mA,而在节电方式中,其功耗只有0.5mA。而在功耗上最令人惊叹的是TI公司的单片机MSP430系列,它是一个16位的系列,有超低功耗工作方式。它的低功耗方式有LPM1、LPM3、LPM4三种。当电源为3V时,如果工作于LMP1方式,即使外围电路处于活动,由于CPU不活动,振荡器处于1~4MHz,这时功耗只有50μA。在LPM3时,振荡器处于32kHz,这时功耗只有1.3μA。在LPM4时,CPU、外围及振荡器32kHz都不活动,则功耗只有0.1μA。 现在单片机的封装水平已大大提高,随着贴片工艺的出现,单片机也大量采用了各种合符贴片工艺的封装方式出现,以大量减少体积。在这种形势中,Microchip公司推出的8引脚的单片机特别引人注目。这是PIC12CXXX系列。它含有0.5~2K程序存储器,25~128字节数据存储器,6个I/O端口以及一个定时器,有的还含4道A/D,完全可以满足一些低档系统的应用。扩大电源电压范围以及在较低电压下仍然能工作是今天单片机发展的目标之一。目前,一般单片机都可以在3.3~5.5V的条件下工作。而一些厂家,则生产出可以在2.2~6V的条件下工作的单片机。这些单片机有Fujitsu公司的MB89191-89195,MB89121-125A,MB89130系列等,应该说该公司的F2MC-8L系列单片机绝大多数都满足2.2-6V的工作电压条件。而TI公司的MSP430X11X系列的工作电压也是低达2.2V的。
3、工艺上的进步 现在的单片机基本上采用CMOS技术,但已经大多数采用了0.6μm以上的光刻工艺,有个别的公司,如Motorola公司则已采用0.35μm甚至是0.25μm技术。这些技术的进步大大地提高了单片机的内部密度和可靠性。
以单片机为核心的嵌入式系统 单片机的另外一个名称就是嵌入式微控制器,原因在于它可以嵌入到任何微型或小型仪器或设备中。目前,把单片机嵌入式系统和Internet连接已是一种趋势。但是,Internet一向是一种采用肥服务器,瘦用户机的技术。这种技术在互联上存储及访问大量数据是合适的,但对于控制嵌入式器件就成了“杀鸡用牛刀”了。要实现嵌入式设备和Internet连接,就需要把传统的Internet理论和嵌入式设备的实践都颠倒过来。为了使复杂的或简单的嵌入式设备,例如单片机控制的机床、单片机控制的门锁,能切实可行地和Internet连接,就要求专门为嵌入式微控制器设备设计网络服务器,使嵌入式设备可以和Internet相连,并通过标准网络浏览器进行过程控制。 目前,为了把单片机为核心的嵌入式系统和Internet相连,已有多家公司在进行这方面的较多研究。这方面较为典型的有emWare公司和TASKING公司。 EmWare公司提出嵌入式系统入网的方案——EMIT技术。这个技术包括三个主要部分:即emMicro,emGateway和网络浏览器。其中,emMicro是嵌入设备中的一个只占内存容量1K字节的极小的网络服务器;emGateway作为一个功能较强的用户或服务器,它用于实现对多个嵌入式设备的管理,还有标准的Internet通信接入以及网络浏览器的支持。网络浏览器使用emObjicts进行显示和嵌入式设备之间的数据传输。 如果嵌入式设备的资源足够,则emMicro和emGateway可以同时装入嵌入式设备中,实现Internet的直接接入。否则,将要求emGateway和网络浏览器相互配合。 EmWare的EMIT软件技术使用标准的Internet协议对8位和16位嵌入式设备进行管理,但比传统上的开销小得多。 目前,单片机应用中提出了一个新的问题:这就是如何使8位、16位单片机控制的产品,也即嵌入式产品或设备能实现和互联网互连? TASKING公司目前正在为解决这个问题提供了途径。该公司已把emWare的EMIT软件包和有关的软件配套集成,形成一个集成开发环境,向用户提供开发方便。嵌入互联网联盟ETI(embedtheInternetConsortium)正在紧密合作,共同开发嵌入式Internet的解决方案。在不久将会有成果公布。
单片机应用的可靠性技术发展 在单片机应用中,可靠性是首要因素为了扩大单片机的应用范围和领域,提高单片机自身的可靠性是一种有效方法。近年来,单片机的生产厂家在单片机设计上采用了各种提高可靠性的新技术,这些新技术表现在如下几点:
1、EFT(EllectricalFastTransient)技术 EFT技术是一种抗干扰技术,它是指在振荡电路的正弦信号受到外界干扰时,其波形上会迭加各种毛刺信号,如果使用施密特电路对其整形,则毛刺会成为触发信号干扰正常的时钟,在交替使用施密特电路和RC滤波电路时,就可以消除这些毛否则令其作用失效,从而保证系统的时钟信号正常工作。这样,就提高了单片机工作的可靠性。Motorola公司的MC68HC08系列单片机就采用了这种技术。
2、低噪声布线技术及驱动技术 在传统的单片机中,电源及地线是在集成电路外壳的对称引脚上,一般是在左上、右下或右上、左下的两对对称点上。这样,就使电源噪声穿过整块芯片,对单片机的内部电路造成干扰。现在,很多单片机都把地和电源引脚安排在两条相邻的引脚上。这样,不仅降低了穿过整个芯片的电流,另外还在印制电路板上容易布置去耦电容,从而降低系统的噪声。现在为了适应各种应用的需要,很多单片机的输出能力都有了很大提高,Motorola公司的单片机I/O口的灌拉电流可达8mA以上,而Microchip公司的单片机可达25mA。其它公司:AMD,Fujitsu,NEC,Infineon,Hitachi,Ateml,Tosbiba等基本上可达8~20mA的水平。这些电流较大的驱动电路集成到芯片内部在工作时带来了各种噪声,为了减少这种影响,现在单片机采用多个小管子并联等效一个大管子的方法,并在每个小管子的输出端串上不同等效阻值的电阻,以降低di/dt,这也就是所谓“跳变沿软化技术”,从而消除大电流瞬变时产生的噪声。
3、采用低频时钟 高频外时钟是噪声源之一,不仅能对单片机应用系统产生干扰,还会对外界电路产生干扰,令电磁兼容性不能满足要求。对于要求可靠性较高的系统,低频外时钟有利于降低系统的噪声。在一些单片机中采用内部琐相环技术,则在外部时钟较低时,也能产生较高的内部总线速度,从而保证了速度又降低了噪声。Motorola公司的MC68HC08系列及其16/32位单片机就采用了这种技术以提高可靠性
结束语 单片机在目前的发展形势下,表现出几大趋势: * 可靠性及应用越来越水平高和互联网连接已是一种明显的走向。 * 所集成的部件越来越多;NS(美国国家半导体)公司的单片机已把语音、图象部件也集成到单片机中,也就是说,单片机的意义只是在于单片集成电路,而不在于其功能了;如果从功能上讲它可以讲是万用机。原因是其内部已集成上各种应用电路。 * 功耗越来越低。 * 和模拟电路结合越来越多。 随着半导体工艺技术的发展及系统设计水平的提高,单片机还会不断产生新的变化和进步,最终人们可能发现:单片机与微机系统之间的距离越来越小,甚至难以辨认。
November 08
准备以下的工具
1、烙铁(质量好点)
2、焊锡(细)
3、烙铁架(带一个专用海绵)
4、松香块
5、万用表(要有带响的,听听红黑表笔短接时的声音出来快不快)
元器件
1、PCB面包板1块
2、40pin 插座 1个
3、11.0592M晶振1个
4、30P瓷片电容2个
5、电解电容:22u 1个, 2.2K电阻1个(阻容复位电路),电容还可以大一点,差不多就行,电阻不能太大。
6、8个LED,在P1挂8个LED
7、电阻排1K 1个到VCC,做LED的限流
8、找来ISP下载线的图纸,自己做一个,很容易,mcuw有一个我发的下载器的做法
9、买一个ATMEL的89S52,ISP下载,OK了。
10、max232,有时间再焊接一个16pin的插座上去,插一片max232或者兼容的芯片,接到串口,跟计算机通讯。
11、atmega8512跟8031管脚基本兼容,还可以学习avr单片机
以上的投资加起来,不会超出100元。
资料在网络上有,使用百度搜索,试试看,百度一下
比如:在百度输入 max232 pdf,看看你能找到什么?
程序,asm还是C,都能在网络上找到。
建议一开始使用asm,很容易。
序号 型号 封装 单位 数量 单价 总价 备注 1 STC89C51RC DIP40 片 1 6.8 6.8 2 MAX232 DIP16 片 1 3.2 3.2 3 普通插座 DIP40 个 1 0.8 0.8 4 DIP16 个 1 0.3 0.3 5 晶振11.0592M RAD0.2 个 1 1 1 6 DB9座 针 个 1 2 2 7 红色 LED 个 11 0.1 1.1 8 电解电容100U/25V ELEC2 个 1 0.1 0.1 9 独石电容0.1u SIP2 个 6 0.1 0.6 10 瓷片电容20P SIP2 个 2 0.01 0.02 11 排电阻1K,9腿 SIP9 个 1 0.5 0.5 13 电阻 10K AXIAL0.3 个 1 0.01 0.01 14 电路板 块 1 5 5 15 万用表 块 1 40 40 16 烙铁 个 1 20 20 17 焊锡 个 1 5 5 18 松香 块 1 2 2 19 串口线 根 1 5 5 可以自己焊接 20 插针等 项 1 3 3 其它电阻电容等 合计 82.33
STC的单片机可以串口下载。 解释一下: LED:8个挂在P1口,排电阻是上拉限流的;2个作为串口收发的指示灯;1个LED作为电源指示灯; 独石电容6个:5个是使用在max232上的;一个是使用在单片机上,作为电源去耦的; 10K电阻,接在EA上,上拉到5V; 电解电容和电阻构成上电复位电路; 自己买2个DB9的母头,焊接一根串口电缆; 搞一个DB9的公头的座,焊接在PCB的面包板上; 恩还有电源,Dc5V的电源很多,电源电压差一点问题不大;很多单片机现在电源范围都宽; STC单片机应该可以工作在4V以上,具体查资料。 好了,焊接完就可以开始工作了。 其它的按键、LED再慢慢扩充吧。 这是嵌入式C程序员的基本知识。作者在Embedded Systems Programming杂志上发表了很多嵌入式系统开发方面的文章。
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不是在嵌入式系统上。如果上述任何问题的答案是"是"的话,那么我知道我得认真考虑我是否应该去做这份工作。 从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。 有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮助。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。 这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。
预处理器(Preprocessor)
1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3) 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4) 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。
2 . 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) <= (B) ? (A) : (B)) 这个测试是为下面的目的而设的: 1) 标识#define在宏中应用的基本知识。这是很重要的。因为在 嵌入(inline)操作符 变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。 3) 懂得在宏中小心地把参数用括号括起来 4) 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p++, b);
3. 预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。
死循环(Infinite loops)
4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是:
while(1) {
}
一些程序员更喜欢如下方案:
for(;;) {
}
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。
第三个方案是用 goto Loop: ... goto Loop; 应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。
数据声明(Data declarations)
5. 用变量a给出下面的定义 a) 一个整型数(An integer) b)一个指向整型数的指针( A pointer to an integer) c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r d)一个有10个整型数的数组( An array of 10 integers) e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers) f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers) g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer) h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
答案是: a) int a; // An integer b) int *a; // A pointer to an integer c) int **a; // A pointer to a pointer to an integer d) int a[10]; // An array of 10 integers e) int *a[10]; // An array of 10 pointers to integers f) int (*a)[10]; // A pointer to an array of 10 integers g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
人们经常声称这里有几个问题是那种要翻一下书才能回答的问题,我同意这种说法。当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。但是当我被面试的时候,我期望被问到这个问题(或者相近的问题)。因为在被面试的这段时间里,我确定我知道这个问题的答案。应试者如果不知道所有的答案(或至少大部分答案),那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?
Static
6. 关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。
Const
7.关键字const有什么含意? 我只要一听到被面试者说:"const意味着常数",我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。) 如果应试者能正确回答这个问题,我将问他一个附加的问题: 下面的声明都是什么意思?
const int a; int const a; const int *a; int * const a; int const * a const;
/******/ 前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由: 1) 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。) 2) 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。 3) 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
Volatile
8. 关键字volatile有什么含意?并给出三个不同的例子。 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1) 并行设备的硬件寄存器(如:状态寄存器) 2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3) 多线程应用中被几个任务共享的变量
回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到volatile变量。不懂得volatile的内容将会带来灾难。 假设被面试者正确地回答了这是问题(嗯,怀疑是否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。 1)一个参数既可以是const还可以是volatile吗?解释为什么。 2); 一个指针可以是volatile 吗?解释为什么。 3); 下面的函数有什么错误:
int square(volatile int *ptr) { return *ptr * *ptr; }
下面是答案: 1)是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 2); 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。 3) 这段代码有点变态。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:
int square(volatile int *ptr) { int a,b; a = *ptr; b = *ptr; return a * b; }
由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:
long square(volatile int *ptr) { int a; a = *ptr; return a * a; }
位操作(Bit manipulation)
9. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。 对这个问题有三种基本的反应 1)不知道如何下手。该被面者从没做过任何嵌入式系统的工作。 2) 用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。我最近不幸看到 Infineon为其较复杂的通信芯片写的驱动程序,它用到了bit fields因此完全对我无用,因为我的编译器用其它的方式来实现bit fields的。从道德讲:永远不要让一个非嵌入式的家伙粘实际硬件的边。 3) 用 #defines 和 bit masks 操作。这是一个有极高可移植性的方法,是应该被用到的方法。最佳的解决方案如下:
#define BIT3 (0x1 << 3) static int a;
void set_bit3(void) { a |= BIT3; } void clear_bit3(void) { a &= ~BIT3; }
一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、|=和&=~操作。
访问固定的内存位置(Accessing fixed memory locations)
10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。 这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下: int *ptr; ptr = (int *)0x67a9; *ptr = 0xaa55;
A more obscure approach is: 一个较晦涩的方法是:
*(int * const)(0x67a9) = 0xaa55;
即使你的品味更接近第二种方案,但我建议你在面试时使用第一种方案。
中断(Interrupts)
11. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。
__interrupt double compute_area (double radius) { double area = PI * radius * radius; printf("\nArea = %f", area); return area; }
这个函数有太多的错误了,以至让人不知从何说起了: 1)ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。 2) ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。 3) 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。 4) 与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了。
代码例子(Code examples)
12 . 下面的代码输出是什么,为什么?
void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6) ? puts("> 6") : puts("<= 6"); } 这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是 ">6"。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。
13. 评价下面的代码片断:
unsigned int zero = 0; unsigned int compzero = 0xFFFF; /*1's complement of zero */
对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:
unsigned int compzero = ~0;
这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。 到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者不是很好,那么这个测试就在这里结束了。但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错。提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案。不管如何,你就当是这个娱乐吧...
动态内存分配(Dynamic memory allocation)
14. 尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么? 这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了(主要是 P.J. Plauger, 他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应试者进入一种虚假的安全感觉后,我拿出这么一个小节目: 下面的代码片段的输出是什么,为什么?
char *ptr; if ((ptr = (char *)malloc(0)) == NULL) puts("Got a null pointer"); else puts("Got a valid pointer");
这是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数malloc,得到了一个合法的指针之后,我才想到这个问题。这就是上面的代码,该代码的输出是"Got a valid pointer"。我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。
Typedef 15 Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:
#define dPS struct s * typedef struct s * tPS;
以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么? 这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:
dPS p1,p2; tPS p3,p4;
第一个扩展为
struct s * p1, p2; . 上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。
晦涩的语法
16 . C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?
int a = 5, b = 7, c; c = a+++b;
这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:
c = a++ + b;
因此, 这段代码持行后a = 6, b = 7, c = 12。 如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处是这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题。
好了,伙计们,你现在已经做完所有的测试了。这就是我出的C语言测试题,我怀着愉快的心情写完它,希望你以同样的心情读完它。如果是认为这是一个好的测试,那么尽量都用到你的找工作的过程中去吧。天知道也许过个一两年,我就不做现在的工作,也需要找一个。
作者介绍: Nigel Jones 是一个顾问,现在住在Maryland,当他不在水下时,你能在多个范围的嵌入项目中找到他。 他很高兴能收到读者的来信,他的email地址是: NAJones@compuserve.com
参考文献 1) Jones, Nigel, "In Praise of the #error directive," Embedded Systems Programming, September 1999, p. 114. 2) Jones, Nigel, " Efficient C Code for Eight-bit MCUs ," Embedded Systems Programming, November 1998, p. 66.
|
目录: 1、C语言 2、C++ 3、C++与C的抉择 4、汇编语言 5、Pascal语言 6、Visual Basic 7、Java 8、创作工具 9、结论
-------------------------------------------------------------------------------- 原 文:What Language Do I Use 译 者:Sunlxy 版 本:the first edition(Ver 1.0) --------------------------------------------------------------------------------
这是每个游戏编程FAQ里都有的问题。这个问题每星期都会在游戏开发论坛上被问上好几次。这是个很好的问题,但是,没人能给出简单的答案。在某些应用程序中,总有一些计算机语言优于其他语言。下面是几种用于编写游戏的主要编程语言的介绍及其优缺点。希望这篇文章能帮助你做出决定。 This is a question that belongs in every game programming FAQ. It seems to be asked in a game development forum several times a week. It\'s a good question, though, and not one with an easy answer. There are computer languages that work better for some applications than others. Here is a list of the major programming languages used to write games along with descriptions, advantages, and disadvantages. Hopefully this list will help you make a decision.
1、C语言 如果说FORTRAN和COBOL是第一代高级编译语言,那么C语言就是它们的孙子辈。C语言是Dennis Ritchie在七十年代创建的,它功能更强大且与ALGOL保持更连续的继承性,而ALGOL则是COBOL和FORTRAN的结构化继承者。C语言被设计成一个比它的前辈更精巧、更简单的版本,它适于编写系统级的程序,比如操作系统。在此之前,操作系统是使用汇编语言编写的,而且不可移植。C语言是第一个使得系统级代码移植成为可能的编程语言。 If FORTRAN and COBOL were the first compiled high-level languages, then C is their grandchild. It was created in the 70\'s by Dennis Ritchie as a tighter and more coherent successor to ALGOL, which was a structured successor to COBOL and FORTRAN. It was designed to be a smaller and simpler version of its predecessors, suitable for writing system-level programs, like operating systems. Before then, operating systems were hand-coded in assembly and were not portable. C was the first programming language that made portability a reality for system-level code.
C语言支持结构化编程,也就是说C的程序被编写成一些分离的函数呼叫(调用)的集合,这些呼叫是自上而下运行,而不像一个单独的集成块的代码使用GOTO语句控制流程。因此,C程序比起集成性的FORTRAN及COBOL的“空心粉式代码”代码要简单得多。事实上,C仍然具有GOTO语句,不过它的功能被限制了,仅当结构化方案非常复杂时才建议使用。 C is a language that supports structured programming. That is to say that C programs are written as collections of disconnected function calls that run top-down rather than a single monolithic block of code with program control-flow happening via GOTO statements. Hence, C programs are generally easier to follow than monolithic FORTRAN and COBOL spaghetti-code. Actually, C still has a GOTO statement, but its functionality is limited and it is only recommended as a last resort if structured solutions are much more complicated.
正由于它的系统编程根源,将C和汇编语言进行结合是相当容易的。函数调用接口非常简单,而且汇编语言指令还能内嵌到C代码中,所以,不需要连接独立的汇编模块。 True to its system-programming roots, it is fairly easy to interface C with assembly languages. The function-calling interface is very simple, and assembly language instructions can be embedded within C code, so linking in separate assembly-language modules is not necessary.
优点:有益于编写小而快的程序。很容易与汇编语言结合。具有很高的标准化,因此其他平台上的各版本非常相似。 Advantages: Good for writing small fast programs. Easy to interface with assembly language. Very standardized, so versions on other platforms are similar.
缺点:不容易支持面向对象技术。语法有时会非常难以理解,并造成滥用。 Disadvantages: Does not easily support object-oriented techniques. Syntax can be difficult and lends itself to abuse.
移植性:C语言的核心以及ANSI函数调用都具有移植性,但仅限于流程控制、内存管理和简单的文件处理。其他的东西都跟平台有关。比如说,为Windows和Mac开发可移植的程序,用户界面部分就需要用到与系统相关的函数调用。这一般意味着你必须写两次用户界面代码,不过还好有一些库可以减轻工作量。 Portability: While the core of the language and the ANSI function calls are very portable, they are limited to control-flow, memory management, and simple file-handling. Everything else is platform-specific. Making a program that\'s portable between Windows and the Mac, for instance, requires that the user-interface portions be using system-specific function calls. This generally means that you need to write the user-interface code twice. There are libraries, though, that make the process a bit easier.
用C语言编写的游戏:非常非常多。 Games Written in C: Lots and lots.
资料:C语言的经典著作是《The C Programming Language》,它经过多次修改,已经扩展到最初的三倍大,但它仍然是介绍C的优秀书本。一本极好的教程是《The Waite Group\'s C Primer Plus》。 Resources: The classic book about C is [The C Programming Language].It\'s gone through several iterations and has expanded to about three times its original size, but it\'s still a good introduction to the language. An excellent tutorial is [The Waite Group\'s C Primer Plus].
2、C++ C++语言是具有面向对象特性的C语言的继承者。面向对象编程,或称OOP是结构化编程的下一步。OO程序由对象组成,其中的对象是数据和函数离散集合。有许多可用的对象库存在,这使得编程简单得只需要将一些程序“建筑材料”堆在一起(至少理论上是这样)。比如说,有很多的GUI和数据库的库实现为对象的集合。 C++ is the object-oriented successor to C. Object-oriented, or OO, programs are the next step beyond structured programming. OO programs are built out of objects, which are packages of data and functions collected into discrete units. There are many libraries of objects available that make writing programs as simple as pulling together a collection of program "building blocks" (at least in theory). For example, there are many GUI and database libraries that are implemented as collections of objects.
C++总是辩论的主题,尤其是在游戏开发论坛里。有几项C++的功能,比如虚拟函数,为函数呼叫的决策制定增加了一个额外层次,批评家很快指出C++程序将变得比相同功能的C程序来得大和慢。C++的拥护者则认为,用C写出与虚拟函数等价的代码同样会增加开支。这将是一个还在进行,而且不可能很快得出结论的争论。 C++ is the subject of controversy, especially in the game development community. There are features of C++, like virtual functions, that add an extra layer of decision-making to function calls, and critics are quick to point out that C++ programs can be larger and slower than C counterparts. C++ advocates point out, however, that coding the equivalent of a virtual function in C requires the same overhead. It\'s an on-going debate that\'s not likely to be decided soon.
我认为,C++的额外开支只是使用更好的语言的小付出。同样的争论发生在六十年代高级程序语言如COBOL和FORTRAN开始取代汇编成为语言所选的时候。批评家正确的指出使用高级语言编写的程序天生就比手写的汇编语言来得慢,而且必然如此。而高级语言支持者认为这么点小小的性能损失是值得的,因为COBOL和FORTRAN程序更容易编写和维护。 In my opinion, the overhead of C++ is simply the price you pay for a better language. This same debate went on in the 60\'s when high-level programming languages like COBOL and FORTRAN started to displace hand-coded assembly as the language of choice. Critics correctly pointed out that programs written in high-level languages were inherently slower than hand-tuned assembly and always would be. High-level language advocates pointed out, however, that the slight performance hit was worth it because COBOL and FORTRAN programs were much easier to write and maintain.
优点:组织大型程序时比C语言好得多。很好的支持面向对象机制。通用数据结构,如链表和可增长的阵列组成的库减轻了由于处理低层细节的负担。 Advantages: Much better than C for organizing large programs. Supports the object-oriented paradigm nicely. Libraries of common data structures, like linked lists and grow-able arrays, can remove much of the burden of having to deal with low-level details.
缺点:非常大而复杂。与C语言一样存在语法滥用问题。比C慢。大多数编译器没有把整个语言正确的实现。 Disadvantages: Extremely large and complicated. Like C, the syntax lends itself to abuse. Can be slower than C. Not many compilers implement the entire language correctly.
移植性:比C语言好多了,但依然不是很乐观。因为它具有与C语言相同的缺点,大多数可移植性用户界面库都使用C++对象实现。 Portability: Better than C, but still not great. While it shares the same disadvantage as C, most of the portable user-interface libraries are implemented as collections of C++ objects.
使用C++编写的游戏:非常非常多。大多数的商业游戏是使用C或C++编写的。 Games Written in C++: Lots and lots. Almost all commercial games are written in C or C++.
资料:最新版的《The C++ Programming Language》非常好。作为教程,有两个阵营,一个假定你知道C,另外一个假定你不知道。到目前为止,最好的C++教程是《Who\'s Afraid of C++》,如果你已经熟知C,那么试一下《Teach Yourself C++》。 Resources: The latest edition of The C++ Programming Language is excellent. As for tutorials, there are two camps, ones that assume you know C, and ones you don\'t. By far the best ground-up C++ tutorials are Who\'s Afraid of C++ and Who\'s Afraid of More C++. If you already know C, try Teach Yourself C++.
3、我该学习C++或是该从C开始(Should I learn C++, or should I start with C ) 我不喜欢这种说法,但它是继“我该使用哪门语言”之后最经常被问及的问题。很不幸,不存在标准答案。你可以自学C并使用它来写程序,从而节省一大堆的时间,不过使用这种方法有两个弊端: I thought this bore mentioning, as it\'s the second most commonly asked question next to "which programming language should I use?"Unfortunately, the answer isn\'t black and white. You could save a lot of time by just teaching yourself C and writing apps, but there are two disadvantages to this approach. 你将错过那些面向对象的知识,因为它可能在你的游戏中使得数据建模更有效率的东西。 You\'re missing out on what will likely be a much more effective way of modeling the data in your game. By not learning OO programming off the bat, you could be enforcing bad programming habits that you\'ll have to un-learn later. Trust me on this one.
最大的商业游戏,包括第一人称射击游戏很多并没有使用C++。但是,这些程序的作者即使使用老的C的格式,他们通常坚持使用面向对象编程技术。如果你只想学C,至少要自学OO(面向对象)编程技术。OO是仿真(游戏)的完美方法,如果你不学习OO,你将不得不“辛苦”的工作。 Many of the biggest commercial games, including most first-person shooters, get by without C++. The authors of these programs, however, always insist that they\'re using object-oriented programming techniques even though they\'re using plain old C. If you want to just learn C, at least teach yourself OO programming techniques. OO is the perfect methodology for simulations (read: games), and you\'ll really be doing it "the hard way" if you push off learning OO.
4、汇编语言(Assembly) 显然,汇编是第一个计算机语言。汇编语言实际上是你计算机处理器实际运行的指令的命令形式表示法。这意味着你将与处理器的底层打交道,比如寄存器和堆栈。如果你要找的是类英语且有相关的自我说明的语言,这不是你想要的。 By default, assembly was the first computer language. Assembly language is actually a command-based representation of the actual instructions that your computer\'s processor runs. That means you will be dealing with the low-level details of your processor, like registers and stacks. If you\'re looking for a language that\'s English-like and is relatively self-documenting, this isn\'t it!
确切的说,任何你能在其他语言里做到的事情,汇编都能做,只是不那么简单 — 这是当然,就像说你既可以开车到某个地方,也可以走路去,只是难易之分。话虽不错,但是新技术让东西变得更易于使用。 By definition, anything you can do in any other language, you can do in assembly, only not as easily --of course, that\'s like saying that anywhere you can go in a car, you can go on foot, only not as easily. While the statement might be true, the later technologies made things much easier to use.
总的来说,汇编语言不会在游戏中单独应用。游戏使用汇编主要是使用它那些能提高性能的零零碎碎的部分。比如说,毁灭战士整体使用C来编写,有几段绘图程序使用汇编。这些程序每秒钟要调用数千次,因此,尽可能的简洁将有助于提高游戏的性能。而从C里调用汇编写的函数是相当简单的,因此同时使用两种语言不成问题。 In general, assembly language is not used on its own for games. Games that use assembly language use it in bits and pieces where it can improve performance. For example, DOOM is written entirely in C with a couple of drawing routines hand-coded in assembly. They are the routines that are called a few thousand times a second, so making the routine as tight as possible really helped the performance of the game. It\'s fairly easy to write a function in assembly that is call-able from C, so using both languages wasn\'t a problem.
特别注意:语言的名字叫“汇编”。把汇编语言翻译成真实的机器码的工具叫“汇编程序”。把这门语言叫做“汇编程序”这种用词不当相当普遍,因此,请从这门语言的正确称呼作为起点出发。 Special Note: The name of the language is "assembly". The name of the tool that converts assembly language into true machine code is called an "assembler". It\'s a common misnomer to call the language "assembler", so start out on the right foot by calling the language by its proper name.
优点:最小、最快的语言。汇编高手能编写出比任何其他语言能实现的快得多的程序。你将是利用处理器最新功能的第一人,因为你能直接使用它们。 Advantages: Is, by definition, the smallest and fastest language. A talented assembly programmer can write programs that are faster than anything that can be done in other languages. You\'ll be the first person to be able to take advantage of the processor\'s latest new features, because you can use them directly.
缺点:难学、语法晦涩、坚持效率,造成大量额外代码 — 不适于心脏虚弱者。 Disadvantages: Difficult to learn, cryptic syntax, tough to do efficiently, and it takes much more code to get something done --not for the faint of heart!
移植性:接近零。因为这门语言是为一种单独的处理器设计的,根本没移植性可言。如果使用了某个特殊处理器的扩展功能,你的代码甚至无法移植到其他同类型的处理器上(比如,AMD的3DNow指令是无法移植到其它奔腾系列的处理器上的)。 Portability: Zilch. Since the language is designed for a single processor, it is not portable by definition. If you use extensions specific to a particular brand of processor, your code isn\'t even portable to other processors of the same type (for example, AMD 3DNOW instructions are not portable to other Pentium-class processors).
使用汇编编写的游戏:我不知道有什么商业游戏是完全用汇编开发的。不过有些游戏使用汇编完成多数对时间要求苛刻的部分。 Games Written in Assembly: I don\'t know of any commercial games that are written entirely in assembly. Some games, however, have the most time-critical portions done in assembly.
资料:如果你正在找一门汇编语言的文档,你主要要找芯片的文档。网络上如Intel、AMD、Motorola等有一些关于它们的处理器的资料。对于书籍而言,《Assembly Language: Step-By-Step》是很值得学习的。 Resources: When you\'re looking for documentation for an assembly language, you\'re basically looking for the documentation for the chip. There is some online information at [Intel], [AMD][Motorola] for their processors. As for books, [Assembly Language: Step-By-Step] is well-reviewed.
|
-- 作者:深宵鬼影 -- 发布时间:2005-6-14 10:33:35
-- 5、Pascal语言 Pascal语言是由Nicolas Wirth在七十年代早期设计的,因为他对于FORTRAN和COBOL没有强制训练学生的结构化编程感到很失望,“空心粉式代码”变成了规范,而当时的语言又不反对它。Pascal被设计来强行使用结构化编程。最初的Pascal被严格设计成教学之用,最终,大量的拥护者促使它闯入了商业编程中。当Borland发布IBM PC上的 Turbo Pascal时,Pascal辉煌一时。集成的编辑器,闪电般的编译器加上低廉的价格使之变得不可抵抗,Pascal编程了为MS-DOS编写小程序的首选语言。 Pascal was designed by Nicolas Wirth in the early 70\'\'s, because he was dismayed to see that FORTRAN and COBOL were not enforcing healthy structured programming disciplines in students. "Spaghetti code" was becoming the norm, and the languages of the time weren\'\'t discouraging it. Pascal was designed from the ground up to enforce structured programming practices. While the original Pascal was designed strictly for teaching, it had enough advocates to eventually make inroads into commercial programming. Pascal finally took the spotlight in a big way when Borland released Turbo Pascal for the IBM PC. The integrated editor, lightning-fast compiler, and low price were an irresistible combination, and Pascal became the preferred language for writing small programs for MS-DOS.
然而时日不久,C编译器变得更快,并具有优秀的内置编辑器和调试器。Pascal在1990年Windows开始流行时走到了尽头,Borland放弃了Pascal而把目光转向了为Windows 编写程序的C++。Turbo Pascal很快被人遗忘。 The momentum, however, did not stay. C compilers became faster and got nice built-in editors and debuggers. The almost-final nail in Pascal\'\'s coffin happened in the early 1990\'\'s when Windows took over, and Borland ignored Pascal in favor of C++ for writing Windows applications. Turbo Pascal was all but forgotten.
最后,在1996年,Borland发布了它的“Visual Basic杀手”— Delphi。它是一种快速的带华丽用户界面的 Pascal编译器。由于不懈努力,它很快赢得了一大群爱好者。 Finally, in 1996, Borland released its "Visual Basic Killer", Delphi. Delphi was a fast Pascal compiler coupled with a gorgeous user interface. Against all odds (and the Visual Basic juggernaut), it gained a lot of fans.
基本上,Pascal比C简单。虽然语法类似,它缺乏很多C有的简洁操作符。这既是好事又是坏事。虽然很难写出难以理解的“聪明”代码,它同时也使得一些低级操作,如位操作变得困难起来。 On the whole, Pascal is simpler than C. While the syntax is similar, it lacks a lot of the shortcut operations that C has. This is a good thing and a bad thing. It\'\'s harder to write inscrutable "clever" code, but it makes low-level operations like bit-manipulation more difficult.
优点:易学、平台相关的运行(Dephi)非常好。 Advantages: Easy to learn. Platform-specific implementations (Delphi) are very nice.
缺点:“世界潮流”面向对象的Pascal继承者(Modula、Oberon)尚未成功。语言标准不被编译器开发者认同。专利权。 Disadvantages: "World class" OO successors to Pascal (Modula, Oberon) have not been successful. Language standards are not adhered to by compiler-makers. Proprietary.
移植性:很差。语言的功能由于平台的转变而转变,没有移植性工具包来处理平台相关的功能。 Portability: Dismal. The features of the language changes from platform to platform, and there are no portability toolkits to handle platform-specific features.
使用Pascal编写的游戏:几个。DirectX的Delphi组件使得游戏场所变大了。 Games Written in Pascal: A couple. The DirectX components for Delphi have made the playing field more level.
资料:查找跟Delphi有关的资料,请访问:Inprise Delphi page。 Resources: The find out about Delphi, check out the Inprise Delphi page.
6、Visual Basic 哈,BASIC。回到八十年代的石器时代,它是程序初学者的第一个语言。最初的BASIC形式,虽然易于学习,却是可怕的无组织化,它义无返顾的使用了GOTO充斥的“空心粉式代码”。当回忆起BASIC的行号和GOSUB命令,没有几个人能止住眼角的泪水。 Ahh, BASIC. Way back in the stone-age of the 80\'\'s, it was the first language for budding programmers. The original incarnations of BASIC, while easy to learn, were horribly unstructured, leading to the a rash of GOTO-laden "spaghetti-code". Not many people wipe away tears when reminiscing about BASIC\'\'s line numbers and the GOSUB command.
快速前进到九十年代早期,虽然不是苹果公司所希望的巨人,HyperCard仍然是一个在Windows下无法比拟的吸引人的小型编程环境。Windows下的HyperCard克隆品如ToolBook又慢又笨又昂贵。为了与HyperCard一决高下,微软取得了一个小巧的名为Thunder编程环境的许可权,并把它作为Visual Basci 1.0发布,其用户界面在当时非常具有新意。这门语言虽然还叫做Basic(不再是全部大写),但更加结构化了,行号也被去除。实际上,这门语言与那些内置于TRS-80、Apple II及Atari里的旧的ROM BASIC相比,更像是带Basic风格动词的Pascal。 Fast-forward to the early 1990\'\'s. While not the monster that Apple was hoping for, HyperCard was a compelling little programming environment that had no equal under Windows. Windows-based HyperCard clones like ToolBook were slow, clunky, and expensive. To finally compete with HyperCard, Microsoft licensed a neat little programming environment named Thunder, releasing it as Visual Basic 1.0. The user-interface was very innovative for the time. The language, while still called Basic (and no longer all-caps), was much more structured. Line numbers were mercy-killed. The language was, in fact, much closer to Pascal with Basic-style verbs than the old ROM BASIC that was built into every TRS-80, Apple ][, and Atari.
经过六个版本,Visual Basic变得非常漂亮。用户界面发生了许多变化,但依然保留着“把代码关联到用户界面”的主旨。这使得它在与即时编译结合时变成了一个快速原型的优异环境。 Six versions later, Visual Basic is pretty deluxe. The user-interface has made some changes, but still retains its "attach bits of code to the user-interface" motif. This, in combination with instantaneous compiling, makes it a terrific environment for fast prototyping.
优点:整洁的编辑环境。易学、即时编译导致简单、迅速的原型。大量可用的插件。虽然有第三方的DirectX插件,DirectX 7已准备提供Visual Basic的支持。 Advantages: Neat IDE. Easy to learn. Instantaneous compiling makes for very fast and easy prototyping. Lots and lots of add-ons available. While there are currently third-party DirectX add-ons for Visual Basic, DirectX version 7 is going to include support for Visual Basic right out of the box.
缺点:程序很大,而且运行时需要几个巨大的运行时动态连接库。虽然表单型和对话框型的程序很容易完成,要编写好的图形程序却比较难。调用Windows的API程序非常笨拙,因为VB的数据结构没能很好的映射到C中。有OO功能,但却不是完全的面向对象。专利权。 Disadvantages: Apps are large and require several large runtime DLL\'\'s to run. While form and dialog-based apps are easy to make, writing good graphical apps is more difficult. Calling Windows API functions is clunky, because VB data structures don\'\'t map nicely to C. Has OO features, but is not fully object-oriented. Proprietary.
移植性:非常差。因为Visual Basic是微软的产品,你自然就被局限在他们实现它的平台上。也就是说,你能得到的选择是:Windows,Windows或Widnows。当然,有一些工具能将VB程序转变成Java。 Portability: Worse than dismal. Since Visual Basic is owned by Microsoft, you\'\'re pretty-much limited to whatever platforms they\'\'ve ported it too. That means that you\'\'ve got the choice of Windows, Windows, or Windows. Note that there are, however, a couple of tools that help convert VB apps to Java.
使用Visual Basic编写的游戏:一些。有很多使用VB编写的共享游戏,还有一些是商业性的。 Games Written in Visual Basic: A few. There are lots of shareware games done in VB, and a couple of commercial offerings.
资料:微软的VB页面有一些信息。 Resources: The [Microsoft VB page].
7、Java Java是由Sun最初设计用于嵌入程序的可移植性“小C++”。在网页上运行小程序的想法着实吸引了不少人的目光,于是,这门语言迅速崛起。事实证明,Java不仅仅适于在网页上内嵌动画 — 它是一门极好的完全的软件编程的小语言。“虚拟机”机制、垃圾回收以及没有指针等使它很容易实现不易崩溃且不会泄漏资源的可靠程序。 Java was originally designed by Sun to be a portable "small C++" that could be used in embedded applications. The idea of running little applications in a web-page really captured people\'\'s imaginations, so the language caught on quickly. It turned out that Java wasn\'\'t just suitable for embedding animated banners in web pages --it was a downright nifty little language for application programming! The "virtual machine" nature, garbage collection and lack of pointers made it easy to make bulletproof apps that didn\'\'t crash and had no resource leaks.
虽然不是C++的正式续篇,Java从C++ 中借用了大量的语法。它丢弃了很多C++的复杂功能,从而形成一门紧凑而易学的语言。不像C++,Java强制面向对象编程,要在Java里写非面向对象的程序就像要在Pascal里写“空心粉式代码”一样困难。 While not an official "sequel" to C++, Java borrows very heavily from C++ syntax. It dumps many of the more difficult C++ features to reveal a rather compact and easy-to-learn language. Unlike C++, Java enforces object-orientation with a heavy hand. Writing a non-OO app in Java is as difficult as writing spaghetti-code in Pascal.
优点:二进制码可移植到其他平台。程序可以在网页中运行。内含的类库非常标准且极其健壮。自动分配合垃圾回收避免程序中资源泄漏。网上数量巨大的代码例程。 Advantages: Binaries are portable to other platforms. Apps can run embedded in web pages. The included class library is reasonably standardized and extremely robust. Automatic allocation and garbage collection all but eliminates resource leaks in applications. Zillions of code examples on the web.
缺点:使用一个“虚拟机”来运行可移植的字节码而非本地机器码,程序将比真正编译器慢。有很多技术(例如“即时”编译器)很大的提高了Java的速度,不过速度永远比不过机器码方案。早期的功能,如AWT没经过慎重考虑,虽然被正式废除,但为了保持向后兼容不得不保留。越高级的技术,造成处理低级的机器功能越困难,Sun为这门语言增加新的“受祝福”功能的速度实在太慢。 Disadvantages: Uses a "virtual machine" to run portable byte-code rather than native machine code, so apps are slower than true compilers. There are technologies (like "Just In Time" compilers) that greatly improve the speed of Java, but the speed will likely always lag behind true machine-code solutions. Early features like the Abstract Windowing Toolkit were not well thought-out and, while officially abandoned, have to hang around for backward compatibility. Is very high-level, which makes dealing with any low-level machine features very difficult. Sun is pretty slow in adding new "blessed" features to the language.
移植性:最好的,但仍未达到它本应达到的水平。低级代码具有非常高的可移植性,但是,很多UI及新功能在某些平台上不稳定。 Portability: The best of the lot, but still not what it should be. The low-level code is very portable, but a lot of the UI and newer features are wobbly on some platforms.
使用Java编写的游戏:网页上有大量小的Applet,但仅有一些是商业性的。有几个商业游戏使用Java作为内部脚本语言。 Games Written in Java: Lots of little applets in web pages, but only a couple of commercial offerings. Several commercial games use Java as the internal script language.
资料:Sun的官方Java页面有一些好的信息。IBM也有一个非常好的Java页面。JavaLobby是一个关于Java新闻的最好去处。 Resources: [Sun\'\'s official Java page] has some good info. IBM also has an excellent [Java page]. The [JavaLobby] is the best place to go for news about Java.
|
-- 作者:深宵鬼影 -- 发布时间:2005-6-14 10:34:28
-- 8、创作工具 上面所提及的编程语言涵盖了大多数的商业游戏。但是也有一个例外,这个大游戏由于它的缺席而变得突出。 All of the programming languages mentioned above cover pretty-much every commercial game out there. There is one exception, but it\'\'s such a big one that it would be conspicuous by its absence.
“神秘岛”。没错,卖得最好的商业游戏不是使用以上任何一门语言编的,虽然有人说“神秘岛”99%是使用 3D建模工具制作的,其根本的编程逻辑是在HyperCard里完成的。 Yep, the best selling commercial game of all time wasn\'\'t written in any of the above languages. While some would say that 99% of Myst was written using 3D modeling tools, the underlying program logic was done in HyperCard.
多数创作工具有点像Visual Basic,只是它们工作在更高的层次上。大多数工具使用一些拖拉式的流程图来模拟流程控制。很多内置解释的程序语言,但是这些语言都无法像上面所说的单独的语言那样健壮。 Most authoring tools are a bit like Visual Basic, only they work at a much higher level. Most of the tools use some kind of click-and-drag flowchart motif to model control flow. Many contain embedded interpreted programming languages, but these languages aren\'\'t nearly as robust as the standalone languages mentioned above.
优点:快速原型 — 如果你的游戏符合工具制作的主旨,你或许能使你的游戏跑得比使用其他语言快。在很多情况下,你可以创造一个不需要任何代码的简单游戏。使用插件程序,如Shockware及IconAuthor播放器,你可以在网页上发布很多创作工具生成的程序。 Advantages: Fast prototyping --if your game fits the motif the tool\'\'s made for, you can probably get your game running faster than any other language. In many cases, you can make a rudimentary game without writing any code. You can broadcast many authored apps on web pages with plug-ins like Shockwave and IconAuthor Player.
缺点:专利权,至于将增加什么功能,你将受到工具制造者的支配。你必须考虑这些工具是否能满足你游戏的需要,因为有很多事情是那些创作工具无法完成的。某些工具会产生臃肿得可怕的程序。 Disadvantages: Proprietary, so you\'\'re at the mercy of the tool-maker as to what features will be added. You\'\'ve gotta really look at these tools to see if they\'\'ll do everything that your game\'\'s gonna require, because there are things that authoring tools simply can\'\'t do. Some of these tools produce frighteningly bloated apps.
移植性:因为创作工具是具有专利权的,你的移植性以他们提供的功能息息相关。有些系统,如Director可以在几种平台上创作和运行,有些工具则在某一平台上创作,在多种平台上运行,还有的是仅能在单一平台上创作和运行。 Portability: Since authoring tools are proprietary, your portability is limited to whatever they offer. Some systems, like Director, can author and run on several platforms. Some tools can author on one platform but play on several. Some are single-platform beasts.
使用创作工具编写的游戏:“神秘岛”和其他一些同类型的探险游戏。所有的Shockwave游戏都在网络上。 Games Written in Authoring Tools: Myst and a few other "exploration" games of the same genre. All of the Shockwave games on the web.
资料:Director、HyperCard、SuperCard、IconAuthor、Authorware。
9、结论(Conclusion) 你可能希望得到一个关于“我该使用哪种语言”这个问题的更标准的结论。非常不幸,没有一个对所有应用程序都最佳的解决方案。C适于快而小的程序,但不支持面向对象的编程。C++完全支持面向对象,但是非常复杂。Visual Basic与Delphi易学,但不可移植且有专利权。Java有很多简洁的功能,但是慢。创作工具可以以最快的速度产生你的程序,但是仅对某一些类型的程序起作用。最好的方法是决定你要写什么样的游戏,并选择对你的游戏支持最好的语言。“试用三十天”的做法成为工业标准是件好事情。 You probably were hoping for a more cut-n-dry conclusion to the "what programming language do I use" dilemma. Unfortunately, there\'\'s no solution that\'\'s optimal for all applications. C is suited for fast and small applications, but doesn\'\'t support OO programming well. C++ has very complete OO support, but is frighteningly complicated. Visual Basic and Delphi are easy to learn, but are non-portable and proprietary. Java has a lot of neat features, but is slow. Authoring tools can get your app working quickest, but are only useful for a narrow range of applications. It might just be best for you to figure out what kind of game you\'\'re writing and pick the language that would best support your game. It\'\'s a good thing that the "try it free for 30 days" offer has become the industry norm :-)
-------------------------------------------------------------------------------- 作者简介 John Hattan是位于德克萨斯州的Watauga里最大的软件公司 — Code Zone的主要负责人。如果你对他的文章有什么看法,请写信给他。
|
|