嵌入式学习方法
- 格式:doc
- 大小:45.00 KB
- 文档页数:5
嵌入式开发都需要学习什么这是一个初学者常问的问题,也是初学者问嵌入式该如何入门的根源。
我感觉有两个方面,偏硬和偏软.我不认为嵌入式开发软件占绝对比重,相反,软硬件都懂,才是嵌入式高手所应该追求的,也是高手的必由之路。
硬件道路:第一步:pcb设计,一般为开发板的电路裁减和扩充,由开发板原理图为基础,画出PCB和封装库,设计自己的电路。
第二步:SOPC技术,一般为FPGA,CPLD开发,利用VHDL等硬件描述语言做专用芯片开发,写出自己的逻辑电路,基于ALTER或XILINUX的FPGA做开发。
第三步:SOC设计,分前端,后端实现,这是硬件设计的核心技术:芯片设计.能做到这步,已经不属于平凡的技术人员。
软件道路:第一步:bootloader的编写,修改,通过这步熟悉ARM硬件结构,学习ARM汇编语言,阅读ARM的芯片手册,感觉就是像操作51单片机一样操作ARM芯片.这一步最好的两个参考资料就是:芯片手册和bootloader源代码。
第二步:系统移植,驱动开发,我只做过linux方向,所以也推荐学习嵌入式linux系统,作为标准体系,他开源而且可以获得大量学习资料.操作系统是整个计算机科学的核心,熟悉kernel实属不易,kernel,驱动开发的学习,没有什么捷径,只有多读代码,多写代码,熟悉系统API..understanding linux kernel,linux device driver都是不可多得的好书,值得一看。
第三步:应用程序的编写,各种GUI的移植,qt,minigui都被大量采用,两种思想都类似,熟悉一种就可以。
软件道路中,驱动,系统应该是最深入的部分,不是短时间可以掌握的,需要有勇气和耐心。
嵌入式开发,软硬结合,因为硬件条件比PC差很多,所以肯定会遇见不少问题,因此实践的勇气更加重要.有问题就解决问题,无数次的实验,也许是解决问题的必由之路。
如何规划嵌入式学习路线基础知识学习:了解计算机系统的基本知识,包括操作系统、计算机网络、数据结构和算法等。
学习嵌入式系统的相关知识,包括嵌入式处理器、嵌入式操作系统、嵌入式应用程序设计等。
学习硬件设计的基础知识,如电路设计、模拟电路、数字电路等。
学习C语言和嵌入式系统开发框架,如STM32、Linux等。
学习基础编程:学习嵌入式系统的基础编程,如GPIO、I2C、UART、ADC、PWM等。
学习常用的嵌入式系统开发库和框架,如STM32、Linux等。
学习常用开发工具:学习如何使用开发板的开发工具,如JTAG调试器、烧写器等。
学习如何使用IDE进行嵌入式系统的开发,如Eclipse、Visual Studio等。
实践项目开发:通过实践项目开发,加深对嵌入式系统开发的理解和掌握。
可以选择一些开源项目,如WiFi模块、GPS模块、电机控制器等,进行项目开发。
参加课程和培训:参加一些嵌入式系统开发的课程和培训,可以学习到更多的知识和技能,同时也可以结交一些志同道合的朋友。
需要注意的是,嵌入式系统的学习需要有一定的基础知识和实践经验。
建议在学习过程中选择一些入门级的嵌入式开发书籍和课程,如《C语言嵌入式系统开发》、《嵌入式系统设计与实践》等,同时在实践中不断地学习和提高自己的技能水平。
此外,建议在学习的过程中注重理论与实践的结合,多动手编写代码,不断提高自己的技能水平。
嵌入式物联网需要学的东西真的非常多,不少人因为学的路线不对、内容不对头而和高薪offer擦肩而过,甚至有些老铁压根都不知道要学什么……让人捉急……分享一波自己整理的学习资源吧,基本上要学的内容都有,150多G。
点击这里找小助理0元领取:。
作为一个新人,怎样学习嵌入式Linux?(韦东山)被问过太多次,特写这篇文章来回答一下。
在学习嵌入式Linux之前,肯定要有C语言基础。
汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。
C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。
比如写一个数组排序、输入数字求和什么的。
学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。
以前我是用VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。
它们是纯C、纯数学、纯逻辑的题目,不涉及界面这些东西,很适合煅炼你的编程能力。
回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux 可以分为两部分:底层系统、应用开发。
如果你是想做应用开发,那么你去把C 语言、数据结构、JAVA什么的学好吧。
嵌入式应用开发和PC上的应用开发并没有什么特别要注意的。
也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。
另外,当你有能力去优化时,你已经不用来问这个问题了。
具体到某个例子,比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。
但是基础还是C或JAVA,在此基础上去熟悉它们的接口。
你学过VC的话,也是要花时间去了解那些类、控件的。
如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。
在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用?我只能说凭兴趣,并且驱动和应用并不是截然分开的1. 我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念。
想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该懂2. 做应用门槛低,特别是现在的ANDROID,纯JAVA。
做应用的发展路径个人认为就是业务纯熟。
比如在通信行业、IPTV行业、手机行业,你了解行业的需求。
1华清远见嵌入式培训官网:嵌入式系统开发学习路线嵌入式人才成为了IT业界的新宠儿也就在这几年。
在这样一个炙手可热的行业当中,越来越多的人想跻身这个行业。
怎样才能成为一名优秀的嵌入式大师。
只要你积极不断提升自己的专业技能。
哪怕以后有再多的人跻身这个专业。
你同样可以成为业内的佼佼者。
想学好嵌入式单单找几本书看看是远远不够的。
其实嵌入式的门槛还是比较高的,当然只要我们找到合适的应对方法。
也就把握了解决嵌入式开发的“死穴”华清远见小编就跟大家分享一下嵌入式系统学习路线,希望能够帮助到大家!基础学习:Linux入门+C语言+Linux应用程序设计Linux入门:目前嵌入式主要开发环境有 Linux、Wince等;Linux因其开源、开发操作便利而被广泛采用。
不应纠结于那个版本,而是尽快把 Linux系统尽快安装好。
如果打算坚持长期学习,那么建议您把自己的电脑做成双系统,而不要在虚拟机上安装;C语言:C 语言是嵌入式开发必备的基础知识。
学习C语言,如果不会用指针,那么就称不上会C语言。
做嵌入式开发指针更显得尤为重要,在嵌入式学习过程当中,C语言就像是整栋嵌入式大厦的基础,你只需要通过多敲、多练就一定可以成为一名准嵌入式工程师。
Linux应用程序设计:Linux的思想源于Unix,Linux继承了Unix的优点,而且Linux与Unix的源码级兼容。
“万丈高楼平地起”也就是说这三方面是非常重要的。
嵌入式入门:ARM体系结构从这部分开始,我们就真正要进入嵌入式开发学习的阶段了,首先我们应该了解ARM的技术特征,明白他的成功主要是基于两方面,一、得益于它独特的公司运作模式;二、来自于ARM处理器自身的优良性能,以及ARM处理器的相关特点等等……嵌入式提升:Linux内核、驱动众所周知嵌入式开发包含至少两个级别,一个是嵌入式内核驱动级别,另外一个是嵌入式应用层开发,而薪酬高的、最具价值的无疑是嵌入式内核驱动级别的开发者。
微课“嵌入式”教学法在中职语文中的应用一、嵌入式教学法的概念和原则1.概念:嵌入式教学法是一种把课本知识与学生的生活实践中的问题相嵌入到教学中,使学生在思考、分析和解决问题的过程中,学习知识,并将知识转化成实践技能的一种教学方法。
2.原则:①问题导向:以学生的生活实践中出现的问题为导向,让学生在问题中学习,由问题引发学习兴趣。
②多元化:因材施教,尊重学生的个性特点,让学生学以致用,发掘其潜能。
③主体性:让学生成为学习的主体,把学生的经验、观点和想法导入到教学中,实现教学目标。
④实效性:注重学生的实际学习效果,以实践为校验,使学生掌握知识并能够运用到实践中。
1.教学内容设计在教学内容的设计上,要根据学生的生活实际和学科特点来选取教材内容,尽量选择和学生生活有关并能引发学生学习兴趣的话题,通过问题分析、案例研究等方式,将课本知识与现实情境相贯通,培养学生综合运用语文知识的能力。
例如,在写作教学中,可以选取学生喜欢的文学作品,引导学生以小说、散文等文学形式来发挥想象,进行写作。
同时,在提高语文阅读能力方面,可以结合学生喜爱的时事新闻,让学生阅读新闻,分析新闻中涉及的问题和议题,引导学生用语文的视角来看待社会热点事件。
2.教学方法运用在教学方法上,应该注重引导学生在问题中学习,多采用探究式教学、讨论式教学、分组合作等方式。
在讲解知识点的同时,也要引导学生用语文知识来分析和解决生活实践中出现的问题。
同时,要根据学生的学习特点和实际情况,有针对性地应用多种教学方法,提高教学实效。
例如,在写作教学中,可以通过讨论式教学的方式,引导学生分析不同文体的写作方法,让学生在小组中讨论如何用不同的语言风格和表达方式来刻画人物,编写出生动、细腻、准确的作品。
3.教学手段使用在教学手段的使用上,应该采用多样化教学手段,丰富教学内容和形式,提高教学效果。
应用数字化、网络化等现代技术手段,将文本、图片、音频、视频等资源融入到教学中,开发教学软件、课件等多种教育资源,以便能够更好地激发学生的学习兴趣和学习效果。
嵌入式学习计划手帐模板学习目标:1. 熟练掌握嵌入式系统的基本原理和工作原理2. 掌握嵌入式系统的开发和调试技术3. 熟练掌握常见的嵌入式系统开发工具和平台4. 获得实际项目经验,能够独立完成嵌入式系统的设计开发学习内容:1. 嵌入式系统的基本原理和概念2. 嵌入式系统的开发平台和工具3. 嵌入式系统的编程语言和调试技术4. 嵌入式系统的开发流程和项目管理5. 嵌入式系统的实际项目经验积累学习计划:第一阶段:理论学习(1-2周)- 学习嵌入式系统的基本原理和概念- 理解嵌入式系统的开发平台和工具- 学习嵌入式系统的编程语言和调试技术- 制定学习计划,规划学习内容和时间安排第二阶段:实践操作(3-4周)- 进行嵌入式系统的实际操作和编程练习- 利用开发平台和工具进行嵌入式系统的开发和调试- 学习嵌入式系统的实际项目案例,积累项目经验第三阶段:项目实践(4-6周)- 参与嵌入式系统的实际项目开发- 独立完成一个小型嵌入式系统的设计和开发- 锻炼自己的解决问题能力和团队合作能力第四阶段:总结和反思(1周)- 总结学习收获和项目经验- 分享学习成果和项目成果- 反思学习过程,总结经验教训学习方法:1. 多看书籍和相关资料,扩展知识面2. 多与同行业人员进行交流,学习他们的经验和技巧3. 多进行实际操作和编程练习,磨炼技能和提高实战能力4. 多思考和总结,及时反馈和改进学习曲线:1. 初期可能会遇到理论学习困难,需要借助书籍和资料进行补充和拓展2. 进入实践操作阶段,可能会遇到技术问题和困难,需要多进行思考和实践3. 参与项目实践阶段,可能会遇到组织协调和资源管理问题,需要多与团队成员进行沟通和协作4. 总结和反思阶段,需要对整个学习过程进行深入总结和反思,不断优化和提高自身能力学习成果及评估:1. 完成嵌入式系统的设计和开发2. 完成嵌入式系统相关项目实践3. 获得参与嵌入式系统开发的实际经验4. 深刻理解和掌握嵌入式系统的基本原理和工作原理学习时间安排:- 每天学习时间:3-4小时- 每周学习时间:20-25小时- 每月学习时间:80-100小时学习资源准备:- 嵌入式系统相关书籍和资料- 嵌入式系统开发平台和工具- 嵌入式系统项目案例和实践经验学习心得和收获:- 学习嵌入式系统让我对技术有了更深入的理解,同时也锻炼了我的编程能力和实战经验- 参与嵌入式系统的项目实践,让我感受到了团队合作的重要性,也学到了很多项目管理和资源协调的经验- 总结和反思学习过程,让我意识到了自己的不足和提高的空间,也给我了更多的思考和规划方向总结:学习嵌入式系统是一个循序渐进的过程,需要我们不断学习和积累经验,才能够成为一名合格的嵌入式系统工程师。
嵌入式开发要学什么? 我曾记得华清远见嵌入式培训机构的曹忠明写了一篇文章,当时非常火,就是关于嵌入式要学什么的文章。
我记得至少有10几个媒体的网站转发了。
我今天给大家扒出来。
只因为初学者实在很迷茫,想自学又不知道从哪学起。
此贴为雷锋帖。
抛弃长篇大论,只说重点或者说是从嵌入式开发流程来说。
1. 学习嵌入式开发,你得首先会用嵌入式Linux系统。
不会用更谈不上知道怎么去做,因此第一步,必须学习Linux系统的安装及使用2、学会用Linux了,那么我们就要做一些Linux下的开发了,开发什么呢?看到网上有很多很强大很有趣的程序,我们都可以尝试去做,可是如何去做呢,程序是什么呢,怎么写呢?这时我们需要学习一些语言,比如比较基础的C语言,比如面向对象的C++,Java等。
3、写完程序了发现不就是一个很普通的文件吗,怎么能像别人写的程序一样运行起来呢? 这时我们需要知道如何编译一个程序,需要知道编译器及一些其他工具的使用,比如GCC,在开发的过程中我们为了提供工作效率还会用到Make,Shell等,为了能够很好的管理我们代码的不同版本,我们还需要知道什么是SVC,CVS,subversion,git等。
4、当我们开始写一些比较大的程序,不再是以往的hello world级别的了,这时我们发现我们考虑的更多了,我们考虑到了程序的效率,我们发现需要读写文件了,我们发现需要和另外一台电脑通信了,于是我们有需要学习一些更高级点的东西了,比如数据结构,比如文件IO,比如多进程多线程编程,比如网络通信,这时我们会接触很多新的名词,什么是树,图...,什么是文件io什么是标准IO,什么是进程线程,什么是TCP/IP...。
5、当我们再进一步的话,我们会发现我们什么有很多的东西都运行的是Linux系统,可是他们和我的PC运行的Linux有什么区别呢,为什么我电脑要用风扇而手机不用风扇呢,我们打开网页查找手机的详细参数的时候,会看到Cortex-A15 、四核、ARM等等字眼,什么是ARM,什么是Cortex-A15,我们需要进一步的了解。
嵌入式学习计划安排为了更好地了解和掌握嵌入式系统的相关知识和技能,学生需要系统地学习和实践。
下面是一份嵌入式学习计划安排,来帮助学生更好地学习和掌握嵌入式系统相关知识和技能。
一、学习前准备在开始学习嵌入式系统之前,学生需要具备一定的基础知识和技能。
首先,学生需要具备一定的计算机科学和工程技术的基础知识,包括计算机组成原理、数据结构与算法、操作系统、计算机网络等方面的知识。
其次,学生需要对电子电路和数字电路有一定的了解,掌握一些基础的模拟电路和数字电路知识。
最后,学生需要具备一定的编程能力,包括C 语言和汇编语言的基础知识和技能。
二、学习内容和方法1.学习内容:(1)嵌入式系统基础知识:了解嵌入式系统的基本概念、发展历史、特点及应用。
(2)嵌入式系统硬件:学习嵌入式系统的硬件平台结构、处理器架构及各种外设接口。
(3)嵌入式系统软件:学习嵌入式系统的软件开发环境、嵌入式操作系统、嵌入式软件开发工具等。
(4)嵌入式系统开发:学习嵌入式系统的开发流程、调试技术和实际项目开发经验。
2.学习方法:(1)理论学习:通过阅读相关的书籍、论文和网络资料,了解嵌入式系统的基础知识和发展动态。
(2)实践练习:通过实际的实验和项目开发,掌握嵌入式系统的硬件和软件开发技能。
(3)团队合作:参与嵌入式系统开发项目,与团队成员合作,学习团队协作和项目管理技能。
三、学习计划安排1.学习周期:一般来说,学生需要花费至少一个学期的时间来系统学习和实践嵌入式系统相关知识和技能。
具体时间可根据学校的课程安排和学生的学习情况来确定。
2.学习步骤:(1)了解嵌入式系统基础知识:学生可以通过阅读相关的书籍和网络资料,了解嵌入式系统的基本概念和特点。
(2)学习嵌入式系统硬件:学生可以通过参加相关的实验课或者自主学习,学习嵌入式系统的硬件平台结构和各种外设接口。
(3)学习嵌入式系统软件:学生可以通过学习嵌入式系统的软件开发工具和编程语言,掌握嵌入式系统的软件开发技能。
知识图谱嵌入式表示学习方法研究知识图谱是一种将知识以图的形式进行建模和表示的技术,它能够对现实世界的实体、概念以及它们之间的关系进行高效地存储和查询。
为了更好地利用知识图谱,研究者们提出了一种名为嵌入式表示学习的技术,该技术能够将实体和关系映射到低维向量空间中,并通过向量之间的相似性来表示它们之间的语义关系。
本文将重点介绍知识图谱嵌入式表示学习方法的研究进展,并探讨其在实际应用中的潜力和挑战。
一、知识图谱嵌入式表示学习方法概述知识图谱嵌入式表示学习方法是一种基于向量表示的知识图谱推理技术。
它通过将知识图谱中的实体和关系映射到连续向量空间中,使得相似的实体和关系在向量空间中距离较近,不相似的实体和关系在向量空间中距离较远。
这种向量表示能够更好地表示实体和关系之间的潜在语义关系,从而为知识图谱的推理和应用提供了有力支持。
目前,知识图谱嵌入式表示学习方法主要包括基于传统机器学习的方法和基于深度学习的方法。
其中,基于传统机器学习的方法主要包括TransE、TransH和TransR等,它们通过定义不同的关系空间和投影方式来对实体和关系进行嵌入表示。
而基于深度学习的方法主要包括ConvE、TransD和ComplEx等,它们利用神经网络模型对知识图谱进行学习和推理。
二、知识图谱嵌入式表示学习方法的研究进展2.1 基于传统机器学习的方法TransE是一种常用的基于传统机器学习的知识图谱嵌入式表示学习方法。
它通过定义关系向量为实体向量之间的偏移量来对实体和关系进行表示。
具体而言,对于知识图谱中的三元组$(h, r, t)$,TransE将$h + r \approx t$作为训练目标,通过最小化该目标函数来对实体和关系进行嵌入表示。
TransH是TransE的改进版本,它进一步考虑了关系的多样性和复杂性。
TransH通过引入关系空间和投影方式,将实体和关系映射到不同的向量空间中。
这种方式能够更好地刻画实体和关系之间的语义关系,并提高知识图谱推理的准确性。
微课“嵌入式”教学法在中职语文中的应用一、微课“嵌入式”教学法的概念微课是利用信息技术手段实现的一种教学模式,其核心是利用网络平台进行教学设计与实施。
嵌入式教学法是微课教学中的一种教学策略,它强调将学科知识与实际情境相结合,通过在具体的情境中进行教学,让学生更好地理解并应用所学的知识。
微课“嵌入式”教学法的核心理念是“背景+知识”,即通过创设一个具体的背景情境,将知识嵌入让学生在参与情景的对知识产生兴趣并深入理解。
这种教学法注重学生的主动参与和体验,能够更好地激发学生的学习兴趣,提高学习动机。
二、嵌入式教学法在中职语文中的应用1. 创设真实情境在中职语文教学中,可以通过嵌入式教学法,让学生在真实的情境中学习语文知识,例如让学生通过参与角色扮演、模拟情境等方式来体验语文知识的应用。
在学习古代诗词时,可以组织学生们进行古装服饰的穿戴,通过模拟古代宫廷生活的情境,让学生更好地理解诗词的意境和写作背景。
2. 强化学习互动嵌入式教学法强调学生的主动参与和体验,可以通过设置问题情境、分组竞赛等方式来增强学生之间的互动,提高学生的学习动力和兴趣。
在学习古典文学作品时,可以通过分组竞赛的方式,让学生们在情境中解答问题,加深对文学作品的理解和记忆。
3. 推进跨学科整合在中职语文教学中,嵌入式教学法可以推进跨学科整合,让语文知识与其他学科知识相结合,提高学生的综合运用能力。
在学习中国古代名人故事时,可以结合历史学科的知识,让学生们通过情境体验来理解历史人物的生平和事迹,从而更好地理解和记忆历史知识。
三、运用嵌入式教学法的教学效果1. 激发学生学习兴趣嵌入式教学法通过创设丰富多样的情境,让学生在情境中体验语文知识的应用,能够更好地激发学生的学习兴趣,增强学习动力,提高学习效果。
2. 提高学生的学习体验通过嵌入式教学法,在学习中引入丰富的情境和互动体验,能够让学生在教学中获得更多的情感投入和互动体验,提高学习的深度和广度。
嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破。
只要我们用心去对待,冬雪终将化去,春风定会吹来。
具体步骤如下:1、《C语言》第二版谭浩强;《C程序设计语言》第二版徐宝文译机械工业出版社你能区分开指针数组和数组指针吗?你知道函数指针吗?你能区分开定义一个变量时系统给它分配的空间与用malloc()函数给一个变量分配的空间有什么不一样吗?2、《数据结构》C语言版黄国愉、叶乃青编清华大学出版社你能合上书本,用C语言实现书中的单链表、双链表数据结构吗?3、《实用C++程序设计》第二板中国电力出版社Steve_Oualline著此阶段主要是学习其面向对象的编程思想,加深对C语言和数据结构的理解。
4、学习单片机,最好能找个前辈带一带。
你能用51单片机做出一样实际的东西吗?即使它再简单!要注意加深对中断的理解。
5、学习ARM单片机。
(1)、细读《ARM微控制器基础与实战》周立工编写(注:即使你不用书中的开发板)(2)、细读相关芯片的原版英文文档。
如:arm920TE.pdf S3C2410_1.2.pdf6、学习uCOS!!操作系统。
(1)、细读《嵌入式实时操作系统uC/OS-!!》第二版召贝贝译你能把uCOS!!移植到自己的平台上吗?(2)、能编写在uCOS!!操作系统环境下运行的针对具体硬件的驱动程序7、熟悉Linux环境,学习Linux环境编程,学习交叉编程(1)、细读《linux命令大全.pdf》(2)、细读《GNU Make 使用手册(中译版).pdf》(3)、学习创建交叉编程环境.8、学习Linux操作系统。
(1)、《UNIX环境高级编程》(2)、细读“joyfire 笔记”,可在“”网站的好书下载栏目获取(3)、细读《linux内核完全注释》(4)、细读《understanding the linux kernel 2》(5)、利用源代码阅读利器工具"Source Insight"进行真正的linux内核原码刨析(6)、最后进行内核移植,并能编写在linux操作系统环境下运行的针对具体硬件的驱动程序9、学习Linux设备驱动编写。
可参考《Linux设备驱动程序》10、复习C++,学习用QT进行图形界面编程(1)、细读《QT编程宝典》(2)、学会通过查看QT电子文档进行QT GUI实地编程(3)、学习交叉编程.(其实就是把命令qmake变为tmake)11、当然,你也可学习一下PCB的制作和设计一个自己的CPU(即软壳)在嵌入式软件方面最重要的课程包括:(1)嵌入式微处理器结构与应用:这是一门嵌入式硬件基础课程,我们说过,嵌入式是软硬件结合的技术,搞嵌入式软件的人应对ARM处理器工作原理和接口技术有充分了解,包括ARM的汇编指令系统。
若不了解处理器原理,怎么能控制硬件工作,怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率),怎么能写出驱动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员时都要求熟悉ARM处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书(xxx Specification),你必须能看懂其中的内存分布和端口使用等最基本的说明(就像x86汇编一样),否则怎么设计软件。
有些同学觉得嵌入式处理器课程较枯燥,这主要是硬件课程都较抽象的原因。
还有同学对ARM汇编不感兴趣,以为嵌入式开发用C语言就足够了。
其实不应仅是将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理的。
一个不熟悉汇编语言的人,怎么能在该处理器写出最优的C语言代码。
在嵌入式开发的一些关键部分,有时还必须写汇编,如Bootloader等(可能还包括BSP)。
特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和图像解压缩),目前还会用到汇编写程序的,尽管用到的机会相对C要小得多。
当你在一个嵌入式公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的,这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时你就必须看懂汇编程序,否则软硬件人员可能就无法交流。
很多嵌入式职位招聘时都要求熟悉汇编。
[小知识] 目前嵌入式处理器常见的有ARM、PowerPC、MIPS、Motorola 68K、ColdFire (冷火)等,但ARM占据了绝对主流(有资料说手机中几乎90%都是ARM处理器)。
ARM是一个只卖知识产权的公司,目前获得购买了ARM CPU核授权许可的大公司很多,包括Intel、Samsung、Amstel、Motorola、Philip等,他们都在ARM CPU核的基础上进行了一些外围扩展,形成自己的处理器(如Samsung S3C2410,Motorola i.MXL9328等处理器都是采用ARM 9内核,指令一级是相同的)。
而众多中小公司又购买了这些处理器,设计了各种各样的开发板,如华恒等国内很多著名嵌入式公司都生产基于SamsungS3C2410的开发板,供最终用户使用或供教学实验。
在ARM这个食物链上,ARM公司是大鱼,Intel、Samsung等公司是小鱼,而华恒等则是虾米,最终用户(我们这些要采购嵌入式开发板的)则是喂虾米的。
Intel早期生产的是低端ARM(Strong ARM,相当于ARM 7),现在转向主要生产高端ARM(即Intel Xscale处理器,属于ARMv5家族,主要用在高端PDA上,如HP和DELL生产的PDA 都采用Intel Xscale,价格较高)。
目前应用最多的是ARM 7和ARM 9两类处理器。
ARM 7较便宜,可跑uclinux(是一个不支持高级内存管理功能的嵌入式Linux系统统)、Vxworks、uc/os II等实时操作系统,但因处理器不带内存管理单元MMU(无内存分页和地址映射机制,所以不能使用虚拟内存),所以不能跑Windows CE,另外通用Linux中的某些内存管理功能也不能用在ARM 7上。
ARM 9大都是一个带MMU功能的高端处理器,可跑WinCE或通用Linux的大多数功能。
ARM7和ARM9的区别是在与体系结构上,前者是冯·诺伊曼结构,后者是哈佛结构——指令和数据总线是分开的。
以上是我的一点了解,可能有不对的地方。
我们学院有十几套ARM 7开发系统(采用Samsung S3C44b0x开发板,主要用于嵌入式处理器结构、实时操作系统等课程实验用),ARM 9的系统好象也已经到了(采用的芯片我不知道也没去问),还有以前的十几套MPC860开发板(听说价格都很贵,很容易损坏),同学应爱护使用和珍惜这样的实验机会。
(2) 嵌入式操作系统类课程除了WinCE的实时性稍差外,大多数嵌入式操作系统的实时性都很强,所以也可称为实时操作系统Real Time Operating System.从事嵌入式的人至少须掌握一个嵌入式操作系统,这在嵌入式的所有技术中是最为关键的了。
目前最重要的RTOS主要包括:第一类、传统的经典RTOS:最主要的便是Vxworks操作系统,以及其Tornado开发平台。
Vxworks因出现稍早,实时性很强(据说可在1ms内响应外部事件请求),并且内核可极微(据说最小可8K),可靠性较高等,所以在北美,Vxworks占据了嵌入式系统的多半疆山。
特别是在通信设备等实时性要求较高的系统中,几乎非Vxworks莫属。
Vxworks的很多概念和技术都和Linux很类似,主要是C语言开发。
像Bell- alcatel、Lucent、华为等通信企业在开发产品时,Vxworks用得很多。
但Vxworks因价格很高,所以一些小公司或小产品中往往用不起。
目前很多公司都在往嵌入式Linux转(听说华为目前正在这样转)。
但无论如何,Vxworks在一段长时间内仍是不可动摇的。
与Vxworks类似的稍有名的实时操作系统还有pSOS、QNX、Nucleus等RTOS。
第二类、嵌入式Linux操作系统:Linux的前途除作为服务器操作系统外,最成功的便是在嵌入式领域的应用,原因当然是免费、开源、支持软件多、呼拥者众,这样嵌入式产品成本会低。
Linux本身不是一个为嵌入式设计的操作系统,不是微内核的,并且实时性不强。
目前应用在嵌入式领域的Linux系统主要有两种:一种是专为嵌入式设计的已被裁减过的Linux系统,最常用的是uClinux(不带MMU功能),目前占较大应用份额,可在ARM7上跑;另一种是跑在ARM 9上的,一般是将Linux2.4.18内核移植在其上,可使用更多的Linux功能(当然uClinux更可跑在ARM 9上)。
很多人预测,嵌入式Linux预计将占嵌入式操作系统的50%以上份额,非常重要。
缺点是熟悉Linux 的人太少,开发难度稍大。
另外,目前我们能发现很多教材和很多大学都以ucOS/II为教学用实时操作系统,这主要是由于ucOS/II较简单,且开源,非常适合入门者学习实时操作系统原理,但由于ucOS/II功能有限,实用用得较少。
况且熟悉了Linux开发,不仅在嵌入式领域有用,对开发Linux应用软件,对加深操作系统的认识也有帮助,可谓一举多得。
据我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式开发,Fujitum则是在自己的处理器上大搞Linux 开发。
目前在嵌入式Linux领域,以下几个方面的人特别难找,一是能将Linux移植到某个新型号的开发版上;二是能写Linux驱动程序的人;三是熟悉Linux内核裁减和优化的人。
不过LINUX有一个硬伤,就是没有WINDOWS那样的友好方便美观的交互界面,不然微软帝国早就守不住了。
第三类、Windows CE嵌入式操作系统:Microsoft也看准了嵌入式的巨大市场,MS永远是最厉害的,WinCE出来只有几年时间,但目前已占据了很大市场份额,特别是在PDA、手机、显示仪表等界面要求较高或者要求快速开发的场合,WinCE目前已很流行(据说有一家卖工控机的公司板子卖得太好,以至来不及为客户裁减WinCE)。
WinCE目前主要为4.2版(.NET),开发平台主要为WinCE Platform Builder,有时也用EVC环境开发一些较上层的应用,由于WinCE开发都是大家熟悉的VC++环境,所以我院学过Windows程序设计课程的同学都不会有多大难度,这也是WinCE容易被人们接受的原因,开发环境方便快速,微软的强大技术支持,WinCE开发难度远低于嵌入式Linux。
对于急于完成,不想拿嵌入式Linux冒险的开发场合,WinCE是最合适了(找嵌入式Linux的人可没那么好找的),毕竟公司不能像学生学习那样试试看,保证开发成功更重要。