嵌入式软件工程师职业指南

 

 

  • 摘要:嵌入式目前最流行的就是基于ARM9的开发,相关学习的资料也非常的全。但是嵌入式的开发是个非常长的战线。想一个人把全线贯通至少需要两年的时间.我目前只能在某些点上做到精通。对于整个线上的知识我现在做下总结,留给我以后各个击破。
  • 标签:嵌入式软件  软件开发  ARM9
  •  

嵌入式目前最流行的就是基于ARM9的开发,相关学习的资料也非常的全。但是嵌入式的开发是个非常长的战线。想一个人把全线贯通至少需要两年的时间.我目前只能在某些点上做到精通。对于整个线上的知识我现在做下总结,留给我以后各个击破。

嵌入式设备的用途非常的广阔。小到遥控器、游戏机,大到坦克、航天飞机都有着它的身影,正是以为这个特点它深深的吸引了我。但是所有的技术万变不离其宗。核心技术只占20%。最核心的飞机上的嵌入式和游戏机上的嵌入式产品只是功能上的一点点差异。核心硬件差别不大。

按我的理解它的技术大致分三层。底层基于硬件的开发、软件平台的特性开发、应用场景和市场的分析。

底层基于硬件的开发,需要电路知识,数电、模电、微机原理、单片机原理、汇编、C语言。这部分学习的特点是技术相对稳定。硬件平台包含多个器件。但是在平台的搭建上,每个器件厂家都会给出相关的建议方案。一般产品基于一个平台开发都是两年以上的开发。核心变化不会太大。在初始设计的时候就要充分考虑几年内不会有大的变动。因为一旦开版投产成本都相当高的。包含了电路设计和驱动开发两方面的工作。硬件的换代一般3到5年。有的甚至更长时间。

软件平台的特性开发,对于简单逻辑的一般没有操作系统很简单时序的运算。常使用8位一下的硬件。扩展性比较低。一般通过汇编直接编写。对于越来越多的电子产品支持多种功能的集成,使得软件平台越来越复杂。于是出现了操作系统来管理协调多个程序之间的调度协调。让嵌入式平台在硬件不变的情况下提高了功能和性能。需要的知识,操作系统、TCP/IP协议、高级编程语言(C/C++/JAVA/Dephie)、软件工程、数据结构、图像处理、数据库等。实际在正规的大公司中只需要了解这里的两到三点就可以完全胜任平时的工作了。毕竟要研究透所有的知识要花大量的时间。很多公司也只希望你把一部分工作做好就可以了。太强了留不住人的。根据实际需求和岗位使用不同的技术。

应用场景和市场的分析,这部分是站在最前沿的。它引导着整个产业链的发展方向。对于现有技术可以实现的应用场景,并不一定满足实际需求。这里需要的知识就很大程度基于经验了。要了解用户的真正需求。了解市场的发展趋势。还要了解目前硬件技术到达什么程度,是否可以满足需求。这里需要考验人的眼光。要在竞争对手之前看到商机。引导客户使用现有技术。一般做这一部分工作的都是技术型企业的老总。要对行业的走向作出清晰的判断。这些决定非常重要。

目前我之前做过的技术主要集中于软件层,语言上只是精通C语言因为它在嵌入式开发有着天生的优势。能够看懂简单的汇编(大学一年单片机的结果)。硬件系统的架构和软件系统的架构非常熟悉。目前的能力只有软件上的提高自己才是最现实的。是我的近期目标。

 

1. 嵌入式软件课程体系

自学嵌入式确实不大现实(当然也不是说没有这个可能),毕竟嵌入式难度也是比较大的。嵌入式的应用主要是几个方向:

一是系统开发:侧重开发环境搭建、内核原理、交叉编译等;

二是嵌入式Linux应用开发:侧重Linux应用编程、内核编译、系统调用;

三是底层驱动开发:侧重嵌入式Linux系统下的驱动开发、内核的深入分析。

不过初进门者主要往系统开发和应用开发发展,有了相关工作经验再进一步向底层驱动靠。

嵌入式课程的目标,想自学完课程,要掌握以下知识点:

◆    Linux命令、工具和C编程基础

◆    嵌入式Linux C语言强化

◆    嵌入式Linux上的C编程训练

◆    Linux高级编程及编程训练

◆    嵌入式ARM处理器体系结构及编程训练

◆    嵌入式Linux内核环境搭建和编程训练

◆    嵌入式Linux驱动理论及驱动程序开发训练

◆    Android应用研究和系统开发

◆    Android体系结构和系统移植

◆    嵌入式ARM Linux项目实践和训练

 

嵌入式软件方面最重要的课程包括:

(1) 嵌入式微处理器结构与应用

这是一门嵌入式硬件基础课程,我院用这门课取代了传统的“微机原理与接口”课程(目前国内已有少部分高校IT专业这样做了,因为讲x86微机原理与接口很难找到实际用处,只为教学而已)。我们说过,嵌入式是软硬件结合的技术,搞嵌入式软件的人应对ARM处理器工作原理和接口技术有充分了解,包括ARM的汇编指令系统。若不了解处理器原理,怎么能控制硬件工作,怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率),怎么能写出驱动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员时都要求熟悉ARM处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书 (xxx Specification),您必须能看懂其中的内存分布和端口使用等最基本的说明(就像x86汇编一样),否则怎么设计软件。有些同学觉得嵌入式处理器课程较枯燥,这主要是硬件课程都较抽象的原因,等我们的嵌入式实验室10月份建好后,您做了一些实验后就会觉得看得见摸得着。还有同学对ARM汇编不感兴趣,以为嵌入式开发用C语言就足够了。其实不应仅是将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理的。一个不熟悉汇编语言的人,怎么能在该处理器写出最优的C语言代码。在嵌入式开发的一些关键部分,有时还必须写汇编,如Bootloader等(可能还包括BSP)。特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和图像解压缩),目前主要还要靠汇编写程序(我看到过很多公司是这样做的)。当您在一个嵌入式公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的(我就遇到过),这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时您就必须看懂汇编程序,否则软硬件人员可能就无法交流。很多嵌入式职位招聘时都要求熟悉汇编。

 

(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上的,一般是将Linux 2.4.18内核移植在其上,可使用更多的Linux功能(当然uClinux更可跑在ARM 9上)。很多人预测,嵌入式Linux预计将占嵌入式操作系统的50%以上份额,非常重要。缺点是熟悉Linux的人太少,开发难度稍大。另外,目前我们能发现很多教材和很多大学都以ucOS/II为教学用实时操作系统,这主要是由于ucOS/II较简单,且开源,非常适合入门者学习实时操作系统原理,但由于ucOS/II功能有限,实用用得较少,所以我院不将其作为教学重点,要学习就应学直接实用的,比如 uClinux就很实用。况且熟悉了Linux开发,不仅在嵌入式领域有用,对开发Linux应用软件,对加深操作系统的认识也有帮助,可谓一举多得。据我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式开发,Fujitum则是在自己的处理器上大搞Linux开发。目前在嵌入式Linux领域,以下几个方面的人特别难找,一是能将Linux移植到某个新型号的开发版上;二是能写Linux驱动程序的人;三是熟悉Linux内核裁减和优化的人。我院在该嵌入式Linux方面的课程系列是:本科生操作系统必修课,然后是Linux程序设计选修课,最后是嵌入式Linux系统选修课。我院在Linux方面目前已有较强力量,魏老师和张老师熟悉Linux开发,金老师和唐老师熟悉Linux系统管理。

 

第三类、 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的人可没那么好找的),毕竟公司不能像学生学习那样试试看,保证开发成功更重要。根据不同的侧重点,WinCE还有两个特殊版本,一个是MS Pocket PC操作系统专用于PDA上(掌上电脑),另一个是MS SmartPhone操作系统用于智能手机上(带PDA功能的手机),两者也都属于WinCE平台。在PDA和手机市场上,除WinCE外,著名的PDA嵌入式操作系统还有Palm OS(因出现很早,很有名)、Symbian等,但在WinCE的强劲冲击下,Palm和Symbian来日还能有多长?我院可能是全国高校中唯一一家开设专门的“Windows CE嵌入式操作系统“课程的学校,这主要是基于以下原因:我院本身前面便有Windows程序设计课程,同学学过VC++后再学WinCE,非常方便自然,通过学习WinCE同样也可了解嵌入式软件的一般开发过程,对Linux有惧怕心理的同学也很合适。很显然,嵌入式Linux永远不可能替代WinCE,而且将来谁占份额大还很难讲,毕竟很多人更愿意接受MS的平台,就像各国政府都在大力推LINUX已好长时间,但您能看到几个在PC机上真正使用LINUX的用户?据我观察,目前在嵌入式平台上,LINUX是叫得最响,但还是WinCE实际用得更多。嵌入式LINUX可能更多地是一些有长远产品计划的公司,为降低成本而进行长远考虑。

此外,微软亚洲研究院对我院WinCE课程的支持计划,我们也很希望将来我院能有同学通过微软的面试去实习。WinCE和多媒体(如MPEG技术)是微软亚洲工程院目前做得较多的项目领域之一,他们很需要精通WinCE的人。

 

总结

关于嵌入式操作系统类课程,若您觉得自己功底较深且能钻研下去,则可去学嵌入式Linux;若您觉得自己VC++功底较好且想短平快地学嵌入式开发,则我院的WinCE课程是最好的选择。

 

(3) 嵌入式开发的其它相关软件课程

搞嵌入式若能熟悉嵌入式应用的一些主要领域,这样的人更受企业欢迎。主要的相关领域包括:

A、数字图像压缩技术:这是嵌入式最重要最热门的应用领域之一,主要是应掌握MPEG编解码算法和技术,如DVD、MP3、PDA、高精电视、机顶盒等都涉及MPEG高速解码问题。为此,我院已预订了一位能开设数字图像处理课程的博士。

B、通信协议及编程技术:这包括传统的TCP/IP协议和热门的无线通信协议。首先,大多数嵌入式设备都要连入局域网或Internet,所以首先应掌握TCP/IP协议及其编程,这是需首要掌握的基本技术;其次,无线通信是目前的大趋势,所以掌握无线通信协议及编程也是是很重要的。无结通信协议包括无线局域网通信协议802.11系列,Bluetooth,以及移动通信(如GPRS、GSM、CDMA等)。

C、网络与信息安全技术:如加密技术,数字证书CA等。我院有这方面的选修课。

D、DSP技术:DSP是Digital Signal Process数字信号处理的意思,DSP处理器通过硬件实现数字信号处理算法,如高速数据采集、压缩、解压缩、通信等。数字信号处理是电子、通信等硬件专业的课程,对于搞软件的人若能了解一下最好。目前DSP人才较缺。如果有信号与系统、数字信号处理等课程基础,对于学习MPEG编解码原理会有很大帮助。

 

(4)嵌入式开发的相关硬件基础

对于软件工程专业的学生,从事嵌入式软件开发,像数字电路、计算机组成原理、嵌入式微处理器结构等硬件课程是较重要的。另外,汇编语言、C/C++、数据结构和算法、特别是操作系统等软件基础课也是十分重要的。我们的主要目地是能看懂硬件工作原理,但重点应是在嵌入式软件,特别操作系统级软件,那将是我们的优势。

我们的研究生里有些是学电子、通信类专业过来的,有较好的模拟电路和单片机基础,学嵌入式非常合适。嵌入式本身就是从单片机发展过来的,只是单片机不带OS,而现在很多嵌入式应用越来越复杂,以至不得不引入嵌入式操作系统。另外,为追求更高速的信号处理速度,现在在一些速度要求较高的场合,有不少公司是将一些DSP算法,如MPEG压缩解压缩算法等用硬件来实现,这就涉及到HDL数字电路设计技术及其FPGA/IP核实现技术,这方面的人目前市场上也很缺。

 

 

2. Window CE操作系统

Windows CE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统。

WinCE 4.0及其以后的版本开始用windows CE.NET这个名称,比如WinCE.NET4.0、WinCE.NET4.2、WinCE.NET5.0、WinCE.NET6.0等,而之前的版本1.0 2.0 3.0用的是windows CE这个名称,一般就叫wince1.0、wince2.0、wince3.0。

现在最新的版本是WinCE.NET 6.0,而windows mobile是从wince发展出来的一个用于手机开发的嵌入式操作系统。

说起Windows CE,其实很多人心里都很迷惑,它有很多版本,而且从Windows CE本身,也发展出了很多专用于掌上电脑、手持设备等方面的系统,比如ppc等。这里我们先从版本上来看一下整个Windows CE的发展历程,它与ppc以及Smartphone的瓜葛我们将在以后的帖子里详细讲解~~总结的不对的地方也希望坛友们帮忙指正哦:)

一、Windows CE是什么?

Windows CE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,Windows CE的图形用户界面相当出色。其中CE中的C代表袖珍(Compact)、消费(Consumer)、通信能力(Connectivit)和伴侣(Companion);E代表电子产品(Electronics)。

与Windows 95/98、Windows NT不同的是,Windows CE是所有源代码全部由微软自行开发的嵌入式新型操作系统,其操作界面虽来源于Windows 95/98,但Windows CE是基于WIN32 API重新开发、新型的信息设备的平台。Windows CE具有模块化、结构化和基于Win32应用程序接口和与处理器无关等特点。Windows CE不仅继承了传统的Windows图形界面,并且在Windows CE平台上可以使用Windows 95/98上的编程工具(如Visual Basic、Visual C++等)、使用同样的函数、使用同样的界面风格,使绝大多数的应用软件只需简单的修改和移植就可以在Windows CE平台上继续使用。

二、Windows CE都有哪些版本?

Windows CE的核心至今已经有1.0、2.0、3.0三种版本,若细分小改版则是不计其数 ,因为Windows CE并非是专为单一装置设计的,所以微软为旗下采用Windows CE作业系统的产品大致分了三条产品线,Pocket PC(掌上电脑)、Handheld PC(手持设备)及Auto PC。自3.0以后,Windows CE从版本上来看主要有4.0、4.2和5.0。

WinCE1.0

WINCE1.0是一种基于Windows95的操作系统,其实就是单色的Windows95简化版本。90年代中期卡西欧推出第一款采用WinCE1.0操作系统的蛤壳式PDA,算是第一家推出真正称得上手掌尺寸的掌上电脑厂商。作为第一代的WinCE1.0于1996年问世,不过它最初的发展并不顺利。当时Palm操作系统在PDA市场上非常成功,几乎成为了整个PDA产品的代名词,在这种情况下,微软公司被迫为最初WinCE的不断改进的同时,微软公司也通过游说、技术支持、直接资助等手段聚集了大量合作厂商,使WinCE类的PDA阵容越来越强大。

WinCE2.0

随着Windows95的出现和Windows98的成功,另外一个巨人—微软站起来了,并迅速地在PC操作系统业界建立了微软帝国。PDA市场的发展潜力被众多分析家看好,嗅觉异常灵敏的“微软”自然不会放过这样一个巨大的市场,在其操作系统帝国已经非常稳定的前提下,又开始了在PDA市场上的全力冲刺,用WinCE2.0操作系统来打造与Palm非常类似的掌上产品。

WinCE2.0不仅比CE1.0快的多,而且的彩色显示,又众多新型PDA采用新的WinCE2.0系统,大有取代Pilot的趋势,成为PDA操作系统新的标准。尽管CE2.0仍然要比Pilot的操作系统需要的空间要大的多,但它具有Windows的界面,会用PC的人小编估计没有多少人不会使用微软的操作系统。如果你熟悉Windows95,在使用Windows CE的时候就熟门熟路了,就不需要重新学习。而且,两者技术上的相似性,第三方Windows应用软件开发商们,就可以很容易地把自己的应用软件转换成可供CE运行的版本,因此,Windows CE的可使用软件的种类将会越来越多的。

WinCE3.0

WinCE3.0是微软的Windows Compact Edition,是一个通用版本,并不针对掌上产品,标准PC、家电和工控设备上也可以安装运行,但要做许多客户化工作,当然也可以做掌上电脑。 微软鼓励大家在任何硬件平台(WinCE3.0支持5系列CPU: x86, PowerPC, ARM ,MIPS,SH3/4) 上使用(为了和VxWorks,Linux等竞争),所以早期的WINCE运行在不同的硬件平台上。WinCE3.0 Licence费用为$20 ,10 Licence起,批量时大致能降到$15/Licence。

2000年微软公司将WinCE3.0正式改名为Windows for Pocket PC,简称Pocket PC。就是把Pocket Word和Pocket Excel等一些日常所需的办公软件的袖珍版装了进去Pocket PC,同时在娱乐方面的性能做很大的加强。当然对于微软的所有举动,捧场的厂商自然也不会少,加入Pocket PC 阵营的现在就有HP、Compaq、Casio等一些著名厂商。当Compaq的iPAQ 3630的诞生和在市场的热销,支持和加入Pocket PC阵营的厂商就越来越多。2002年智能手机商机再现,不少PPC厂商希望推出整合手机功能的PPC,于是在2002年8月,专门为手机优化过的微软Pocket PC 2002 Phone Edition操作系统匆匆问世,2002年10月,国内第一款PPC手——多普达686上市了,随后熊猫推出了CH860、联想推出ET180。(注:低于3.0的Windows CE没有手机版本,关于Pocket PC(ppc)的话题,这里先暂停下,后面会讲到)。

WinCE4.0

WinCE.Net(即WinCE 4.0)是微软于2002年1月份推出的首个以.Net为名的操作系统,从名字上我们就可以知道它是微软的.net的一部分。WinCE.Net是WinCE3.0的升级,同时还加入.Net Framework精简版,支持蓝牙和.Net应用程序开发。

WinCE4.2

Windows CE.NET 4.2是Windows CE.NET 4.0/4.1的升级版,对Windows CE先前版本的强大功能进行了进一步的扩充和丰富,基于其开发的设备将从这些微小但重要的变化中获得更好的性能和更强的Windows集成功能。微软在WinCE4.2版时曾提供开放源代码,不过只针对研究单位,而程序代码较少,为200万行。

WinCE5.0

WinCE5.0在2004年5月份推出,微软宣布WinCE5.0扩大开放程序源代码。在这个开放源代码计划授权下,微软开放250万行源代码程序作为评估套件(evaluationkit)。凡是个人、厂商都可以下载这些源代码加以修改使用,未来厂商OEM时,则再依执行时期(Run-time)授权,支付Win CE5.0核心每台机器3美元的授权费用,这也是微软第一个提供商业用途衍生授权的操作系统。

wince6.0

wince 6.0是微软于06年11月份推出的,也是目前wince的最高版本。微软在wince 6.0推出时宣布完全公开内核源代码,这是微软难得的大动作,主要是迎击Linux、Wind River阵营长期以来对其定制化不足的攻击。微软硬件合作伙伴可以修改源代码开发定制化的文件系统、设备驱动程序与其他元件,而不需分享他们的最终设计给微软或第三方。(:开源不等于免费,使用wince6.0进行嵌入式开发,用户仍需要为开发工具platform builder付费,为开发板厂商提供的bsp开发包付费,还要为生产的产品付授权费。所以总体来说,该花的钱一分也不会少,只不过以前花了钱也不给源代码,现在花了钱能给源代码了 。)

另外,Visual Studio Visual Studio 2005专业版也被包含在Win CE 6.0的开发工具中,而Platform Builder成为Visual Studio 2005专业版的外挂程序(plug-in),协助设计人员完成从嵌入式操作系统定制化到应用程序开发等所有工作,缩短产品开发的上市时程。微软称,WinCE 6.0可同时支持32,000个程序和每个程序高达2GB的虚拟内存定址空间,且保有软件的实时(real-time)功能,开发人员可把更多应用程序加入到更复杂的设备中。(作者:华清远见嵌入式培训中心)

 

3. Windows CE的开发流程

来源:赛迪网-技术社区 作者:对手太强

这篇文章的目的并不是介绍Windows Embedded CE开发的方方面面,只是用一个初涉嵌入式领域的软件开发者的视角来介绍Windows CE开发中最常用的概念和知识,解决大家会在实际开发中碰到的一些小问题,让大家了解嵌入式开发与应用程序开发,到底有哪些不同。

Windows CE概述

从6.0版本开始,Windows CE的名字改为Windows Embedded CE,当然这也是为了结合Windows Embedded品牌作出的改变。CE经过了十年的风风雨雨之后,终于在CE 6.0这个版本上再次浴火重生了。CE 6.0经历了CE历史上第二次内核重写,使CE操作系统更加符合当今嵌入式开发的方向。

CE 6.0在内核方面的改变主要是为了适应嵌入式设备硬件发展的要求,在进程数量方面,从过去最多运行32个进程,改变为最多运行3万2千个进程,内存方面从每个进程最多拥有32M虚拟内存空间改为最多拥有2G虚拟内存空间。在OS布局方面,将关键的驱动程序、文件系统和图形界面管理器(GWES)移到了内核中,这样可以更好解决因为CPU在内核态和用户态间切换而造成的性能损失。

当然,从以上的改变,我们可以看到CE 6.0较之前版本更加“重量级”了。操作系统领域关于“微内核”的争论已经持续了很多年,CE的改变也许会为某个学派的观点提供支持。但我们必须指出的是,正因为目前的嵌入式设备硬件已经可以支持比较“重量级”的操作系统了,所以CE 6.0才会做出如此改变。

CE针对开发者的另一个转变开始自CE 5.0,将开发环境Platform Builder整合到Visual Studio中,这种做法无疑减轻了微软维护两套IDE的负担,从另外一个方面来看,CE的开发者也可以享受到更好的开发体验了。

嵌入式开发流程

也许很多初涉嵌入式开发领域的程序员会被一系列的新名词搞得头昏脑胀,在这里,我希望能够将嵌入式开发的流程展现给大家。

嵌入式开发主要分为三个比较大的部分:

1、驱动程序开发

这部分开发是从硬件设计开始的,硬件工程师会设计PCB板,为我们提供标准开发板(SDB,Standard Development Board)。当我们拿到开发板之后的第一件事情就是编写boot-loader,让开发板启动起来,一般是通过JTGA将boot-loader烧录到开发板中的。我们可以将boot-loader看作PC中的BIOS,负责硬件设备的初始化工作,并且将操作系统运行起来。在此之后,我们需要根据开发板上的硬件开发各种驱动程序,比如串口、USB、鼠标、视频输入等。最后将这些驱动程序和boot-loader打包,称为一个板级支持包(BSP)。BSP是和开发板的具体硬件紧密相关的。

所以从事这方面开发的工程师往往具有比较强的硬件知识水平。

2、平台定制

我们可以将Windows CE想象为一盒积木,根据不同的应用场景和设备要求,我们要对这盒积木进行定制,堆积出不同形状的城堡、动物和生活用品。这个过程称为“平台定制”,定制产生的平台往往和具体的硬件设备相关,直接将平台下载到硬件设备上就可以运行了。整个开发过程,需要选择不同的组件来搭配出最适合当前硬件的软件平台。所以要对Windows CE的组件,也就是Catalog Item,有相当程度的了解。

3、应用程序开发

嵌入式设备上的应用程序开发与传统应用程序开发类似,只是要借助于硬件模拟器或者实际设备对程序进行调试。最常见的嵌入式设备应用程序开发,就是Windows Mobile的移动应用开发。平台定制工程师会在硬件出厂之前先提供平台相关的SDK,SDK中会包括模拟器。应用开发者可以首先使用模拟器对程序进行开发和调试。等实际硬件出来之后,再将程序转移到实际硬件中。因为Windows CE采用了很多措施,这种“转移”几乎是无缝的,所以我们并没有使用“移植”这个词。

嵌入式领域的应用开发其实是普通软件工程师就可以进行的。

 

4. 嵌入式软件开发培训

Windows CE应用开发培训班

课程目标

     Wince应用开发培训课程可以让学员熟练掌握Windows CE应用开发,能够独立在Windows CE智能设备,Pocket PC,Windows Mobile手机和同类移动设备上开发各种应用程序,熟练掌握Windows CE下的应用程序编程方法,如实现应用程序界面、绘图技巧,基本控件的使用,多线程,文件操作以及串口通讯等。通过课程的深入讲解和实例代码分析,让学员迅速掌握Windows CE开发技术的核心和关键。课程体系覆盖基础知识以及专题开发,使您从入门到精通,一气呵成。同时向学员提供资深讲师多年开发工作中总结的源代码,通过对源代码的详细讲解,使学员能够在短期内掌握Windows CE应用开发精髓。

   培养对象

     Windows CE应用开发工程师、以及希望迅速了解和掌握Windows CE应用开发的学员。

   入学要求

    学员学习本课程应具备下列基础知识:
    ◆ 具备一定的使用Windows CE智能设备(如智能手机或PDA等)的经验;
    ◆ 具有一定C/C++语言编程基础。

教材

  ◆ 《华清远见-Windows CE应用开发课程讲义》
  ◆ 《华清远见-Windows CE应用开发课程实验手册》
  ◆ 《Windows CE嵌入式开发标准教程(修订版)》 华清远见教材编写组 编著

 

课程进度安排(V2.0)(最新更新日期:2011.02.12)

时间

课程大纲

第一天

9:00
|
12:00

1 Windows CE开发环境搭建
目标:通过今天课程的学习,学员能够掌握Windows CE的开发流程,了解模拟器的概念和使用,熟悉Windows CE应用开发的工具以及开发流程。
    1.1 Windows CE操作系统的介绍
    1.2 Windows CE应用开发流程
    1.3 建立Windows CE开发环境
    1.4 平台模拟器的建立和使用
    1.5 开发板的认识与使用
    1.6 应用程序的生成与编译

13:00
|
16:00

【实验】
    1、安装开发工具
    2、安装开发工具包SDK
    3、建立模拟器环境
    4、建立硬件开发板环境
    5、使用开发工具生成基础应用程序
    6、Windows CE 应用程序的编译与下载

第二天

9:00
|
12:00

2 Windows CE 窗口消息机制与屏幕输出
目标:通过今天课程的学习,学员将掌握 Windows CE系统事件驱动和消息响应机制,熟练掌握Windows CE系统中应用程序的执行流程,建立Windows编程的基本理念。并具备编写文字输出程序和屏幕绘图程序的能力。
    2.1匈牙利命名法
    2.2窗口和消息
    2.3回调函数
    2.4 Windows CE中程序的整体结构
    2.5文字的输出
    2.6 基础屏幕绘图

13:00
|
16:00

【实验】
    1、建立一个Hello World程序
    2、添加窗口消息响应函数
    3、编写文字输出程序
    4、编写屏幕绘图程序

第三天

9:00
|
12:00

3 Windows CE下多线程编程,文件操作与串口通信
目标:通过今天课程的学习,学员将熟练掌握 Windows CE系统中多线程编程的方法,熟练掌握Windows CE下文件的编程操作方法以及串口通信方法
    3.1 进程和线程的概念
    3.2 多线程的实现。
    3.3 Windows CE 中的文件操作
    3.4 Windows CE中的串口通信

13:00
|
16:00

【实验】
    1、建立多线程的Windows CE应用程序
    2、编程实现文件的建立、删除、读取、写入
    3、编程实现多线程串口通信

第四天

9:00
|
12:00

4 Windows CE下MFC程序的开发
目标:通过今天课程的学习,学员将熟练掌握 Windows CE系统中MFC类库的使用,并掌握菜单,对话框,窗口的概念以及使用方法 ,熟练掌握Windows CE系统中基本控件的概念以及使用方法
    4.1 C++与MFC
    4.2 MFC框架中的消息机制
    4.3 菜单,对话框,窗口编程
    4.4 MFC中的基本控件及其使用

13:00
|
16:00

【实验】
    1、建立基于MFC框架的Windows CE应用程序
    2、编程实现菜单,对话框,窗口的操作与消息通讯
    3、编程实现MFC中的基本控件的功能
    4、编写Windows CE 下的串口调试工具

 

 

Windows CE系统定制与驱动开发培训班

课程目标

        本课程是Windows CE 5.0系统级开发的课程,课程内容包括Windows CE 5.0操作系统的特性介绍,开发环境的建立,操作系统的创建和调试,内核修改,板支持包的创建,驱动程序开发等内容。本课程深入基于Windows CE的嵌入式设备的实际开发过程,通过每章精心设计的实验,使学员在学习后,能对Windows CE 的系统及驱动开发有清晰的认识和深刻的理解,能够熟练进行嵌入式系统相关的项目开发。

   培养对象

        Windows CE系统驱动开发工程师或Windows CE内核开发人员。希望深入了解嵌入式Windows CE系统开发的学员。

   入学要求

        学员学习本课程应具备下列基础知识:
        ◆ 有计算机相关基础知识;
        ◆ 有C语言编程基础(有vc开发经验更佳);
        ◆ 对Windows CE有一定认识;
        ◆ 具备一定的单片机开发及相应的硬件知识,如各种接口电路。

教材

  ◆ 《华清远见-Windows CE系统内核与驱动开发课程讲义》
  ◆ 《华清远见-Windows CE系统内核与驱动开发课程实验手册》
  ◆ 《Windows CE嵌入式开发标准教程(修订版)》 华清远见教材编写组 编著

 

班级规模及环境

        为了保证培训效果,增加互动环节,我们坚持小班授课,每期报名人数限15人,多余人员安排到下一期进行。

课程进度安排(V2.0)(最新更新日期:2011.02.12)

时间

课程大纲

第一天

9:00
|
12:00

第一章 嵌入式系统Windows CE开发解析
      1.1Windows CE 操作系统特性综述
      1.2WinCE系统开发综述
      1.3使用Platform Builder进行系统定制与开发
      1.4 Windows CE调试方法解析

13:00
|
16:00

实验1 创建自定义工程
实验2 添加USB鼠标及U盘驱动,添加多媒体支持
实验3 下载引导代码和Wince内核
实验4 使用远程工具分析系统特性
实验5 修改Wince选项卡配置实现内核模块的定制

第二天

9:00
|
12:00

第二章 Wince的核心模块介绍与分析
      2.1 Wince核心模块介绍
      2.2 Wince内核启动过程分析
      2.3 Wince访问设备地址的实现
      2.4 Wince 中断介绍
      2.5 Wince OAL层相关代码分析

13:00
|
16:00

实验1 修改Boot loader代码实现开机logo
实验2 通过地址映射操作外部IO地址,实现LED控制
实验3 添加外部中断,进行中断触发实验

第三天

9:00
|
12:00

第三章 Wince的设备驱动解析
      3.1设备驱动的分类-流接口驱动与内建驱动
      3.2标准流接口驱动介绍
      3.3流接口设备驱动的架构
      3.4流接口设备驱动的加载过程
      3.5基于标准串口驱动详细分析流接口驱动

13:00
|
16:00

实验1 实现标准的流接口驱动
实验2 实现应用程序和流接口驱动的通信

第四天

9:00
|
12:00

第三章 Wince的设备驱动解析(续)
      3.6 内建驱动程序的框架
      3.7 内建驱动程序与操作系统的接口
      3.8 内建驱动程序典型应用之触摸屏驱动程序的分析
      3.9 内建驱动程序典型应用之FLASH驱动程序的分析
      3.10 内建驱动程序典型应用之电源管理驱动的分析

13:00
|
16:00

实验1 触摸屏驱动校正实验
实验2 通过电源管理驱动实现节电管理

第五天

9:00
|
12:00

第四章 Wince系统内核定制进阶开发
      4.1 Wince 系统文件目录的定制
      4.2 Wince开机启动顺序的控制
      4.3 Wince 下通过内核定制实现快捷加密
      4.4 硬件看门狗在系统层的应用

13:00
|
16:00

实验1 定制个性化的系统目录
实验2 实现开机隐藏桌面,自启动应用程序
实验3 通过读取特定的内核模块实现程序加密
实验4 通过硬件看门狗的实现保障系统的稳定运行

 

 

Windows Mobile手机应用开发培训班(TSWM0521)

课程目标

 

     参加Windows Mobile培训课程可以让学员熟练掌握Windows Mobile手机软件开发,能够独立在Windows Mobile手机和同类移动设备上开发各种软件应用程序,如应用程序界面、绘图技巧、多线程多进程、存储对象、通讯程序、游戏开发、电话相关编程等。同时免费向学员提供资深讲师多年开发工作中总结的开发类库源代码,及其对源代码的详细讲解,使学员能够在短期内掌握Windows Mobile手机软件开发精髓。

 

   培养对象

 

     Windows Mobile手机软件开发工程师、Windows Mobile中高级程序设计师,以及希望迅速了解和掌握Windows Mobile嵌入式系统开发的学员。

 

   入学要求

 

     学员学习本课程应具备下列基础知识:
     ◆具备一定的使用Windows Mobile设备(手机或PDA等)的经验;
     ◆具有一定C/C++语言编程基础。

 

教材

 

        ◆ 《华清远见Windows Mobile手机应用开发培训讲义》
        ◆ 《Windows Mobile手机应用开发》(华清远见 编著)

 

班级规模及环境

 

        为了保证培训效果,增加互动环节,我们坚持小班授课,每期报名人数限15人,多余人员安排到下一期进行。人手一套开发板和开发用的PC主机。

 

课程进度安排(最新更新日期:2011.02.12)

 

时间

课程大纲

课程内容

第一天

9:00
|
12:00

第1章 Windows Mobile之路

      1.1 Windows Mobile之路
      1.2 Microsoft的Mobile2market活动
      1.3 Windows Mobile开发资源介绍
      1.4 目前已上市的Windows Mobile设备

第2章 Windows Mobile开发介绍

      2.1 事件驱动和消息响应机制
      2.2 fs_operation结构分析
      2.3 Embedded Visual C++开发工具
      2.4 Windows程序向Windows Mobile程序移植的关键
      2.5 实验

13:00
|
16:00

第3章 Windows Mobile系统

      3.1 软输入面板(SIP)
      3.2 密码保护
      3.3 硬按键
      3.4 后台服务程序
      3.5 创建控制面板程序
      3.6 存储卡
      3.7 实验

第二天

9:00
|
12:00

第4章 菜单、对话框和窗口

      4.1 菜单
      4.2 对话框
      4.3 窗口
      4.4 实验

第5章 Windows Mobile控件

      5.1 Windows标准控件和通用控件
      5.2 MFC控件类介绍及使用范例
      5.3 实验

13:00
|
16:00

第6章 屏幕绘图基础

      6.1 基本文本操作
      6.2 基本图形图像操作
      6.3 高级屏幕绘图
      6.4 实验

第三天

9:00
|
12:00

第7章 多线程和多进程

      7.1 概述
      7.2 Windows mobile的多任务机制
      7.3 多线程
      7.4 多进程
      7.5 实验

13:00
|
16:00

第8章 存储对象

      8.1 属性数据库
      8.2 注册表
      8.3 文件操作
      8.4 实验

第四天

9:00
|
12:00

第9章 Windows mobile通信

      9.1 串行通信
      9.2 红外线通信
      9.3 RAPI
      9.4 ActiveSync
      9.5 蓝牙
      9.6 实验

13:00
|
16:00

第10章 Windows Mobile游戏开发简介

      10.1 基本Windows GDI技术
      10.2 GAPI
      10.3 第三方开发库简介
      10.4 实验

第五天

9:00
|
12:00

第11章 Windows Mobile电话相关编程

      11.1 连接管理
      11.2 TAPI
      11.3 短消息服务(SMS)
      11.4 SIM卡
      11.5 实验

13:00
|
16:00

第12章 调试技巧

      12.1 EVC的设置编译选项
      12.2 错误
      12.3 调试
      12.4 几个重要的宏
      12.5 日志文件
      12.6 实验

培训总结