比较赞成HotPower的观点. 本人从94年开始接触电子,98年开始学51汇编,99年开始学C语言,2000年开始学VC,2001年开始学CPLD/VHDL. 2002年开始在某国内大中型企业工作,一进去就取代了当时公司所谓的软件高手(硬件高手为一五六十岁的大伯,从来不用PC,用三极管设计电路没得说,谁敢碰?) 原因很简单:一本32开的很古老的51书(名字忘了,现在的51书基本上都是抄来抄去,一大堆错误,垃圾得很)看了不下200遍,每个角落都看过去了,每次看它都有新的以前未发现未注意的地方,以致对51的硬件结构和软件都非常熟,所以现在对其他单片机,一般看一周的datasheet就没问题了. 当时所做的工作是用SAMSUNG的单片机(8MHz)控制一片SDRAM做ADPCM算法(语音压缩与解压).当时全公司居然没一个人会ADPCM的.而我所做的工作是先用VC在PC上写ADPCM算法,验证,然后移植到汇编.在VC上验证ADPCM需要通过Windows系统的多媒体函数读取MIC数据,或是WAVE文件数据,然后通过声卡播放PCM数据.用C语言做算法出错的机会比汇编语言小,所以做算法的时候不妨先用C语言在PC上验证,然后再转成汇编. 2006年要分析一个I2C协议的东西,400kHz速率,数据包格式不明.当时公司的其他工程师普遍觉得用AVR单片机IO口读I2C的SDA和SCL数据,然后分析START/STOP/ACK等,再把I2C数据通过RS232发到PC分析.而我认为AVR速度不够分析I2C数据(识别START,STOP,ACK等),应把SDA和SCL高低电平数据直接拿到PC分析,另外我觉得用60MHz的LPC2106比较好,因为它的RAM也大,RS232速率不够时可以缓冲.各方**己见,最后两个方案同时进行.当然最后采用AVR的方案失败了.I2C说起来简单,但是真要分析出START/STOP/ACK,还要把数据保存下来通过串口发往PC,其实工作量是不小的,后来发现就是用60MHz的LPC2106,光采样SDA和SCL,并保存到RAM,速度也就刚刚够.另外还有一个原因,那些工程师不懂VC,只能用现成的串口软件.而我用VC自己编的专用I2cSniffer软件,能实时分析I2C数据包数据,并且显示也非常直观. 2008年做一个ARM9系统开发,基于LINUX系统,没有仿真器,8MB的NOR FLASH(16bits宽度)用于存储程序,下载程序主要是用串口.拿到项目当时很多人就晕,8MB的程序用串口烧,一天能烧几次?不过没难倒我.上网找NOR FLASH仿真器,什么?只有2MB(16Mbits)的?没关系,自己做!于是用ISP1581+EP1C6Q240C8自己做了一个USB2.0的NOR FLASH仿真器,自己写烧录软件和USB驱动程序以及VHDL(FPGA)程序.经过测试,烧写整个8MB的Flash也只需要30秒左右,整个项目速度大大提高.
工具有时候很重要,而且不是所有的工具都是能用钱买到的,即使能买到,老板愿意吗?
在这个知识爆炸的年代,如果只会一门而死抱着不放,迟早要淘汰.十年前会单片机的人不发的是少数,现在刚会单片机能发的人也是少数. 当然也不能什么都学,却什么都不精.要有一门精通的,然后围绕着精通的熟悉周边的.
开发人员就是这苦命,一天不学,你就准备着被淘汰.
to 88楼:照楼主的说法?现在的跟MCU有关的东东,都得用上PC编程了?我看未必,无论大小项目,我觉得关键是定义好接口,一个项目下来,全部自己完成的人,只能说无聊罢了;物尽其用才是王道! ---------------------------------------------- 跟MCU相关的东东未必都用得上PC编程,不过会用PC编程有时会快很多.能独立完成项目是高手最起码的要求,不能独立完成项目会在项目中很被动.举个简单的例子,一个MCU系统运行不稳定,该系统由3个工程师完成:硬件工程师设计原理图,Layout工程师完成PCB布线,软件工程师写程序.假设你是软件工程师,你觉得不是软件的问题,而原理图设计工程师和Layout工程师都信誓旦旦说不是自己的问题,你怎么办?作为电子工程师,不一定要硬件设计/PCB LAYOUT/嵌入式编程/PC编程全部精通,但至少要精通一门熟悉其他几门.
to 94楼:抱着汇编不放是个错误的想法,用C语言一个晚上就能搞一个简单的应用程序,汇编能行吗?除非对实时性要求相当高的场合用汇编,但也可以用C与汇编混合编程来解决问题. ---------------------------------------------- 如果没有成本和硬件资源(例如MCU的ROM和RAM空间)的限制,而C编译器也很完善,当然好.但当你项目做到一半发现刚好ROM就差那么几十个字节的时候,或是RAM就差那么几个字节的时候,或是C编译器出问题的时候,或是处理速度就慢一点点的时候,你怎么办?换芯片?项目重新开始? 汇编语言不一定要用,但一定要有准备在关键的时候用.高手和新手的差别,往往就是关键的时候一点细微的地方表现出来的. |