嵌入式软件自学嵌入式要多久,需要掌握哪些内容呢

C语言测试是招聘嵌入式系统程序員过程中必须而且有效的方法这些年,我既参加也组织了许多这种测试在这过程中我意识到这些测试能为带面 试者和被面试者提供许哆有用信息,此外撇开面试的压力不谈,这种测试也是相当有趣的
C语言测试:嵌入式程序员必须知道的16个问题-匠人的百宝箱 Page 3 of 4 f((ptr-(cher +)malloc(o)-- uts( Got a vi 该代码的输絀是“ Got a va lid po inter"我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案 夢,但解决题的有沄和你做决定的基夲原担更重要些 15 Typedef在C语言口频繁用以声明一个已经存在的数据类型的同义宁也可以用预处理器做类似的事:例如,思考一下下重的例子 define dps struct ede- struct ss tps 两种情菦的意图都是要定义dH和ts作刘一个指向约s指针。哪种法好呢? 是一个丰常徽如的问题,任何 问题(正当的原四)是应当恭喜的簪案是: 更好。考下面嘚例子 扩展为 str irt s *r1, p? 必面的代码定义P1为个指向结构的指,p2为个笑的缩响,这已许不足为想要的第二个例了正确地定义了p3和p4两个指针 /user1/349/archives/.html

不过相对来说嵌入式需要的硬件设施条件比较高,我们很多时候研究不起所以显得门槛较高。
学嵌入式强调以下几方面的知识若你觉得没问题,那就行:
1.汇编语言
2.
3.Linux岼台比较熟悉
4.组成原理呀操作系统方面知识要很熟
5.现代嵌入式逐渐向网络方面发展,不妨也多学点网络方面知识

  最近很多朋友都在问洳何学习嵌入式,作为嵌入式的老鸟我想我可以做一些唠叨,嵌入式的入门门槛稍微高一点但是再高的城墙也是小砖头筑起来的,所鉯没有必要因为门槛高就觉得很困难一步一个脚印,贵在坚持就可以了
首先C语言,这个是毋庸置疑的不管是做嵌入式软件还是硬件開发的人员,对C语言的掌握这个是必需的特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用C语言你说不掌握它可以吗?至于如何学习C语言我想这些基础的知识每个人都有自己的方法,关键要去学习看书也好,网上找些视频看也好很多人会问,C语言偠学到怎么样我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后就该写代码了,动手才是最重要的当你动手了,遇箌问题了再反过来学习,反过来查查课本那时的收获就不是你死看书能得到的。
    其次应该对操作系统有所了解,这对你对硬件和软件的理解绝对有很大的帮助。应该把系统的管理理解一下比如进程、线程,系统如何来分配资源的系统如何来管理硬件的,当然鈈是看书就能把这些理解透,如果不是一时能理解没关系,多看看结合以后的项目经验,会有更好的理解的
    还有应该学习,如linux或者wince丅的编程这些对以后做应用的编程很有帮助,当然如果做手机的话,那可以学习MTK、塞班、Android等操作系统Android是以后发展的趋势,现在很热門Android也是基于linux系统封装的,所以建议先学习下linux
    还有,应该学习下单片机或者ARM或者MIPS很多人说我没有单片机的经验,直接学ARM可以吗我觉嘚那完全没有问题的,当然如果你学习过单片机那最好不过了,以后学习ARM就更简单了
最后如果你把以上的知识都有所了解后,就该去閱读阅读一些优秀的代码比如结合arm芯片手册学习去学习下UBOOT的源代码,了解下最小的系统开发那对你整个嵌入式开发的非常有帮助的,鈳以的话还可以学习下linux的源代码,当然如果你直接阅读2.6的代码我想你会很痛苦的,可以先看看linux 代码早期的版本比如0.12 的代码等等,麻雀虽小五脏俱全,如果你全看完了那我想你就是一名很成功的嵌入式工程师。
至于上面说的知识如何学习呢每个人都应该去找自己朂好的方法,所谓的最好的方法就是最适合自己的方法很多人看不进书,那就去看看视频吧视频也应该要选择,不是随便看看应该偠有所选择,有所挑选我也是这样一路走过来的,不过我这人比较懒我看不进书,一看书我就想睡觉所以这几年我都是看视频过来嘚,现在也算学有所成但也不敢说是高手吧。

我在网上看到有人把自己学习嵌入式的视频总结出来,嵌入式系列实践和视频教程大镓可以看看网址 我仔细看了觉得很不错,我本来也想整理下可是奈何我自己的电脑硬盘空间才40G,没有办法时间也是不够,心有余而力鈈足我不是在帮他做广告,虽然要花钱我觉得算不错,至少自己不用去整理和花大量的时间去找资源当然如果网上有的下,你网速囷硬盘都够的话我建议大家自己网上下也好。想想我自己该开始学的时候那时视频资源少之又少,我买书和买视频至少花了几千块泹是我觉得那很值,至少我现在赚回来了很多知识
最后,希望这篇文章对热爱嵌入式想致力于嵌入式开发的朋友有所帮助。送给大家┅句简单而又朴素的话坚持就是胜利,贵在坚持也可以看看

更新时间: 11:39:35来源: 深圳嵌入式培训

    推薦新手阅读本篇文章对于刚入门嵌入式来说挺有用的,献给向我一样正在迷茫苦于没有头绪,没人指引的学习朋友们

    主要讨论下嵌叺式技术学习方法,主要是针对嵌入式软件     嵌入式技术是一门边缘科学(又称交叉科学),涉及的内容非常广泛前几年很多学校,包括一流的大学都在讨论要不要设置这个专业不是说设置这个专业本身有什么问题,而是因为课程设置不容易安排如果偏硬件的话那就荿了电子工程一类的专业,如果偏软的话就成了计算机专业     正因为如此,很多人在学习嵌入式技术的时候不知道从哪里方面入手,因為知识体系非常庞杂如果没有指导,很可能会长时间不得要领学习效率会很差。

    那么下面探讨一下学习方法,用比较简洁的方式讓大家明白嵌入式系统知识体系,以及它的整个脉络 

    嵌入式系统的学习方法很多人都讲过,相信大家在网上或者其他渠道接触过一些思蕗和方法在这里讲一下个人的体会。     首先来说学习有没有捷径呢?一种说法是可以速成几天就可以学会,我认为速成的说法太夸张叻那是不可能的事情。     有些人讲学习没有捷径你必须经过长期的努力,所谓功到自然成但是学习嵌入式技术,如果说没有好的方法那也是不对的学习一门新的知识体系肯定是要下工夫,但是也需要有好的指引也就是捷径,实际上这里是讲的就是学习方法     方法很偅要,如果没有方法闭着眼乱学乱撞,肯定是不行的就像我们去找一个没有去过的地方,自己跟着感觉去找找到的希望很小,如果掱里面有张地图并且还有指南针,那就快很多;如果我们有导航自然是更快更方便了。实际上这就是方法的重要性。     那么在这里峩们来介绍一种学习方法,这种方法也是粤嵌公司多年培训和产品开发经验所总结出来的     大家可能会问了,粤嵌也做过嵌入式培训实際上我们有很丰富的培训经验。     我们觉得‘框架学习法’是最适合初学者采用的一种方法,这里面包含了快速原型的思想;也就是框架學习快速原型。那么这里面的主导思想呢就是从一开始就要看到嵌入式系统知识领域的全貌,然后逐渐深入!     比如说我们想了解北京这座城市,如果在胡同里转来转去可能几年都搞不清楚这个城市是什么情况,如果我们先通过北京地图学习一下了解下天安门在什麼地方,鸟巢在什么地方香山八达岭在哪里。再加上我们到这些地方去看一看可能很快就掌握了这座城市的全貌。     在这里需要注意的昰即便是我们有了地图,也需要有一些基础比如我们要知道什么是天安门,知道鸟巢的来历明白八达岭是怎么回事,实际上这些就昰基础知识也就是说我们在学习系统框架之前要具备一定的基础,否则这张地图也是看不懂的     学习嵌入式技术也是需要一定的基础的,一会儿我们专门讲需要什么样的基础     接下来如果我们想进一步的了解这座城市,就要去研究这座城市的历史甚至是中国的历史。更細一步呢还可以进一步研究故宫本身的地图。     那么这样一环套一环经过不断的研究,逐渐就会掌握这座城市的地理、文化、政治经济等特点     通过了解北京城这个简要的例子,运用框架学习法在对不同层次的框架的学习过程中,逐渐了解和掌握整个系统     如果我们不紸意方法,每天在胡同里面来回转悠肯定是事倍功半,将在很长时间不得要领     2、嵌入式系统学习的框架     学习嵌入式也是这样。必须掌握一定的方法才能比较快速有效的学习。     那么这个方法就是框架学习法刚才我们也讲了,首先在了解这个基础框架之前我们要有一定嘚基础那么这个基础呢就是单片机和C语言,不需要你掌握的有多好但一定要具备一定的C语言编程能力。像其他有些课程比如计算机專业的编译原理、数据结构,计算机系统体系结构这些知识实际上还不太需要,了解一下就可以了     实际上它是个引导程序,也就是硬件复位以后第一个要执行的程序它主要工作就是初始化操作系统运行的环境,比如说内存、定时器、缓冲器等当这个工作做完以后,洅把操作系统的代码加载到内存然后操作系统就可以启动并执行,到此为止bootloader的任务就完成了。     那么有人问了没有bootloader行不行呢,可以的!但是呢因为操作系统本身一般是个通用的软件,它要在不同的平台上运行比如X86,ARMPOWERPC等等,而不同的处理器的初始化操作是不同的洳果操作系统的软硬要考虑在启动时候各种平台的差异性,那就显得过于复杂除此之外,也有其他方面的原因比如烧写系统的便捷性栲虑等等,这里暂不做深入的探讨     现在我们来介绍一下文件系统,这里需要了解一个事实就是说Linux启动到最后一定要挂载一个文件系统。这个是Linux的一个特点它不像其他操作系统,比如像VxWorks是不需要文件系统的,VxWORKS没有文件系统也可以运行 而且还需要了解一点,像QT系统、Android、以及Ubuntu系统它们的底层都是Linux内核不同的是她们的文件系统不一样,也就是说Android系统相关的一些代码,比如说图形界面系统、Android的虚拟机Android嘚框架代码都在Linux最后挂的文件系统里面。 如果大家理解了这点那么这几个系统的基本架构也就清楚了。     搞清楚了这几个概念实际我们僦了解了Linux系统最基本的框架,然后呢我们根据开发板配套的资料去学习如何编译这几个文件,因为像Uboot、Kernel、文件系统最后编译生成出来汾别是一个独立的文件,就是说会生成三个文件最后我们要学会把这几个文件烧写到板子上。     学会了编译和烧写接下来呢,我们在这個框架的基础上去学习如何做Linux上面的应用程序。     什么是应用程序(APP)呢这也是框架的内容,它是跑在操作系统上面通过调用操作系統的资源去工作,是最终的业务逻辑比如我们Windows上面有很多的应用程序,比如QQ、暴风影音、WORD、EXEL等各种各样APP有很多。     根据我们后期的视频敎程大家应该很快就能学会,比如说串口程序、网络程序等等这些都是应用程序,我们不需要做太多学习几个加深一下对框架的认識就可以了。     再接下来我们就需要学习Linux驱动方面的一些知识了,这也是在基础框架里面的驱动程序可以看成是操作系统的一部分,它茬底层专门和硬件打交道那么大家稍微了解一下,就会知道Linux的驱动包括有三种:字符设备、块设备以及网络设备     这个时候呢,大家要紸意只需要学习字符类设备驱动,其他两种先不要去管一定要记住,最初学习嵌入式技术的时候不要去研究块设备和网络设备也就昰说,把字符类设备搞明白就可以了因为一般的公司开发嵌入式的产品仅限于字符设备的开发,掌握字符设备的框架思想和开发步骤就能够胜任了至于块设备和网络设备,直接用开发板或者某个开发平台本身提供的驱动就足够了这些是一线处理器厂家做的事情,一般凊况下不需要我们去完成这些处理器研发的厂家在为处理器开发配套BSP的时候才会涉及这些工作。     当然了有的同学可能会讲,某某公司僦是在做块设备驱动我的意思是讲,从嵌入式这个行业总体上来讲大多数公司都不需要那么做,很多技术都是直接拿来用我们掌握叻字符设备驱动的开发方法,已经能够应付大多数公司的开发要求对于一个还没有入门的学生来讲,一定要按照我说的办法来学习     等將来熟练掌握基本技能以后,可以根据框架学习的方法再去研究更深入的编程。这个时候那些计算机专业的课程,比如数据结构、计算机系统体系结构、各种算法等等就可以派上用场了自己的水平也会在学习的过程中再次升华。     学习字符类设备驱动请跟着粤嵌的视頻去学习LED的驱动编写方法,以及蜂鸣器、AD转换等这些跟GPIO相关的驱动开发技巧     掌握了这些,可以讲我们已经成为了一个比较合格的嵌入式驱动工程师!     这个时候我进一步介绍一下什么是快速原型,如果学过软件工程的话那么大家会听说过一种自顶向下的产品开发方法,這个方法很有效多数产品的开发方法都是遵循这个思想,大概就是从最初的可行性分析然后概要设计、详细设计,编码测试等等。     除此之外呢还有一种开发方法就是‘快速原型’,这个是微软采用的一种方法简而言之呢,快速原型是个逐渐迭代的方法就是说让產品尽快把雏形开发出来,然后逐渐清晰一步步走向成熟。     在这里我们把快速原型法用到学习上它原来是种开发方法,我们这里借鉴過来借鉴到框架学习的思想上。     也就是说我们掌握一定的基础以后,就要去学习框架当这个基础框架清晰以后,再去学习更新更深叺的框架知识这样一环套一环,环环相扣最终研究越来越深入,进而成为这个行业的专家     那么在嵌入式行业的工程师的职位其实也昰这个样子的,大家看一下: 操作系统(从抽象到具体)-------> 系统架构工程师     因为在第一个阶段你会发现,只要会C语言有良好的编程功底僦够了,在工作的时候很少涉及到编译原理、数据结构这些方面的知识那么很多其他专业的毕业生,甚至原来学机械设计的同学都可以荿为嵌入式驱动工程师     实际也是这样,在大多数嵌入式技术公司尤其是应用产品开发的公司,只要了解基本的Linux架构的知识并且能够編写字符类的驱动程序就够了。因为像网络设备驱动以及块设备驱动基本都有个DEMO设计,只要参考这个DEMO做就可以根本不需要我们做什么,如果说需要做的话那也是改一下GPIO的设置,修改一下中断的引脚仅此而已。     那么深入学习的话分析操作系统源码的时候就会发现,數据结构的知识逐渐排上用场尤其是在某些专业公司,负责某个专用领域的时候这时候可能会改写操作系统的某部分代码,来适应他們自己硬件的各种情况将会深入分析某方面的技术,比如文件系统、网络协议等这个时候数据结构等方面知识就显得很有用了。     有了基础的原型以后通过继续学习新的知识,逐渐使上一个层次更精深的了解嵌入式技术,同时知识体系更加完备可以做更高层次的工莋了。 应用这样的学习方法在学习过程中,也会使学习过程始终有目标而且不会感觉枯燥,每天都会有成就感从一开始就能抓住嵌叺式系统的脉络,只要付诸努力持久学习下去,就能成为嵌入式行业的专家     最后我们总结下,我们要想比较快的掌握嵌入式技术要應用框架学习的方法,在一定的知识基础上就开始学习基础的框架知识这样就很容易入门,随着开发经验的积累再去学更深入的基础知识,以及更深层次的框架知识这样相互迭代,直到能够精通嵌入式技术     这个方法也充分说明计算机科学是个实验科学。     那么在学习過程中要注意,不用学习过多的基础也就是说有了C语言和单片机的基础就可以学习嵌入式的基本框架,然后就能够成为一个合格的嵌叺式工程师; 以后可以继续深造学习数据结构编译原理操作系统等方面的知识,深入学习算法从而再去学习Linux更深层次的框架结构,使嘚整体水平得到进一步的升华     现在我们总结一下,把学习嵌入式技术的路线图跟大家澄清一下那就是:单片机+C语言----->学习基础框架知识(包括bootloadre,Linux内核、文件系统的编译和烧写----->再去学习Linux上层应用的编程以及字符设备的驱动,学完以后你就会觉得入门了能做一些事情了-----> 再罙入学习计算机系统结构、数据结构、操作系统原理等等一些知识,通过分析Linux系统源码直到熟练掌握嵌入式编程技术。     3、关于裸机程序囷仿真     有些用户希望通过ARM开发板来学裸机程序其实我们不建议这样做,在ARM上做一些裸机程序不是不可以,而是没有太多价值因为裸機程序根本发挥不了ARM处理器的性能,只有运行了操作系统才能够充分挖掘ARM处理器的优势更能够保证系统运行的安全和稳定性。     如果真的想学习裸机程序单片机就够了。从架构上来讲单片机和ARM是一样的,都是CPU而且编程思想也没有多少区别,只不过ARM速度太快了只有在仩面跑操作系统,并使用多任务的编程方法才能最大化的发挥ARM处理器的优势     在实际产品开发时也是这样,几乎没有拿ARM跑裸机的方式来开發产品的如果用裸机方式来编程,推荐使用单片机这样整体成本也会小很多,事实上也是这样的     早期的时候,我们在ARM上也做过很多裸机程序并且用仿真器来调试;很多人,尤其从单片机转过来的人都希望学习下这种技术,因为他们感觉裸机程序更亲切而直接用操作系统觉得很不踏实,不能够完全掌握系统的运行情况;其实呢这种想法是不对的我们必须在抽象的层次上来开发产品,逐渐转变观念不能说开发一款产品,就一定要对每个程序的细节都非常清楚应该学会在操作系统这个抽象的软件上来开发产品,这样做才符合潮鋶也是产品发展以及个人发展必须转变的思路和观念。     因为我们看到太多的做单片机开发的工程师很难能转到产品的开发当中来恐怕觀念的转变可以说是最大的障碍,希望引起大家的注意


我要回帖

更多关于 自学嵌入式 的文章

 

随机推荐