首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如何成为一名嵌入式高手--一位过来者的经验分享

如何成为一名嵌入式高手--一位过来者的经验分享

学嵌入式就像练一门武功一样,要想成为一个高手,首先要打好基础,磨刀不误砍柴工,说的就是这个道理。嵌入式系统涉及到硬件、底层驱动、操作系统以及应用程序各个方面,在系统学习之前,先把基础打好,后面的学习将事半功倍。如果前面的打不牢,今天学点这个,明天学点那个,看到别人学得有声有色,自己貌似折腾了半天,啥也没学会。很容易受到打击,半途而废。


举个简单的例子,同样是练乾坤大挪移,明教教主阳顶天撑死了也就练到第四层,最后走火入魔,惨死在光明顶的隧道中。而张无忌只练了几个时辰,就练到了最高层第六层(第七层该武功发明人也没有练成)。为什么呢?就是因为张无忌内功深厚,有九阳神功护底。有了好的基础和内功,再学习其它招式,那是信手拈来,不费吹灰之力。


对于有志于嵌入式系统开发的新手来说,同样需要深厚的基础和内功,那就是对计算机体系结构和原理的理解,对C语言的掌握。对于嵌入式开发来讲,C语言绝对是必须要掌握的。
计算机运行的基本原理、存储的概念
程序的编译、连接、生成
内存的堆栈、代码分布
指针的高级使用、链表、动态内存的使用、内存泄露的概念
都是必须要掌握的,如果你对这些不熟悉,没搞明白,就直接兴冲冲地买个开发板,一遍喊着,我要努力,我要奋斗,然后开始了嵌入式之旅,折腾了一个月,按照教程走了一遍,你发现你仅仅是做了一遍,不懂的还是不懂,而不是真正掌握了嵌入式的精髓。


所以说,在学习嵌入式之前,一定把C语言搞精通,一定要把C语言搞精通,一定要把C语言搞精通,一定要把C语言搞精通,重要的话说三遍,我已经说了4遍,可见C语言的重要性。


学完了C语言,接着就可以练练ARM的裸机编程,买个开发板,将ARM的模块程序都跑跑,自己改改,增加一些功能。注意,不能所有的模块都跑一遍,这不是个好方法,时间精力有限,可以挑自己感兴趣的几个模块。关键是理解程序的运行原理,通过模块的程序理解ARM的编程方法、控制方法、中断的使用、寄存器的配置使用。这个才是你最终要学到的效果。


掌握了裸机编程,接着就可以玩玩操作系统了。操作系统也是一门比较难理解的课程,尤其对于非计算机类的,可以看看一些操作系统的经典书籍如塔利班母的操作系统设计与实现,挺好,知道任务调度、内核抢占、多任务等基本概念后,可以找个简单的操作系统学习:比如uc/os,代码也就5500多行,但是其完整实现了一个操作系统的基本要素。试着将该操作系统的最新版本源代码移植到你的arm开发板上,然后,试着编写一个多任务程序。等到了这一步,你基本上对操作系统的多任务编程以及进程间通信有个大致的了解了。接着你就可以玩重量级的Linux了。


不要一上来就看内核,看网上推荐的那些大砖头书,看得云里雾里,看来一个月不知道再讲些什么,陷入其中无法自拔,想要放弃,甚至开始怀疑人生,这时候估计你也开始对自己的智商产生了怀疑,觉得自己不是干这块的料。妈的,看了这么久,不知道在干什么。


任何一个复杂的东西都是由简单组成的。我们学习也是这样,一个东西,对它的理解也要遵循有简单到复杂,由表及里的一个认知过程,学习Linux也是这样。首先,我们要学会怎么用?学会Linux的基本命令,打包文件、系统管理等日常操作学习,这些可以看看鸟哥的Linux私房菜,针对初学者的教程,很好。掌握了Linux的使用,接着就可以学习Linux下的C语言应用编程。看到这里,估计很多有嵌入式驱动情怀的同学,肯定会说:NO!我想学驱动,我想搞驱动。其实,驱动开发只是嵌入式开发很小的部分,驱动开发的测试,我们也需要应用程序编写来测试,而且只有掌握了应用程序的编程,你开发驱动时才能更好地与应用成进行交互。所以这一步肯定不能省,这里可以参考Unix环境高级编程,经典的一本书。


驱动开始了!高能量
也许很多做嵌入式开发的都有一种情怀,那就是必须搞驱动,只有搞驱动,才算真正的嵌入式开发。其实在实际工作中,驱动开发的工作需求很低的,我说的是真正的驱动开发,大部分都是做维护和优化的工作。真正做驱动开发的也就是芯片原厂,他们在芯片研发成功后,会一直Linux和Android系统在上面,开发驱动,然后做成解决方案,卖给手机厂商。手机厂商基于这个软硬件平台方案做二次开发。而原厂这些驱动开发真正自己写驱动的也很少,大部分IP都是购买的,IP厂商提供了一些列解决方案。举个简单的例子:GPU驱动。一个芯片原厂在研发一个芯片前,一般会到IP厂商去买GPU的ip,集成到自己的芯片上,IP厂商在提供这个IP的同时,还会提供各个操作系统下的驱动源码,这样,其实真正开发驱动的很少,不是开发不出来,而是时间不允许。所以,驱动开发的实际需求很少。
这时候很多有驱动情怀地可能比较失落了,其实也没必要。现在芯片厂商越来越多,驱动职位也是很多的。外设、模组很多职位也是很大的需求。关键是:嵌入式真正产生价值的地方不一定是在驱动!
现在随着物联网、智能硬件的火热,无线通信、设备与设备之间的连接,才是真正产生价值的地方。整个系统的嵌入式开发,打造一款智能的点子产品,才是产生核心价值的地方。所以说,聪明的人将会往整个方向上开始去储备能量了。如果你能使用一款arm平台,连接到物联网上,比如QQ最近推出的QQ物联,给你的arm平台设备申请一个QQ号,加你为好友,然后你跟你的设备聊天,整个流程走下来,你会发现你对嵌入式整个系统的理解远远比你单纯做一个模块的驱动、配配寄存器深刻得多。
当然还有很多方向,比如内核的虚拟化,云计算开发、嵌入式系统的低功耗、系统稳定、多核编程、系统优化都属于嵌入式系统开发的范畴,不一定非得做驱动。
返回列表