[修改回复]
删除回复
插入表情:
宋体
楷体
幼圆
黑体
隶书
华文行楷
方正舒体
Arial
Arial Black
Arial Narrow
Century Gothic
Comic Sans MS
#0000FF
#8A2BE2
#DEB887
#5F9EA0
#7FFF00
#000000
#D2691E
#FF7F50
#FF0000
#DC143C
#99ccff
字体颜色
#FFF8DC
#00FFFF
#EE82EE
#F5DEB3
#FFFFFF
#F5F5F5
#FFFF00
#9ACD32
使用帮助
当然我明白如果我对硬件了解的非常少,没有哪家IC公司会仁慈到招我这样一个一窍不通 的人来培训。所以我必须努力打好基础,学一些相关知识为以后做准备。就像我开始从MI S转到通信一样,我看过大量通信方面的书,并且给一个ISP做过RADIUS计费分拣台,在这 样的背景下这家通信公司才给了我这个机会。我在的通信公司是做系统设计的,有不少PC B Layout硬件人员,平常我就注意向他们学习,由于我做的是软件,在公司看硬件资料不 好意思,所以开始只好在家看,刚来上海工作我连续一年都在加班,后来不加了,因为我 要挤出时间学习,通常我12点左右睡,第二天5点半起,我上班比较早,地铁上如果人不多 我也用来看书。学习当然不会是一帆风顺的,有些实在不懂的问题就积累起来问硬件人员 ,他们的帮助使我学习进度快了很多,因为在没有人点拨的情况下自学,我的一半时间是 花在解决疑难问题上,但这种问题经常是别人的一句话就可以让我豁然开朗,我非常庆幸 我有这样的学习环境。在后面的一年里,我学会了看硬件原理图,学会了简单的硬件设计 (模拟电路方面还有不小的差距),事情就是这样的,当你安安份份做软件,别人永远认 为你是软件开发人员,在你开始学习硬件时别人未必会认同,有位中兴通讯的朋友还对我说 过,一个人不可能把所有东西都学完。我也明白这一点,但我希望自 己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬件都懂的,同事们也都 习以为常了。这个时候我可以把硬件资料堂堂正正的拿到公司看,没有人再大惊小怪了。 让我比较自豪的是我通过自己的努力做了一个IAD(软交换的终端设备)系统方案,包含软 硬件的选型、设计等内容,这个方案得到了公司和同事们的认同,让我感到非常欣慰。 技术是相辅相成的,当我的硬件有了一定的进步后,我的软件设计也有了很大的提高 ,我可以从更深层次理解问题,我做的接入服务器CPU是Motorola PowerPC860,熟悉的朋 友都知道860 QMC与软件的批量数据传输通常采用BD表的方式,硬件人员做驱动的时候习惯 采用固定BD表,每接收或发送数据都将数据从BD表拷贝到用户Buffer,或从用户Buffer拷 贝到BD表,由于理解的比较深入,我自己重新实现了这个过程,采用动态BD表的方式,驱 动从一个网口接收数据,提交给我的软件进行三层交换,直至从另外的接口发送出去,没 有进行一次拷贝。这样的设计大大提高了性能,使系统的指标接近理论值。软硬件的结合 使我的设计水平上了一个台阶。我现在写的这个操作系统,编译后我把程序反编译成汇编 ,找出其中不优化的代码,然后在C程序中进行调整。举个例子,很多CPU没有专门的乘法 指令,这个大家应该都知道,在这种CPU上进行一个乘法操作常常会花费大量的指令周期, 有的朋友会说这个我知道,我会尽量避免采用×号,但是事情往往不是那么简单,你知道 C语言中数组的下标操作是怎么实现的吗?仔细看看反汇编的代码你就会明白,同样是通过 下标的定位操作,C编译器会有时候会产生位移指令,但有时候会用乘法实现,两者效率往 往是天壤之别,所以明白这些问题你才能将系统性能提升到极致。? 些问题就不多说了,有兴趣的话以后可以共同探讨。 话说远一点,我由衷的希望在软件上做的比较深入的朋友们有机会学学硬件以及其它 相关知识,尤其是做底层开发和嵌入式设计的。这对软件技术的提高有非常大的帮助,否 则很多事情你只知道该这样但不会明白为什么该这样。我这个观点在我现在的IC公司Proj ect Manager那里也得到了验证。他告诉我们公司现在的802.11芯片产品的软件经理原本是 做该芯片硬件设计的,某某某原本是做软件的,现在在做IC,类似的例子还有很多,只是 在国内这样的风气不是非常流行。 我有一些心得体会与大家分享,只有当我干好本职工作后,我才会学习与工作关系不 大的技术,这样公司的上司才不至于反感,在入门阶段的问题我通常不去问那些资深人士 ,而是问一些资历比较浅的朋友,比如刚毕业不久的学生,因为他们往往会跟你详细的讲 解,而资深人士通常觉得你的问题太简单,所以回答的也很简单,我又不好意思多问。等 技术上了一定的层次后我才会问他们,他们也能给你比较深入的回答。另外,有些朋友说 我机会比较好,他们也希望能从事新的工作可惜没有机会,我听了只有苦笑,我的机会了 解的人都应该知道,我没有出生在什么IT世家:)也没有谁一路提拔我,所有的路都是自 己走出来的,我母亲去世比较早,我的后母(我叫她阿姨)看着我努力过来的,一次她看 我大年30还在写程序,她说像我这样努力木头都能学出来。 我的最终目的是IC而不是PCB,所以我下一步的准备开始学习IC设计的知识。公司的同 事没有懂IC设计的,后面的路又要靠自己了,我买了不少相关的书,在网上也查了很多的 资料,我花了大量的时间去学习VHDL,并且用软件进行了一些简单的设计和仿真(没有设 计ASIC,只是针对FPGA),随着学习的深入,我渐渐明白了IC设计的基本流程,同时也明 白了这条路的艰辛。这个时候我已经做好了跳槽的准备,我向一家业界又一定知名度的IC 设计公司投了简历,并通过了漫长的面试(4个多小时)。其他的一切我都比较满意,唯独 薪资差强人意,我也明白原因,因为我是这个行业的新人,我没有经验,我再一次将自己 清零了。公司老板问我6000多一个月能不能接受,我知道他也是照章办事。想想我通信行 业的朋友们,基本上都是年薪10万以上,月薪过万的也比比皆是,朋友们也帮我介绍了不 少待遇不错的公司,我该怎么选择,当时我很犹豫,我热爱我的事业,我向往我的追求, 但我也是一个普通的人,我也需要养家糊口,我也想早一点买房买车。生活给我出了一道 难题。 爱因斯坦在63岁时说过“一个人没有在30岁以前达成科学上的最大成就,那他永远都不会 有。”这句话给了我很大的压力和震动,我马上就26岁了,离30只有四年时间,我必须抓 紧这几年宝贵的时间,努力达到我技术上的最高峰。为了这个理想,为了能离自己的梦更 近一些,我选择了这家IC公司,我明白自己的薪资和公司刚进来的硕士研究生相差无几, 但为了今后的发展只能忍受,一切又得重新开始。换行业是一个非常痛苦的过程,尤其从 一个春风得意的位置换到一个陌生的岗位,感觉象从温暖的被子里钻出来跳进冰水中,让 人难以接受。在原来那家通信公司,我是唯一两年时间涨了五次工资的员工,公司和同事 都给了我极大的认可,工作上也常常被委以重任。但现在这一切都成了过去,在新的公司 我只是一个新人,没有人知道也没有人在意我过去的成绩。我决定重新开始,我把自己看作 新毕业的学生,我要用自己的努力得到公司的认可。进入新的行业是非常痛苦的,我告诉 自己必须忍受这一切,虽然外面有很多诱惑,但是既然作出了选择我就不允许自己轻易放 弃。 我现在已经在这家新公司上了一个多月的班,开始非常艰难,现在慢慢适应了。第一 个月结束时,Team Leader找我谈话,说我是新进员工中最优秀的一个,我心里很欣慰,这 也算对我努力的一个肯定吧。在这里还要感谢我的女朋友,她给了我很大的支持和鼓舞, 每次在我动摇的时候她都在鼓励我,让我坚持自己的理想,刚来上海是她让我不要勉强去 做MIS,这次也是她让我顶住了月薪过万的诱惑,没有她我可能不会有今天的成绩。 现在的公司有自己的操作系统,自己的CPU、DSP和其它芯片,在这里我能学到世界上 最先进的技术,我们的设计开发不再完全依赖别人的硬件和系统,这让我很开心。我打算 等工作步入正轨后,全力学习新的知识,实现我的理想。 在后面的两年里我给自己定下了几个目标: 一.努力做好本职工作,在工作上得到公司和同事们的认同; 二.努力学习IC硬件设计知识,多向同事请教,并利用一切机会多实践; 三.实现我的实时操作系统的主要部分,完成TCP/IP协议栈模块,并免费发布源代码; 四.和我女朋友结婚并买一套小房子,这是最重要的,因为我明白事业是可以重来的,但是 珍贵的感情很难失而复得。 在这里提一下我现在开发的操作系统,它是一个实时嵌入式系统,目前支持以下特性: a.支持时间片轮转调度和基于优先级调度,最多64个优先级; b.抢占式实时内核; c.为了便于移植,主体用标准C实现; d.汇编代码非常少,不到100行; e.支持任务管理,各任务有独立的堆栈; f.进程同步和通信目前完成了Semaphore,Message Queue正在调试; g.实现了定时系统调用; h.可以在windows上仿真调试 我还打算下一步实现优先级反转保护,Event Flag,Data Pipe,内存管理(以前实现过) 、驱动接口等。 在这之后我还会努力完善它,比如加入文件系统,协议栈、调试接口等。希望朋友们提出 自己的意见和建议,在此不胜感激! 后记: 就像有的朋友说的,我的经历或许会给一些朋友产生误导,在这里我必须说明一下。 我来上海以前学习过于拼命,常常晚上只睡3个多小时,我身高1米71,那时只有108斤(我 现在130多),家人也说我这样拼命活不过60岁,但是当时的我太固执,我对他们说只要能 实现理想活50岁我就够了。那时的拼命使我的身体受到了影响,有一次早上突然腰肌剧痛 难忍,痛的我倒在床上站不起来。虽然我现在已经比较注意,但有时候还会隐隐作痛。后 来在女朋友说服了我,来上海以后我不再如此。我经常引用父亲的一句话“身体是革命的 本钱”。 而且我也发现拼命不是办法,我可以熬一两个通宵,最多的一次我连续工作了三天三夜, 但是我半个月都没有恢复过来,这样是不是得不偿失?学习工作应该是一个长期的过程, 像马拉松而不是百米冲刺。我现在非常注意调整学习和工作的强度,我要保证每天尽量有 相对充沛的精力,一些年轻的朋友觉得自己也应该拼命努力,这让我多少有些担心,如果 我的故事能让你在学习工作上多一点兴趣,我会感到很开心,但如果误导了某些朋友,让 你做一些不值得的付出,我会感到很内疚。 技术没有贵贱只分,我以前换行业是因为自己的兴趣所致,而不是对哪个行业有什么 偏见。我希望我的经历不要给朋友一个错误的导向,觉得我始终向更高的技术发展。其实 各行各业做到顶尖都是很困难的。话又说回来虽然技术没有贵贱,但是门槛是有高低的, 无论如何,做IC的门槛要比做网页的高,这一点无可否认。国家各种人才都是需要的,但 是作为个人奋发向上的想法还是应该有的,努力在自己喜欢的行业上做的更好,而不应该 停留在比较肤浅的层次上。 我是一个自己觉得比较有自知之明的人,或许我最大的优点就是知道自己有很多缺点 :)。我的故事中很多的曲折和错误都是由我的缺点造成的,希望大家用审慎的眼光看待 我的经历,不要被我的“花言巧语”所迷惑。我学习有些随心所欲,这给我带来了无尽的 麻烦,也大大阻碍的我的发展。记得我小时候成绩比较出色,但是后来学习严重偏科,导 致我中学成绩一再滑坡,也没有考上什么好的学校,小时候的一个朋友,当时的成绩和我 相仿,但是没有我这个缺点,她上了清华,后来在去了美国深造,在一个著名导师手下研 究理论科学,这未尝不是一条更好的出路。另外我的学习方法也是在不断改善中的,过去 的学习过于讲究数量和时间,那样学习既苦而已效率不高,现在我非常注意学习的效率和 技巧,这样才是学习的捷径(当然不是指投机取巧),比如说学一相对陌生的技术,如果 有条件,不妨问一问有经验的人,不需要问很多,往往他不经意的几句话会给你非常大的 帮助,甚至超过你看一个星期的书。带着这样的思想再去学习你会节省很多时间,这样何 乐不为呢?这些年中我学了不少的东西,由于开始非常盲目,所以学的东西杂乱无章,现 在回想起来让我啼笑皆非,我把大量的时间浪费在一些没有必要深入了解的知识上,毕竟一 个人的精力是有限度的。很多朋友很我一样都背过五笔字形,的确它是个不错的输入法,但是对一个研发人员它绝对不值得你去背,你的时间应该花在有价值的地方。我这样的事情还做过很多,我背过CCED、WPS的命令和快捷键,在dBase基本退出 历史舞台后我还花了很多时间去学习它的使用。所以我的学习在前期缺乏规划,没有明确 的短期目的、中期目标,只有一个虚无飘渺的长期的理想。这就像做设计一样,好的设计 是从需求抽象到代码有很多过程,而不能得到了需求就立刻开始开始编码。 当然这么些年的学习和工作多多少少有些收获,下面我说说我的一些学习的心得,这 些方法未必正确,我也在不断探索和改进中。我的学习和工作有相对明确的目标,我不会 一时心动而去学习某一技术,在下决定之前我会考虑很多,包括长期的发展,个人路线的 规划,需要付出的代价、可能遇到的困难及解决的办法等等,在决定后还会制定更加明确 的计划,包括短期、中期和长期的,身边可以利用到的资源(包括好的书籍、资料、软硬 件环境,也包括有经验的朋友或者师长),以及每一个阶段是怎么过渡到高一阶段的计划 ,往往在一个学习阶段一旦上路后会走的相对顺利,但是跨阶段通常比较麻烦,比如从学 习基础知识转到实践。另外我买书也有自己的方法,现在世面上高质量的书远不如低质量 书多,对于一个陌生的技术,往往在第一次买书会选择错误,即使买到一本好书但是它的 方向也未必适合你,所以我通常会先在网上查找一些该技术的介绍,有了一点点概念后再 去买一本比较薄、相对便宜并且内容相对泛泛而谈的书,这是国内作者最善于写的书:) ,再把它浏览一遍后我就会基本明白这门技术的要点,后面买书和制定计划就会明确的多 。否则一开始就想找本好书往往比较困难,而且买回来后努力学习,有时候学了一半才发现 是本低质量的书或者是相对过时技术,让人非常懊恼。另外让有经验? 人帮你介绍,通常也是一个不错的选择。 有些朋友想学通信、嵌入式开发,但总觉得自己没有软硬件环境,我就按我的了解给 大家介绍一下怎么建立这样的环境,当然我了解的只是我学习和工作的方向。通信我做的 是数据网方面的工作,包括TCP/IP、二三层交换、对接入网、H.323和软交换也有一点认识 。这些软硬件环境都是可以在PC上构建的。你甚至可以在一个没有网卡的PC上建立一个包 含多个路由器、接入服务器、VoIP网关、网守、主机等的仿真网络环境,而且与实际的网 络相当接近,当然这需要你有清晰的网络概念和一定的网络知识,我一直在努力开发一套 软件将这个过程简化,目前试验已经做完,我可能会将它融入我的操作系统外围扩展软件 中。这样的方法我无法用简单的语句讲的很清楚,我可以说一下大概的思想,就是在PC上 实现仿真网卡,(知道Windows怎么在没有网卡的机器实现虚拟网卡技术的朋友都应该会明 白),然后每一个仿真网卡对应一个虚拟设备,如路由器或者主机。你也可以借助第三方 工具完成部分工作,如VmWare等。我现在就是利用一个仿真网卡做自己的开发的。 至于嵌入式开发环境更加容易实现,PC就是一个非常大的硬件平台,现有的嵌入式操 作系统通常都支持X86,你可以在上面做开发,通过软盘Boot或者使用虚拟机装载,我用V xWorks做了试验,在一台PC上跑Windows和VxWorks两个系统。另外Windows上的兼容DOS的 16位仿真X86环境也为很多操作系统提供了绝佳的试验环境,我的操作系统在Windows上就 是这样实现的。Linux在嵌入式中应用也比较广泛,它在网上有大量的资料,而且也相对比 较容易实践。同时很多完善的嵌入式开发环境支持软件仿真,如Tornado、WinCE等。 个人签名: --------------------------------------------------------------------------------------------------- 我情你愿,何必问个所以然?你喜我欢,人生其实很简单。
不能为空
不能含有 ` 字符,字数8000以内
(CTRL+ENTER提交)
关闭窗口