嵌入式系统移植工程师

2024-07-18

嵌入式系统移植工程师(精选10篇)

1.嵌入式系统移植工程师 篇一

嵌入式系统工程师的十个不要

1.不要第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。

2.初学者请不要看太多的书那会误人子弟的。先找一本好书系统的学习。很多人用了很久都是只对部分功能熟悉而已,不系统还是不够的。

3.看帮助。不要因为很难,而自己又是初学者所以就不看;帮助永远是最好的参考手册,虽然帮助的文字有时候很难看懂,或不够直观。

4.不要被一些专用词汇所迷惑;最根本的是先了解最基础知识。

5.不要放过任何一个看上去很简单的小问题--他们往往并不那么简单,或者可以引伸出很多知识点;不会举一反三你就永远学不会。

6.不要知道一点东西就以为懂了,这并不能说明你会用,会用是需要实践经验和时间积累的。

7.不要放弃,入门并不难,难的是长期坚持实践和不遗余力的学习和实践。

8.不要只看书,看再多的书是学不会用的,要多实践,多动手。

9.不要老把时髦的技术挂在嘴边,把时髦的技术挂在嘴边,还不如把基本的技术记在心里。

10.在任何时刻都不要认为自己手中的书已经足够了。

2.嵌入式系统移植工程师 篇二

嵌入式实时操作系统是能在确定的时间内执行其功能,并对外部的异步事件做出响应的计算机系统。随着嵌入式实时操作系统技术能力的成熟,以及各类电子产品对于操作系统的迫切需求,嵌入式实时操作系统逐渐进入了工业测控以及消费类电子行业的应用之中。作为继VxWorks,μCLinux,WinCE等嵌入式实时操作系统的后起之秀, eCOS(embedded Configurable Operating System)具有可配置性、可裁减性、可移植性和代码体积小的优势。eCOS的重要技术创新在于其提供了功能强大的配置系统,可以在源码级实现对系统的配置和裁减,并且实现最小功能的eCOS系统可以只有几百字节,因此eCOS受到了全球越来越多的人的关注[1,2]。S3C2410处理器是三星公司基于ARM公司的ARM920T处理器内核,采用0.18 μm制造工艺,最高操作频率达到203 MHz的微处理器。凭借低价格、低功耗、高性能的品质,它被国内外广泛应用于各类开发板及手持便携设备中。然而在eCOS的官方网站及相关文献中并没有公布eCOS针对S3C2410处理器的相关代码。利用eCOS的可配置性和S3C2410完整的系统外围设备,分析了eCOS的一般移植方法并将eCOS应用于S3C2410处理器的开发板armsys2410。

2 eCOS体系特点及移植概述

eCOS采用模块化设计,将不同功能的软件分成不同的组件,其核心组件包括:硬件抽象层(Hardware Abstract Layer,HAL),内核(kernel),标准C和数学库,设备驱动程序, GNU调试器(GDB)。这些组件具有可重用性,分别位于系统的不同层次。用户可以根据自己应用的特定需求来设置组件中的配置选项,去掉不需要的组件,从而创建一个最适合应用需求且体积最精简eCOS镜像。

硬件抽象层(HAL)处于eCOS层次结构的最低层,对处理器结构和系统硬件体系结构进行了抽象,并对上层提供统一的接口。因此HAL的移植是eCOS系统移植的关键,改写HAL以及相关的驱动程序后可以迅速地实现eCOS移植。硬件抽象层的移植根据所抽象的对象的不同,可以分为 3种不同的类型,分别是平台抽象层移植、变体抽象层移植和体系结构抽象层移植。

平台抽象层(Platform HAL)移植针对的是HAL平台层,该子层次对应于一系列的硬件,包括选择的处理器或其变体。平台抽象层移植时可采用eCOS支持的且与新硬件平台相近的平台HAL作为模板,对内存布局等初始化代码进行修改。

变体抽象层(Variant HAL)移植针对的是HAL的变体层,该子层可支持特定CPU与同类体系结构的普通CPU之间的差异。变体抽象层移植通过对中断、高速缓存及其他特性的重定义来覆盖体系结构抽象层中的默认实现。

体系结构抽象层(Architecture HAL)移植针对的是HAL的体系结构层。eCOS支持的每种处理器系列都被看成是一种不同的体系结构,例如ARM系列、PowerPC系列等。在eCOSpackageshal目录下每一种体系结构都有对应的子目录,例如eCOSpackageshalpowerpc等。而每个子目录中又包含了用于支持某个特定处理器的平台抽象层和变体抽象层子目录,例如eCOSpackageshalpowerpcmbx目录中包含的代码用于支持PowerPC MBX860这个平台的初始化编程,而eCOSpackageshalpowerpcMPC8xx目录中的代码用于支持MPC8xx处理器系列的不同变体(包括MPC823,MPC850,MPC860)。体系抽象层移植同样可以选择相近的HAL作为模板,但是每种体系需要专门的eCOSGNU C/C++编译器支持,若已有的编译器不支持新体系结构,则需要先进行新体系编译器的移植,其编译过程参见参考文献[3]。

硬件抽象层的这3个子模块之间没有很明显的界限。对于不同的目标平台,这种区分具有一定的模糊性。一般来说,目标系统应该将体系结构抽象层、变体抽象层和平台抽象层分别使用不同的包来加以实现。eCOS移植流程图如图1所示。

3 eCOS移植在armsys2410开发板上的应用

对目标硬件资源的充分了解是进行eCOS移植的基础,要针对资源的分布在不同层次来实现系统移植[4,5]。这里采用的目标平台是armsys2410开发板,其主要硬件资源如下:

CPU:三星S3C2410,其属于ARM920T系列;

存储器:1 MB NorFLASH,64 MB NandFLASH,2片4Banks×4 Mb×16 b SDRAM;

外围设备:LCD控制器,3路UART,CS8900 10M以太网控制器等;

调试接口:20针ARM-ICE JTAG接口。

eCOS移植需要在宿主机调用交叉编译器,Redboot是位于HAL之上的命令行界面,它内置了GDB,HAL被移植到新硬件之后马上就可以使用redboot来加载和调试程序[6]。因此这里的eCOS移植将从redboot开始。

3.1 宿主机开发环境的建立

本文所涉及的eCOS移植是在Windows XP环境下实现的,需要用到Cygwin,GNU本地开发工具、ARM平台交叉开发工具以及eCOS配置工具。Cygwin是在Windows平台上运行的Unix模拟环境,为eCOS配置工具提供支持,其具体的安装过程可参见http://cygwin.com。在宿主机配置好开发环境后,就可以着手eCOS移植。

3.2 在eCOS配置工具中加入S3C2410平台

Samsung公司的S3C2410处理器与Agilent公司的aaed2000处理器同属于ARM920T平台,这里采用aaed2000的HAL作为新平台的模板。首先在eCOSpackageshalarmarm9下建立S3C2410目录并将eCOSpackageshalarmarm9aaed2000current下所有文件复制到eCOSpackageshalarmarm9S3C2410current目录下,修改相应的文件名及文件内容以对应S3C2410平台,其主要变动如下:

(1) 将halarmarm9aaed2000.cdl改名为halarmarm9S3C2410.cdl,使其对S3C2410所有组件特性进行登记。该文件修改的主要命令有cdlpackage命令,它用来在eCOS.db中加入新平台相应的包,改变新包在eCOS配置工具中的描述和定义并改变编译时需要的文件;cdlcomponent命令,它用来调整启动模式和时钟设置;cdloption命令,它用来调整与时钟密切相关的其他设置选项;

(2) 修改eCOS.db数据库文件,使其对S3C2410的所有组件名称进行登记。这里只构建redboot最简模版用来到目标平台测试,增添的命令主要有package CYGPKGHALARMARM9S3C2410命令和target S3C2410命令。

接下来就可以在eCOS配置工具中找到刚才创建的S3C2410平台,S3C2410模版及相应配置工具界面如图2,图3所示。在eCOS配置工具中保存设置后,选择Build→Library 可以在S3C2410installin目录下生成redboot镜像,经GNU编译链接工具转化为ELF文件烧录到目标板中。若Redboot成功启动,说明S3C2410平台已成功的添加到eCOS库中,下面就可以定制新的配置包来完善该平台。

3.3 定制新的配置选项和包

这一步将对halarmarm9S3C2410.cdl文件和eCOS.db数据库文件做进一步修改,添加或删除一些命令以匹配新硬件平台。

对halarmarm9S3C2410.cdl文件的主要修改如下:

cdloption CYGNUMHALVIRTUALVECTORCOMMCHANNELS下的calculated选项由“1+CYGSEMAAED2000LCDCOMM”变为“2”。目标平台有2路串口,与模板中的串口设置不同。

删除cdloption CYGPKGHALARMARM9AAED2000TESTS命令,毕竟这里没有为新平台生成测试。

对cdloption CYGNUMHALARMAAED2000CLOCKHCLKDIV等与时钟频率和cache相关的配置项设置成S3C2410的配置。

对eCOS.db数据库文件进行登记包的修改,这里主要应去掉尽可能多的包,只留下最小功能包。因此,去掉了以太网、键盘和触摸屏包CYGPKGDEVSETHCLCS8900A,CYGPKGDEVSETHARMAAED2000,CYGPKGDEVSKBDAAED2000,CYGPKGDEVSTOUCHAAED2000。并且只添加串口包来实现串口通当其正常运行后再分别加入上述包并调试。

3.4 内存布局调整

内存布局文件位于S3C2410包的includepkgconf目录下,新硬件平台有3种启动方式ROM,RAM,ROMRAM。分别对应了扩展名为.h,.ldi和.mlt的文件。.h文件包含内存域的C宏定义,.ldi坟件定义内存域和内存段位置的链接脚本文件,.mlt文件包括山MLT工具产生的对内存布局的描述。以ROM启动为例,只需手动修改内存布局mltarmarm9S3C2410rom.h和mltarmarm9S3C2410rom.ldi文件,由于目标板有2块16 MB SDRAM,故将mltarmarm9S3C2410rom.h中的#define CYGMEMREGIONramSIZE 设为0x00F00000,#define CYGMEMREGIONromSIZE设为0x00800000。mltarmarm9S3C2410rom.ldi文件分为2部分。MEMORY部分描述新平台的内存位置和大小,该部分应与mltarmarm9S3C2410rom.h保持一致;SECTION部分负责指挥链接器映射输入区及输出区,必须保持新平台下内存区位置的正确性。

3.5 HAL初始化代码修改

对于S3C2410的ROM启动方式而言,FLASH和SDRAM在初始化了读数方式后会将数据段搬移而程序段保持不变。接下来系统会进行其他硬件的初始化过程,包括系统时钟、系统CACHE控串口等基本硬件设备。HAL初始化代码主要eCOSpackageshalarmarchcurrentsrc下的Vectors.S文件中,需要halhardwareinit区域的实时时钟、芯片选择、中断控制等处进行修改,此外为了保证新平台的串口在使用redboot时能被正常的初始化,这里采用polling模式驱动而不是中断方式驱动。

3.6 生成新平台的eCOS镜像及应用程序

从eCOS配置工具中选择新添加的S3C2410模板,将PACKAGES选项设为defalt,选择Build→Library就可以生成最终的eCOS库文件。这里使用预编译的C代码应用程序hello.c在cygwin下通过makefile文件与eCOS库文件libtarget.a相链接生成eCOS应用程序。Cygwin下的Makefile文件与Windows下的bat文件相类似,可以将cygwin的多条命令逐次执行。Makefile文件的核心代码如下:

在cygwin下将当前目录调整为makefile和hello.c所在目录,键入make命令便可生成hello.exe(elf格式的可执行文件),然后使用objcopy程序将其转换为hello.srec。在目标板启动redboot后,在宿主机使用超级终端DNW将hello.serc烧入目标机中。Redboot提示符下运行go命令,得到的串口信息如图4所示,由此可知,eCOS和它的应用程序已经成功的在目标板上运行。

4 结 语

3.嵌入式工程师(范文) 篇三

嵌入式软件指嵌入在硬件中的非PC操作系统和开发工具软件,它在产业中的关联关系体现为:芯片设计制造\嵌入式系统软件\嵌入式电子设备研发和制造。嵌入式软件主要分为三类:嵌入式操作系统、嵌入式支撑软件、嵌入式应用软件。从事该方面研发的人员即为嵌入式工程师。与其他的软件工程师相比,嵌入式分为操作系统和硬件两个方面,就业的方向更广、更深,就业机会和入职待遇比普通软件工程师好。

嵌入式工程师月薪有多少?

移动通信行业是嵌入式软件最重要的应用领域之一,手机用嵌入式软件几乎占到了整个嵌入式软件应用规模的60%。到了3G时代,手机、数字电视、信息家电、网络电话、汽车电子、医疗电子等都将是嵌入式软件的重要应用领域。

人力资源专家表示,嵌入式软件开发是未来几年最热门和最受欢迎的职业之一。权威部门统计,我国目前嵌入式软件人才缺口每年为20万人左右,未来随着“三网融合”不断提速,3G网络全面铺开,这一数字还将成倍增长。

根据业内发布的薪资报告,具有10年工作经验的高级嵌入式软件工程师年薪在30万元左右。即使是初级的嵌入式软件开发人员,平均月薪也在5000元左右,中高级的嵌入式软件工程师月薪平均已超过万元。

嵌入式工程师市场行情怎么样?嵌入式工程师的未来发展如何?

日前,记者从国内最大的IT人才服务机构东方标准获悉,由于日本对从事嵌入式系统开发的实用型软件工程师的需求长期居高不下,东方标准国际软件工程师(嵌入式Linux/日语)培训班的学员还没结业,便已被多家日本软件企业抢先高薪“预订”。

据介绍,目前嵌入式系统已普遍应用于无线通讯、工业自动化、汽车电子、医学科技、消费电子等领域,像常见到的手机、PDA、机顶盒、高清电视(HDTV)、智能家电、医疗仪器、航天航空设备等采用的都是典型的嵌入式系统。

近年来,嵌入式系统应用在全球范围内取得了长足的进展。嵌入式产业已经成为带动IT发展的新的增长点。作为世界上最先进的消费电子产品生产大国,日本的嵌入式系统产业的发展在全球处于领先地位。截止到2006年,日本已经有将近11万家公司从事嵌入式领域内的开发业务,嵌入式软件工程师超过19万人,但人才缺口也接近10万人。

造成目前国内外从事嵌入式开发人才稀缺的原因,一方面是由于这一领域入门门槛较高,不仅要懂较底层软件,对软件专业水平要求较高,而且必须懂得硬件的工作原理,所以

非专业IT人员很难切入这一领域;另一方面,这一领域较新,很多软硬件技术出现时间不长或正在出现,掌握这些新技术的人少。据东方标准日本分公司介绍,嵌入式人才稀缺,身价自然就高,经验与薪水也成正比。在日本从事嵌入式开发工作的工程师年薪普遍都在4万美元左右。如果日语能力强,或者如果国内有很丰富的工作经验,或者如果学历比较高,薪金会更高些。

如何才能成为嵌入式工程师?

(1)首先学嵌入不是为了跟风,而是为了逐浪。不是要看大家都去做 这一行才去做。是真的喜欢,这样才能精,才能做到“逐浪”!

(2)成功的历程是漫长、艰辛的,要有一颗艰韧不拔的心:P

(3)文章中说的学习过程和资料大致差不多。但可惜的是在我花了很 长时间入门后才发现这篇文章,要不那短时间会缩减不少。

个人觉得需要注意的一点是:文中提到的步骤不是按步就班的,根据 个人的情况补全即可:P

近来嵌入式挺火,于是大家都往这里挤。我想提醒大家的是,嵌入式马上也会成为如今的软件业。在你进来之前请先考虑清楚。但只要我们真的学精了一样东西,不管它将来变成什么样,哪怕最后只剩下一个人,那个人也一定就是你自己。

很多人以为搞嵌入式就是随便找本书看看,在电脑上编几个程序就完事。非也,其实嵌入式的门槛是比较高的。具体如下:

1、您得有一定数量的Money。

(1)、开发板贵

(2)、培训费更贵

(3)、开发平台是贵得不能再贵。(除非您只是想玩玩而已)

2、需要学习的东西多。(1)、window环境编程;(2)、Linux环境编程;(3)、单片机

3、最后也是最重要的一点,你得有坚韧不拔之志和一颗平常之心。

(1)、自信 坚强 积极 勤快(注:好的自信是自觉的!)

(2)、成功其实就是成为最好的您自己

嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破。只要我们用心去对待,东雪终将化去,春风定会吹来。具体步骤如下:

1、《C语言》第二版 谭浩强 ; 《C程序设计语言》第二版 徐宝文译机戒工业出版社你能区分开指针数组和数组指针吗?你知道函数指针吗?

你能区分开定义一个变量时系统给它分配的空间与用malloc()函数给一个变量分配的空间有什么不一样吗?

2、《数据结构》C语言版黄国愉、叶乃青编 清华大学出版社

你能合上书本,用C语言实现书中的单链表、双链表数据结构吗?

3、《实用C++程序设计》第二板 中国电力出版社 Steve_Oualline著

此阶段主要是学习其面向对象的编程思想,加深对C语言和数据结构的理解。

4、学习单片机,最好能找个前辈带一带。

你能用51单片机做出一样实际的东西吗?即使它再简单!

要注意加深对中断的理解。

5、学习ARM单片机。

(1)、细读《ARM微控制器基础与实战》周立工编写(注:即使你不用书中的开发板)

(2)、细读相关芯片的原版英文文档。如:arm920TE.pdfS3C2410_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 笔记”,可在“[url][/url]”网站的好书下载栏目获取

(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(即软壳)

4.嵌入式软件工程师课程 篇四

在实训项目经理的带领下,通过完成多个企业级项目(基于ARM的串行数据无线传输系统、基于ARM的无线数据采集系统、基于ARM的GPRS应用系统)的分析、设计和开发,掌握开发企业级软件项目过程所需的设计规范、开发流程、质量控制及项目管理。阶课程主题与段

实训内容

第Unix开发环一境、开发规范阶培训 段 Unix系统原

理、Unix开发环境、Unix常用命令 Oracle数据库 Oracle 10数据库原理、SQL语句、数据库表及索引 PL/SQL语法,存储过程,存储函数,触发器等 C++核心 数据类型,控制语句,自定义数据类型,模块化程序设计,指针 类与对象(封装性)类的扩展,继承,虚函数,多态 数据结构和算法、标准库 链表、栈、队列、二叉树、算法 IO、异常、模版(STL)OOAD 面向对象分析

实训目标

熟练Unix下的C/C++开发环境,掌握常用的命令

熟练掌握Oracle 10G下的SQL开发,精通PL/SQL等

熟练掌握C基础语法,函数的编写和调用 掌握面向对象编程的三个特性,并熟练应用OO思想

掌握各种数据结构的实现,并了解常用的算法

掌握多种设计模式

实训项目

Unix下的定时任务

基于Oracle,完成计费系统的数据整合,包括表的创建,数据的录入以及整合等

完成银行项目的类结构设计,深入理解面向对象编程

双赂链表数据结构实现

完成银行项目的UML设计,并能使用

和设计的方法 了解软件研发的整个过程,能够熟练使用UML设计模式进行优化

UML图 设计模式 项目实训 银行项目

第Shell编程 二Shell编程语阶法

段 Unix环境编

程和开发工具 用户信息,文件操作,目录操作,时间处理

make,makefile,gdb

进程、多线程 创建进程 子进程 信号 消息队列车 共享内存 信号量 线程的创建、线程的状态 多线程编程 线程间的通信 线程同步 线程池编程 网络编程和数据库编程 网络基础 TCP/IP协议 基于TCP和UDP的网络编程 Pro★C数据编程 项目实训 计费系统采集和整合模块 第ARM系统体

进行分析和设计

完成银行前台业务,包括基本的存取款和转账等

掌握Shell编程技术

掌握和环境编程相关的函数,并能熟练使用编程工具

掌握进程和多线程编程

掌握网络编程,并能编写支持多客户端的服务器软件

熟练掌握Oracle MySQL等数据库的连接和数据访问

掌握计费系统后台业务流程,综合使用所学知识点,完成计费数据采集和整合银行项目提升和整合编写Shell脚本完成FTP功能

计费系统数据采集

计费系统C/S分布式架构的设计,掌握线程池的应用

计费系统集中式数据模块,该模块完成数据集中化并录入到ORACLE中

Billing系统提升和整合三系结构 阶ARM处理器段 体系结构

ARM编程环境

指令系统以及寻址方式 调试 ARM系统编程

过程调用的标准

汇编程序以用C程序之间相互

调用的技术 异常中断技术 ARM体系中C语言程序设计的基本知识 FLASH操作 嵌入式Linux构建 嵌入式Linux开发环境构建 BootLoader引导程序 Linux内核代码移植 交叉编译、内核调试 嵌入式Linux内核开发 内核源代码架构 内存管理 进程管理、中断管理 内核同步 信号、调度、进程间通讯等 文件系统

对嵌入式系统了解,掌握ARM的编程模型

掌握汇编程序与C程序之间的互相调用,精通ARM体系中C程序的基本知识 掌握FLASH操作

掌握BootLoader引导程序 熟悉交叉编译和内核调试

掌握进程编程、进程间的通讯 精通内存管理 熟悉文件系统

驱动程序开发环境

驱动程序语法基础

BootLoader引导程序

驱动程序理论准备

嵌入式Linux驱动程序开发 Linux设备驱动程序概述 字符设备驱动程序开发 串口、SPL、LLC A/D转换、定时器 Linux驱动程序开发高级 A/D驱动程序编写 矩阵键盘驱动程序编写 块设备驱动程序开发 网卡驱动程序开发 USB设备驱动程序开发 项目实训 基于ARM开发板的Linux设备驱动程序研发 第企业实训 四基于ARM的阶串行数据无线段 传输系统,主

要有以下三个方面的运用:点对点控制;点对多点控制;中继传输

掌握字符设备驱动程序开发 熟悉串口、SPL

驱动程序总体分析和设计

熟练掌握矩阵键盘驱动程序和网络设备驱动程序开发

网络设备驱动程序提升

综合运用所学知识,特别是ARM,编写驱动程序

驱动程序研发

参与完成实际项目,积累软件开发经验,经历完整的软件开发过程:需求、软件分析设计、编码、调试,交付。

串行数据无线传输系统

长沙牛耳教育地址:长沙市五一广场文运街省电教馆二楼(口腔医院左侧)| 牛耳教育求学热线:

0731-82221222转816 | 牛耳教育网站地图

培养方案

基于安博集团大量的数据调研,该课程专注于培养基于嵌入式Linux平台,以嵌入式系统的软件开发为主,培养学生在嵌入式领域进行软件开发、软/硬件测试、系统维护等方面的综合技能,旨在为社会提供嵌入式软件开发、产品测试、技术支持等方面具备优秀的职业素养的实用型、技能型人才。精通ARM嵌入式系统的驱动程序开发、操作系统移植、熟悉基于ARM的串行数据无线传输系统、基于ARM的无线数据采集系统等面向不同行业的专用嵌入式应用系统的开发。通过该实训课程,实训学员能够积累1-2年的软件开发经验。

课程简介

嵌入式软件工程师培训课程,由安博教育集团联合多家知名厂商,并由安博教育实施专家团队和精英教师团队发起,共同开发完成。

通过该课程的学习,学员熟练掌握Linux平台下的嵌入式软件开发技术,并通过项目实战积累工作经验,进而获得高薪、有广阔发展空间的工作机会

就业方向

能够胜任软件公司中的嵌入式工程师、C/C++软件工程师、数据库工程师等相关职位。

安博牛耳嵌入式软件工程师培训课程,由安博牛耳教育集团联合多家知名嵌入式厂商,共同开发完成。通过嵌入式软件工程师课程的学习,学员熟练掌握Linux平台下的嵌入式软件开发技术,并通过嵌入式项目实战积累工作经验,进而获得高薪、有广阔发展空间的嵌入式软件工程师工作机会

5.嵌入式软件工程师如何学习 篇五

嵌入式工程师如何学习

嵌入式行业,技术的更新是非踌的,每一位工程师都需要在中不断的更新自己的知识,掌握技术动态或者解决自己中遇到的问题,以下是嵌入式软件工程师获取新知识的一些方式,也给即将成为嵌入式工程师的你一些好的建议:

去相关专业网站上学习:

调查数据显示,在嵌入式工程师经常关顾的网站中,CSDN和21IC所占的比例最大,分别为23%和18%,而这两个网站也分别代表了编程开发人员以及电子工程师两类人群,而嵌入式在线、电子工程专辑、电子产品世界、EDN、IT实验室所占比例均为10%-15%左右。

嵌入式工程师通过其它途径获取行业信息:

调查数据显示,“技术图书、专业论坛、业内门户网站、搜索引擎”是嵌入式工程师获取知识的主要途径(接近70%),其中各项所占比例分别为20%、16%、16%、14%,网络已经成为嵌入式工程师获取专业知识的主要途径。除了以上4大途径外,部分工程师也会通过培训、厂商网站、博客/群组、杂志/期刊/报纸、行业展会/技术研讨会以及电子邮件订阅等途径获取信息。牛耳教育提供的免费电子图书、视频教程等资料每年下载次数已达到十多万。

搜索引擎是各类工程师最好的老师:

xinpujingyulecheng89.com E0DNK

对搜索引擎的使用调查中,百度虽然占据国内搜索引擎市场绝大部分的市场份额,但超过60%以上的嵌入式工程师们却明显偏爱于使用google,造成这一结果的原因是,工程师们可以从国外的网站获取更多技术资料以及学习资料。同时我们也可以得出这样一个结论:在嵌入式这一高端领域的学习中,因为很多技术资料都是英文的,所以要及时了解技术发展、学习相关的技术,开发者具备一定的英文阅读能力是非常有必要的。

6.嵌入式系统移植工程师 篇六

随着嵌入式设备的广泛应用, 嵌入式系统和实时系统越来越受到重视。由于Linux系统全面的功能、广泛的芯片支持以及免费的特点, 利用Linux搭建嵌入式操作系统越来越成为人们的首选方案。然而, Linux是一个通用的操作系统, 其关闭中断时间过长和上下文切换时间的不确定性, 决定了它无法直接应用于嵌入式实时环境中。针对实时性应用, 由新墨西大学的Victor Yodaiken等人开发了RTLinux, 采用嵌入式的、高效的可抢先的实时调度核心, 增加了一个仿真程序来替换Linux的底层中断程序。是源代码开放的具有硬实时特性的多任务操作系统。

本文对RTLinux的结构和实时性进行了分析, 给出了内核编译的方法和移植到S34C2410开发板的步骤, 并开发应用程序对RTLinux的实时性进行了验证。

(二) RTLinux的结构

RTLinux将一个小的可抢占的实时内核植入标准Linux内核底层, 与Linux内核共享控制处理器。来自硬件的属于实时内核的中断将直接被处理, 非实时中断则通过中断仿真程序由Linux内核处理。因此, 实时内核的操作可以得到立即响应, 而且Linux内核不能延迟实时任务的执行。其原理结构图如图1所示:

RTLinux将标准Linux内核作为简单实时操作系统子内核里优先权最低的现场来运行, 并仿真了Linux内核所看到的中断控制器。这样, 在Linux进程和硬件中断之间, 本来由Linux内核完全控制, 现在在Linux内核和硬件中断的地方加上了一个RTLinux内核的控制。Linux的控制信号都要先交给RTLinux内核进行处理。

RTLinux在默认的情况下采用优先级的调度策略, 即系统调度器根据各个实时任务的优先级来确定执行的先后次序。优先级高的先执行, 优先级低的后执行, 这样就保证了实时进程的迅速调度。RTLinux将任务调度器本身设计成一个可装载的内核模块, 用户可以根据自己的实际需要, 编写适合自己的调度算法。在高速的处理器上能够获得低于10us的中断反应时间, 其优势在于实时和非实时的线程是被分离的。

(三) RTLinux内核编译

RTLinux内核的编译实际上是在Linux内核上打上一个RTLinux补丁, 其方法如下:

1. 下载内核及补丁

下载内核文件 (2.4.28内核) 及补丁 (RT-Linux3.2-rc1) , 将下载的两个文件放置到/var/tmp目录。用tar命令释放内核源代码, 然后将RT-Linux打包到Linux核中。打包命令如下:

2. 配置内核

首先通过命令make mrproper删除源代码目录中残留的.o文件和其它从属文件。然后make menuconfig, 启动内核配置程序。

3. 根据实际需要配置内核

Linux的内核配置程序提供了一系列配置选项。对于每一个配置选项, 用户可以回答"*"、"m"或""。其中"*"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块, 在需要时, 可由系统或用户自行加入到内核中去;""表示内核不提供相应特性或驱动程序的支持。不合理的配置可能造成内核编译失败。

4. 编译内核

首先, 建立编译时所需的从属文件:make dep;然后, 清除内核编译的目标文件:make clean;最后, 进行内核编译内核:make bzImage。内核编译成功后, 会在/usr/src//rtlinux/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。

5. 启动新内核

在此之前, 如果用户在配置内核时设置了可加载模块, 则需要对这些模块进行编译, 以便将来使用insmod命令进行加载。启动新内核具体步骤如下:

第一步:将/usr/src/rtlinux/linux/arch/i386/boot/bzImage文件拷贝到/boot目录下;

第二步:生成镜像文件rtlinux, 执行成功后会在/boot文件夹下生成rtlinux.img;

第三步:配置/boot/grub/brug.conf文件, 然后保存退出;

第四步:重新启动系统, 进入RTLinux;

第五步:编译RTLinux, 使用make devicds和make install命令安装实时模块, 此时应确保mbuff, rtl_fifo, rtl, rtl_posixio, rtl_sched, rtl_time等动态加载到RTLinux;

第六步:重启后进入RTLinux, 编译成功。

(四) RTLinux移植

RTLinux移植的目标板选用S3C2410开发板实现, 主要包括三个部分:交叉编译环境建立, Bootloader移植和RTLinux内核移植。

1. 交叉编译环境

交叉编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括binutils、gcc和glibc几个部分。整个过程如下:

(1) 建立编译目录

(2) 建立内核头文件

(3) 建立二进制工具binutils

(4) 建立初始编译器bootstrap gcc

(5) 建立c库glibc

(6) 建立全套编译器full gcc

2. Bootloader移植

Bootloader是嵌入式系统的引导加载程序, 它在操作系统内核运行之前运行, 主要对硬件设备进行初始化、建立内存空间的映射图, 从而配置嵌入式系统的软硬件环境。在此, 我们选用的是U-Boot。U-Boot是德国DENX小组开发的用于多种嵌入式CPU的Bootloader程序, U-Boot支持多种包括Linux、VxWorks、NetBSD、LynxOs等在内的多种嵌入式系统以及PowerPC、ARM、x86等诸多常用系列的处理器。

首先定义开发板名称为:test2410, 并在u-boot中建立自己的开发板类型。然后修改Makefile:@./mkconfig$ (@:_config=) arm arm920t test2410 NULL S3C24x0。在目录中建立test2410, 并在include/configs/中建立配置头文件, 根据自身设置指定交叉编译工具的路径。然后就可以依照开发板的内存区的配置情况, 修改lowlevel_init.S文件。修改步骤完成后, 对其进行重编译, 测试能否成功。最后通过仿真器烧写到flash中, 就可以从NAND flash启动了。

3. 内核移植

对RTLinux内核的移植过程可以参照普通Linux内核的移植。修改Makefile, 设置flash分区, 包括分区信息的设置, 启动时初始化配置等操作;配置并编译内核, 成功后下载到开发板。

(五) 应用程序设计

1. 程序结构

由图1可知, RTLinux有两个内核。当有实时任务需要处理时, RTLinux运行实时任务;无实时任务时, RTLinux运行Linux的非实时进程。因此, 每个应用程序包括实时任务和非实时任务。实时任务是一种可由多个线程构成的内核任务, 工作在操作系统核心态的实时区, 要求尽可能简单, 只包含直接与时间相关的代码;而位于非实时区的用户进程可利用常规Linux操作系统提供的大量资源, 主要实现为数据的处理、传输以及用户界面等。实时任务与运行在Linux内核中的进程之间通过FIFO与共享内存的方式进行通讯和数据交换。图2为应用程序结构图。

2. 实时部分

通过API函数init_module完成对实时部分的初始化, cleanup_module实现关闭实时模块的任务。开发了上下文切换测试程序, 现给出主函数中循环部分的关键代码:

3. 非实时部分

非实时部分开发了一个应用程序, 在控制台下编写。其关键代码如下:

将应用程序移植到开发板中并进行测试, 其中断延迟的平均值在2.5微秒左右, 明显小于标准Linux的中断响应时间。因此RTLinux是符合实时运算标准的操作系统。

(五) 结论

RTLinux是一个具有硬实时能力的实时操作系统。可以广泛应用于工业控制、远程通信、仪器工业、多媒体等领域。本文对RTLinux的嵌入式系统结构和实时性进行分析, 完成了内核的编译和移植, 并开发了应用程序进行测试。在此基础上可以对应用程序做进一步开发, 以实现各种不同的嵌入式实时性应用。

摘要:对嵌入式实时操作系统RTLinux的结构和实时性进行了分析, 给出了内核编译的方法, 以及移植到S34C2410开发板的过程, 包括交叉编译环境建立、Bootloader移植和RTLinux内核移植。系统应用程序开发由实时部分和非实时部分构成, 给出了各部分设计的关键代码, 并进行了验证。测试结果表明, RTLinux符合实时性操作系统的要求。

关键词:嵌入式实时操作系统,RTLinux,移植,Bootloader

参考文献

[1]William Stallings.Operating Systems Internals and Design Principles[M].北京:电子工业出版社, 2001.

[2]陈文智, 王总辉.嵌入式实时系统RTLinux的实现和测试[J].计算机工程与应用, 2001 (19) :157-159.

[3]张帆.基于RTLinux的硬实时性研究[J].武汉理工大学学报, 2006 (28) :164-166.

[4]李华军, 等.RTLinux在列车检测系统中的应用[J].计算机工程, 2009 (35) :232-235.

7.嵌入式软件开发工程师简历 篇七

发布时间: 2009-10-10 来源: 作者:[ ]文章摘要:

嵌入式软件开发工程师简历模板

个人简历

姓 名:简历模板 性 别:男

出生日期:1984-06-05 籍 贯:北京市

目前城市:北京市 工作年限:应届毕业生

目前年薪:XX万人民币 联系电话:***

E-mail:http://

应聘方向

求职行业:

计算机软件,计算机硬件,计算机服务(系统、数据服务,维修),互联网/电子商务,通信

/电信/网络设备

应聘职位:

软件测试,技术文员/助理,测试员,系统测试

求职地点:北京市 薪资要求:面议

工作经历

2008/03—现在 ***公司

所属行业:计算机服务(系统、数据服务,维修)

软件开发 软件工程师

主要职责:

1.远程同步嵌入式TodoList记事系统;

2.参与TodoList记事系统的系统分析和设计;

3.开发了本地数据治理系统,实现数据本地的增删改查的功能;

4.开发了下载和上传引擎,实现Mobile与server间的数据同步;

5.设计开发系统控制模块,该模块集成数据模型,数据治理模块和数据通讯模块;

6.设计开发了图形用户界面;

7.在模拟器和真机测试TodoList记事系统。

2007/09—2007/11 tom在线

所属行业:互联网/电子商务

网站事业部 网站编辑

主要职责:负责网页内容的更新与维护,独立制作新闻专题。

教育培训

2004/09—至今 北京信息工程学院 电子商务 本科

2008/03—2008/06 渥瑞达Symbian OS 嵌入式开发

职业技能

外 语: 英语:一般

自我评价

1.熟悉计算机网络,信息安全等相关知识,了解计算机软硬件安装调试;

2.熟悉各种计算机操作系统、熟悉office软件。

3.熟悉SQL server数据库操作。

4.精通面向对象的程序设计和开发,熟练把握c 语言。

5.熟练把握Visual C、CodeWarrior、EVC等开发工具。

8.嵌入式系统移植工程师 篇八

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。[1]嵌入式Linux系统资源有限、专用性强,在部署到嵌入式平台之前必须对其进行裁剪、定制,减小嵌入式Linux系统体积,提高运行效率。

由于Linux具有内核小、效率高、源代码开放和强大的网络支持等一系列独特优势,嵌入式Linux将在未来的嵌入式发展中占最大的优势,其巨大的市场潜力已经吸引了众多的厂商进入这一领域。目前,国外的著名厂商,例如I B M、D E L L等,几乎都在嵌入式Linux操作系统的研究、开发和推广方面投入了巨资。国内有一些公司,例如华恒、共创软件联盟、中软、红旗、万禾等,也开始积极从事嵌入式Linux操作系统的研究、开发和推广。随着微电子技术的不断创新和发展,嵌入式系统 (E m b e d d e d Systems) 作为计算机应用的一个重要领域,已深入到社会的方方面面,越来越被人们所关注。嵌入式系统出现于60年代晚期,它最初被用于控制机电电话交换机,如今已经广泛地应用于工业制造、过程控制、通讯、航空航海、军事装备等相关行业,而且深入到信息家电、娱乐、社会文化等各个领域,掀起了一场数字化的技术革命。随着多媒体技术与I n t e r n e t应用的迅速普及,消费电子 (Consumptive electron) 、计算机 (Computer) 、通讯 (Comunication) 等3C一体化趋势日趋明显,极大地推进了嵌入式技术的发展,使嵌入式技术再度成为研究与应用的热点。

1 交叉编译环境的创建

基于Linux操作系统的应用开发环境一般是由目标系统硬件 (开发板) 和宿主PC机所构成。目标硬件开发板用于运行操作系统和系统应用软件, 而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主PC机来完成 (所以称为交叉编译) 。双方之间一般通过串口、并口或以太网接口建立连接关系。交叉编译工具是嵌入式开发的基础,完善的工具链可以保证项目开发的进度和质量。交叉编译工具可以通过两种方式获得,一种是直接从网上下载已经制作好的交叉编译工具,另一种就是自己制作交叉编译工具,制作方式是: (1) 下载源码,准备补丁; (2) 设置环境变量, 指定交叉编译器的安装目录; (3) 内核头文件的设置; (4) 二进制工具包binutils的设置; (5) 编译器gcc的设置; (6) C链接库glibc的设置;最后是完整编译器的设置。本文用的交叉编译工具为arm-linux-gcc4.0.2, 将交叉编译器解压到相应的目录下, 命令为#t a r-z x c f armlinuxgcc4.0.2.tar.bz2, 要注意解压后的路径。

本文所使用的嵌入式系统目标平台是SamSung公司基于ARM920T内核的嵌入式处理S3C2410, ARM2410开发板支持W I N C E、L i n u x、U C O S以及N U C L E U S嵌入操作系统。面向手持式设备以及高性价比,低功耗的应用,内部集成LCD, USB等控制器。Linux内核采用2.6版本的内核,它吸收了一些新技术,在性能,可靠性和可扩展性方面有较大提高。本设计基于fedora-12进行开发。

2 嵌入式linux系统组成

嵌入式Linux系统从软件方面来说主要包括以下几个部分,Bootloader (引导程序) ,内核启动参数,内核 (kernel) 和根文件系统四个部分,在Flash中存储的示意图如图1所示。[2]

2.1 bootloader的移植

Bootloader指系统启动后,在操作系统内核之前运行的一小段程序。Bootloader主要完成硬件检测和系统引导, 操作系统的主要功能之一是管理系统硬件设备, 屏蔽硬件细节, 向其上的应用提供标准接口, 易于应用程序的编写和移植。我们可以初始化硬件设备,建立内存空间的映射图,从而为最终调用操作系统内核准备好正确的环境。Bootloader是依赖于硬件而实现的,但是不管事什么样的开发板,都是遵循以下流程:先关闭中断,设置cpu的速度和时钟频率,初始化RAM,将代码从F L A S H中复制到R A M中,设置堆栈,这样就搭建了一个C运行环境,之后跳转到C入口点,就是初始化驱动设备,设置linux内核参数,启动linux。[3]下载u-boot压缩包,经过解压修改和设置一些参数后,通过J T A G接口烧写到开发板的Flash中。

2.2 linux内核的移植

linux内核源码树[4]

/include子目录包含了建立内核代码时所需的大部分包含文件, 这个模块利用其他模块重建内核。

/init子目录包含了内核的初始化代码, 这是内核工作开始的起点。

/arch子目录包含了所有硬件结构特定的内核代码, 如i386和alpha。

/drivers子目录包含了内核中所有的设备驱动程序, 如块设备和SCSI设备。

/fs子目录包含了所有的文件系统的代码, 如ext2和vfat等。

/net子目录包含了内核的联网代码。

/m m子目录包含了所有内存管理代码。

/ipc子目录包含了进程间通信代码。

/kernel子目录包含了主内核代码

2.2.1 内核源码下载

标准的linux内核源码可以从http://www.kernel.org/pub/linux/kernel/v2.6/下载,也可以从镜像ftp站点获得,笔者用的是linux-2.6.26.tar.gz,将其解压到相应的目录下,命令为#tar–zxvf linux-2.6.26.tar.gz。armlinux是针对标准linux内核为arm做的补丁,也可以直接下载针对linux内核打好arm补丁的源码。

2.2.2 内核配置

内核配置通常是对内核的各个功能进行取舍配置,将配置的方案保存到configure文件中。在交叉编译内核之前,对编译选项的配置是很重要的,本文中选择对S3C2410开发板的支持,选择File System支持,对于File System应确保如下支持:

(1) proc file system support

(2) ROM file system support

(3) Second extended fs support

然后配置块设备,使其支持R A M disk。在编译内核的时候,就会根据此配置进行取舍编译。在编译目录下通过make menuconfig命令进入内核配置界面。

修改内核目录树根下的Makefile时,指定目标平台为arm, 指定交叉编译器,可向Makefile中添加如下内容:

2.2.3 内核编译

编译内核使其生成内核映像,编译内核有非压缩和压缩两种方式。[5]压缩方式,内核从R O M中启动,将被压缩的内核压缩到R A M,然后再执行内核,有点是可以将内核事先烧写至flash中,而无需手工下载,这种方式使用m a k e zimage来编译内核。

#make dep//设置依赖关系

#make zIamge//编译内核

交叉编译内核时间相对较长,编译完成后会形成一个文件zImage, 这就是编译成功后的ARMLinux内核。

2.3 根文件系统的制作

根文件系统一直是linux系统不可或缺的组件,在嵌入式linux中,内核在启动期间进行的最后操作之一就是安装根文件系统。Busybox是构建嵌入式根文件的软件,用它制作根文件系统简单,设置灵活。根文件系统一般都包括:1)基本的文件系统结构,包含一些必需的目录,比如:/dev,/proc, /bin, /etc, /lib, /usr, /tmp;2)基本运行程序所需要的库函数,如:lib/uc-libc;3)基本的系统配置文件,如:rc, inittab等脚本文件;4)必要的设备文件,如:/dev/tty, /dev/fd0;5) 基本的应用程序,如:sh, ls, cp, mv等;根文件系统制作就是生成包含上述各种文件系统的过程。[6]

2.3.1 安装busybox

从网站http://www.busybox.net/下载busybox-1.17.4.tar.bz2,使用tarzxvf busybox-1.17.4.tar.bz2解压,进入busybox-1.17.4.o目录后执行make munuconfig命令可进入配置界面。修改busybox根目录下的makefile使用交叉编译器。将A R C H?=$ (S U B A R C H) 修改为A R C H?=a r m,将C R O S S_C O M I L E?修改为CROSS_COMILE?=arm_linux-,修改后执行make命令编译busybox。然后安装busybox。

2.3.2 创建根文件

开发板的根文件系统在主机上的目录为/home/work/lsq, 在此目录下使用mkdir命令创建dev, etc, home, lib, mnt, proc, root, sys, tmp目录。在/etc目录下存放配置文件;创建etc/inittab文件,init进程根据/etc/inittab文件来创建其他子进程;创建etc/fstab文件,fstab文件描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作。

2.3.3 制作yaffs2文件系统映像文件

制作文件系统映像文件,就是将一个目录下的所有内容按照一定的格式存放到一个文件中,这个文件可以直接烧写到存储设备中。

在yaffs源码中有个utils目录,里面有mkyaffsimage和mkyaffs2image的源代码,前者制作yaffs映像文件,后者制作yaffs2映像文件,将下载的yaffs2解压,在目录/Dovelopment下有两个文件夹;进入yaffs2/utils目录,加入两个文件:nand-ecc.c和yaffs_packed-tagsl.c;修改makefile文件

MKYAFFSSOURCES=mkyaffsimage.c yaffs_packedtagsl.c nand-ecc.c然后执行make生成mkyaffs2image工具,复制工具到/usr/local/bin目录下, 执行#mkyaffsimage2 lsq/pyaffs2.img命令可生成文件系统映像文件,执行#gzip–pyaffs2img最终生成嵌入式linux根文件系统的映像文件为pyaffs2-.img.gz。根文件系统制作完成。

3 下载并执行映像文件

下载linux内核映像和根文件系统映像文件到目标板

#tftp 30008000 zImage/*下载linux内核映像到目标板内存*/

#fftp 300800000 pyaffs2.img.gz/*下载根文件系统映像到目标板内存*/

#g o 3 0 0 0 8 0 0 0/*启动目标板linux*/。

重启开发板,能看到嵌入式linux系统在超级终端完整的打印信息,说明嵌入式linux系统成功的移植到S3C2410上去了。

4 总结

文章研究了基于a r m-l i n u x和S3C2410的嵌入式系统设计,详细地介绍了移植的基本方法,重点说明了移植过程的关键步骤。这对于嵌入式linux系统的应用以后的发展具有重要意义。

参考文献

[1]曹玥.Linux内核分析及在S3C2440上移植过程[J].科技广场.2010, (1) :173-175

[2]邓俊华, 杜玉晓.基于S3C2410处理器的Linux移植[J].技术交流.2009 25 (8) :53-55

[3]王志诚.基于ARM9的嵌入式Linux操作系统的移植[J].陶瓷.2010 (3) :50-52

[4]黄义文.Linux操作系统内核裁剪的分析[J].中国民航飞行学院学报.2010 (3) :56-59

[5]赵炯.Linux内核完全剖析[M].北京:机械工业出版社.2006

9.嵌入式系统移植工程师 篇九

嵌入式操作系统通常分为商用和源码公开两种。前者的主要代表有VXWORKS,PSOS等,特点是性能优良,使用方便但价格十分昂贵。后者由于代码是公开的,具有性能和价格两方面的优势。其中μC/OS-II是一个不错的选择。

μC/OS-II是由Labrosse编写的一个源码公开的嵌入式操作系统,这一点对于用户来说可谓利弊各半:好处在于,它是免费的,而且用户可以根据自己的需要对它进行修改;缺点在于,它缺乏必要的支持。它没有功能强大的软件包,用户通常需要编写自己的驱动程序,有时甚至还必须编写相关的移植程序。

1 μC/OS-II实时操作系统及性能

1.1 μC/OS-II系统的特点

(1)μC/OS-II是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。这个特点使得它的实时性比非占先式的内核要好。通常都是在中断服务程序中使高优先级任务进入就绪态(例如使用发送信号的方法),退出中断服务程序后,将进行任务切换,高优先级任务被执行。

(2)μC/OS-II和大家所熟知的Linux等分时操作系统不同,它不支持时间片轮转法。它是一个基于优先级的实时操作系统。每一个任务必须具有不同的优先级(分析它的源码会发现μC/OS-II把任务的优先级当作任务的标识来使用,如果优先级相同,任务将无法区分)。进入就绪态的优先级最高的任务首先得到CPU的使用权,只有等它交出CPU的使用权后,其他任务才可以被执行。所以只能说它是多任务,不能说是多进程,至少不是人们所熟悉的那种多进程。

(3)μC/OS-II对共享资源提供了保护机制。μC/OS-II是一个支持多任务的操作系统。一个完整的程序可以划分成几个任务,不同的任务执行不同的功能。这样,一个任务就相当于模块化设计中的一个子模块。在任务中添加代码时,只要不是共享资源就不必担心互相之间有影响。对于共享资源(例如串口)。μC/OS-II也提供了很好的解决办法。一般情况下使用的是信号量的方法。简单地说,先创建一个信号量并对它进行初始化。当一个任务需要使用一个共享资源时,它必须先申请得到这个信号量。而一旦它得到了此信号量,那就只有等它使用完了该资源,信号量才会被释放。在这个过程中即使有优先权更高的任务进入了就绪态,因为无法得到此信号量,也不能使用该资源。这个特点的好处显而易见,当显示屏正在显示信息的时候,外部产生了一个中断,而在中断服务程序中需要显示屏显示其他信息。这样,退出中断服务程序后,原有的信息就可能被破坏了。而在μC/OS-II中采用信号量的方法时,只有显示屏把原有信息显示完毕后才可以显示新信息,从而可以避免这个问题。不过,采用这种方法是以牺牲系统的实时性为代价的。如果显示原有信息需要耗费大量时间,系统只好等待。从结果上看,等于延长了中断响应时间,这对于未显示信息是报警信息的情况,无疑是致命的。发生这种情况,在μC/OS-II中称为优先级反转。简单地说,就是高优先级任务必须等待低优先级任务的完成。在上述情况下,在两个任务之间发生优先级反转是无法避免的。所以使用μC/OS-II时,必须对所开发的系统了解清楚,才能选择对某种共享资源是否使用信号量。

1.2 μC/OS-II性能特点

μC/OS-II是源代码公开的实时嵌入式操作系统,在第1版的基础上做了重大的改进与升级,它的主要特点如下:

(1)公开源代码

源代码公开,并且可以从有关出版物上找到详细的源代码讲解和注释,这样使得系统变得透明,很容易就能把操作系统移植到各个不同的硬件平台上。

(2)可移植性(Portable)

μC/OS-II绝大部分源代码是用C语言写的,而与微处理器硬件相关的那部分是用汇编语言写的,使得μC/OS-II便于移植到其他微处理器上。

(3)可固化(ROMable)

μC/OS-II是为嵌入式应用而设计的,这就意味着,只要开发者有固化手段(即:C编译,连接,下载和固化),μC/OS-II可以嵌入到开发者的系统中。

(4)可裁剪性(Scalable)

开发者可以有选择的使用μC/OS-II中应用程序需要的哪些系统服务,这样可以减少μC/OS-II所需的存储空间。

(5)占先式(Preemptive)

μC/OS-II完全是占先式的实时内核,即总是运行就绪条件下优先级最高的任务。

(6)多任务(Mult-Task)

μC/OS-II可以管理64个任务,但目前的版本保留了8个给系统,应用程序最多有56个任务,赋予每个任务的优先级必须是不同的。μC/OS-II不支持时间片轮转调度法(Roand-roblin Scheduling)。

(7)可确定性(Affirmable)

全部μC/OS-II的函数调用与服务的执行时间具有其可确定性,即μC/OS-II系统服务的执行时间不依赖于应用程序任务的多少。

(8)实用性和可靠性

μC/OS-II自1992年以来,已经被移植到几乎所有嵌入式应用类CPU上,移植范例的源代码可以从因特网上下载。许多行业都有成功应用该实时内核的实例,这些应用的实践是该内核实用性和可靠性的最好证据。

2 嵌入式操作系统μC/OS-II的移植探讨

2.1 移植中的问题

所谓移植,就是使一个实时内核能在其他的微处理器(MPU)或微控制器(MCU)上运行。整个嵌入式系统分为两大层:硬件层和软件层。在移植时,这两个层都要考虑。硬件层主要是处理器,对μC/OS-II进行移植到不同处理器平台时,需要解决的主要问题有:

(1)数据类型的重定义。

对于一个操作系统来说,基于其上进行开发的应用系统一般都使用高级语言,高级语言都有自己的数据类型。但对于不同的处理器由于字长不相同,造成同一数据类型在不同处理器中会有不同的解释,所以对不同的处理器应该重新进行数据类型的定义。

(2)堆栈结构的设计。

当同一个操作系统应用于不同处理器或同一处理器的不同应用系统时,由于各应用系统所追求的性能各有特点,就会要求与性能有很大关系的堆栈结构尽可能与本系统所追求的性能一致。

(3)任务切换时的状态保存与恢复。

这是多任务操作系统最主要的工作,也是最频繁的工作。所以任务切换在实现时的正确与否是操作系统运行时的基本保证,同时它的简洁与否决定操作系统的效率。

2.2 移植μC/OS-II的条件

硬件层主要是处理器,移植μC/OS-II对目标处理器有一定要求,要求如下:

处理器的C编译器能产生可重入代码;处理器支持中断,并且能产生定时中断;用C语言能开、关中断;能支持一定数量的数据存储硬件堆栈;处理器有将堆栈指针以及其他CPU寄存器的内容读出、并存储到堆栈或其他内存中去的指令。

软件层主要分为四个部分:实时操作系统内核,与处理器相关部分,与应用相关部分,用户的应用系统。下面针对移植问题简述这四个部分:

(1)实时操作系统内核

实时操作系统对系统资源进行管理。主要包括任务分配和调度、系统时钟服务、内存管理、消息机制、异常处理等。μC/OS-II所有系统服务均由内核提供,内核将应用系统和底层硬件结合成一个完整的实时系统。

移植的时候内核是不变的,开发者根据自己应用系统的需要来选择实时操作系统内核,开发者不能对内核随意访问,只能使用内核提供的功能服务来开发自己的应用系统。内核确定,那么所提供的系统管理能力,系统服务也就被限定。开发者只能在规定的范围内对系统作些改动。

(2)与处理器相关的代码

这是移植中最关键的部分。内核将应用系统和底层硬件有机结合成一个实时系统。要使同一个内核能适用于不同的硬件体系,就要在内核和硬件之间有一个中间层,这就是与处理器相关的代码。处理器不同,这部分代码也不同。

包括了用#define定义的与处理器相关的常量、宏和类型定义。具体来讲有系统数据类型定义、栈增长方向定义、关中断和开中断定义、系统软中断的定义等。

这部分需要对处理器的寄存器进行操作,所以必须用汇编语言来编写。它包括四个子函数:

μC/OS-II中共定义了6个函数在该文件中。但是最重要的是OSTask Stk Init(),其他都是对系统内核的扩展时用的。

OSTask Stk Init()是在用户建立任务时系统内部自己调用的,对用户任务的堆栈进行初始化。使建立好的进入就绪态任务的堆栈与系统发生中断并将环境变量保存完毕时的栈结构一致。这样就可以用中断返回指令使就绪的任务运行起来。具体的入栈方式要根据不同处理器而定。

(3)与应用相关的代码

这一部分是用户根据自己的应用系统来定制合适的内核服务功能,包括两个文件:O S_C F G.H,INCLUDES.H。

OS_CFG.H来配置内核,用户根据需要对内核进行定制,留下需要的部分,去掉不需要的部分,设置系统的基本情况。比如系统可提供的最大任务数量,是否定制邮箱服务,是否需要系统提供任务挂起

功能,是否提供任务优先级动态改变功能等。

INCLUDES.H系统头文件,整个实时系统程序所需要的文件,包括了内核和用户的头文件。

(4)用户应用系统

这是整个实时系统的最高层,用户可通过利用实时操作系统提供的服务来开发自己的具体应用程序。

3 结束语

在嵌入式应用中,使用实时操作系统(RTOS)是当前嵌入式应用的一个特点,一种时尚,尤其在工业控制系统中,像μC/OS-II这样短小精湛的实时内核,更有用武之地。另外,μC/OS-II开放的、免费嵌入式实时操作系统的应用与推广,不仅缩短开发周期,而且会研发出质量更高,性能更好,更容易维护的应用软件。

从以上的分析中不难看出,对于实时性、可靠性要求较强的项目,特别是大型项目,最好使用μC/OS-II。而对于一些简单的、成本要求低的项目来说,就没必要这么麻烦了。需要指出的是,μC/OS-II的特点远不止这些,应用开发中需要注意的问题也很多,需要用户自己不断地探索和研究。μC/OS-II的移植很具有实际意义,是在嵌入应用系统开始开发之前必须要做的工作。

参考文献

[1][美]Jean J Labrosse.嵌入式实时操作系统μC/OS-II[M].北京:北京航空航天大学出版社,2003.

[2]邵贝贝.译μC/OS-II源码公开的实时嵌入式操作系统.中国电力出版社.

10.嵌入式系统移植工程师 篇十

随着嵌入式系统的飞速发展,在嵌入式手持设备领域,是否有一个快速,友好,可靠的终端人机交换设备是衡量一个手持设备的关键因素。当初的一些简单的人机交互接口已经无法满足人们的要求,嵌入式系统越来越需要一个用户界面良好,并且支持中文图形系统。

在嵌入式软件方面,嵌入式Linux系统和Qt Embedded由于源码完全开源,越来越被社会所接受,正受到越来越广泛的关注,而Qt Embedded作为Linux上主流的GUI开发技术之一,凭借其跨平台、便于移植、模块化等优点被嵌入式开发工程师所青睐。

目前国内在Qt Embedded平台下开发的中文输入法主要有2种方式:(1)移植现有的PC机系统下的基于Q t/X11的中文输入法,移植了基于X Window下的XIM输入协议的中文输入法,但其需要XWindow下Xlib库的支持,在嵌入式系统中的资源是很宝贵的,移植Xlib会占用大量系统内存和增加系统的调用时间。(2)使用Q t/E插件的方法,使用.framebuffer来直接进行操作,不通过X窗口。本文实现的一种Qt Embedded的轻量级的中文输入法,可以方便的输入中文、英文、以及各种字符,对嵌入式项目的开发有很大的实用价值。

1 Qt Embedded简介

Qt是一个功能全面的、可开发高性能的、多平台客户端/服务器的,C++图形用户界面应用程序框架。由挪威Troll Tech公司于1995年底出品,并于2008年6月17日被NOKIA公司收购,以增强NOKIA公司在跨平台软件研发方面的实力,更名为Qt Software。Qt是一种高效的跨平台的应用程序解决方案,Qt支持微软系统,苹果系统以及Linux操作系统,并支持大部分商业的UNIX操作系统和嵌入式操作系统。Qt不但拥有了完善的C++图形库,而且近年来的版本逐渐集成了数据库[1]、OpenGL库、多媒体库、网络、脚本库、XML库、Web Kit库等等,其核心库也加入了进程间通信、多线程等模块,极大的丰富了Qt开发大规模复杂跨平台应用程序的能力,真正意义上实现了其研发宗旨“Code Less;Create More;Deploy Anywhere.”。

Qt Embedded主要用于采用嵌入式Linux系统的PDA或移动电话,Qtopia提供了窗口操作系统、游戏和多媒体、工作辅助应用程序、同步框架、PIM应用程序、Internet应用程序、开发环境、输入法、Java集成、本地化支持、个性化选项以及无线支持等,用于缩短制造商的开发周期。

2 Qt Embedded架构

Qt Embedded不像Qt构建在X Windows之上,而是应用于开发嵌入式操作系统的框架(如图1所示),Qt Embedded构建在Linux的framebuffer之上[2],这样就可以把需要显示的内容直接写入framebuffer中。

3 Qt Embedded输入法实现原理

Qt Embedded的应用程序提供了请求服务器的应用程序来运行,或者它自己作为一个服务器程序来运行,任何的应用程序都可以看作是一个Service层[3],当很多应用程序运行时,最后一个申请到服务器的程序作为客户端使用。Service层负责监听系统的事件,尤其是键盘和鼠标事件,触摸屏的输出,管理顶层窗口,管理光标和屏幕的保护程序等。系统产生事件,首先就传给了Service,然后Service监控到事件的时候,就会自动寻找窗口上的事件的位置,把事件传送给对应的应用程序。

在Server端,每一个连接到QWSServer的Client都有一个QWSClient对象与之对应,这个对象主要记录了Client ID。在应用程序中每创建一个顶层窗口,那么在Server端就会有创建一个QWSWindow实例来与之对应。

每当Server收到一个event的时候,它需要判断应该发送给那一个窗口,这时候,它就会从QWSWindow列表中去找,然后根据这个窗口去找对应的Client应用程序,然后用一个QWSEvent对象来包装这个event,通过socket机制发送给具体的Client应用程序。如果当前系统安装了一个输入法,那么每一次触屏事件产生的时候,都会去调用输入法的相应方法。

在Qt底层,触摸屏被当做一个mouse设备来处理,所以在Qt中,触摸屏的相关处理方法与mouse一致。鼠标驱动程序(即图中的鼠标处理程序,由QWSMouse Handler类或其派生类的实例描述)从设备接收鼠标事件封装的QWSEvent类的实例,然后将其传递给服务器的每个事件[4]。嵌入式Linux的Qt提供了现成的几个鼠标协议的驱动程序。继承QWSMouse Handler类,并创建一个鼠标驱动程序插件,可以实现自定义的鼠标驱动程序。的的QMouse Driver Factory类的默认实现会自动检测插件,在运行时加载到服务器应用程序的驱动程序。QWSTslib Mouse Handler类实现鼠标驱动程序,QWSTslib Mouse Handler继承的QWSCalibrated Mouse Handler的类,提供校准和降噪功能,除了产生鼠标事件,还可以使设备使用的通用触摸屏库。

4 Murphpinyin 拼音输入法的移植

Murphypinyin是目前为止基于Qt/Embedded的一个比较好的开源中文输入法,而且Murphypinyin带有软键盘,用户可以通过触摸屏输入中文、英文、数字和符号等[5]。

首先修改Qt4.6.4源代码中的编译配置文件,使得其支持触摸屏功能。#./configure-embedded x86-qt-gfxqvfb-qt-kbd-qvfb-qt-mouse-qvfb。编译编译tslib对触摸屏支持#./configure--prefix=/usr/local/tslib/--host=arm-linux ac_cv_func_malloc_0_nonnull=yes。运行ts_calibrate产生校正文件pointercal,运行ts_test,以调整ts的etc/ts.conf,配置Tslib的环境变量。编译Qt时使用-qtmouse-tslib(指定带tslib驱动的鼠标)目标环境中必须包含tslib的库和头文件(ts_source)。

重新编译Qt4.6.4,同时编译Qt的configure脚本中必须指定:configure-L-I正确地配置tslib的ts.conf设置Qt环境变量QWS_MOUSE_PROTO显示地指定鼠标事件设备。

将Murphytalk编译进QT库,将生成的四个lib文件lib Murphytalk.so、lib Murphytalk.so.1、lib Murphytalk.so.1.0、lib Murphytalk.so.1.0.0放到Qt Embedded的lib文件夹里。在自己的应用程序中通过if(QApplication::Gui Server==type)QPin yin Impl::install Input Method();来安装输入法,通过if(QApplication::Gui Server==type)QPinyin Impl::release Input Method();来卸载输入法,使用的时候,你只要在主函数中,实现安装和卸载输入法的过程就好了。

3 结束语

本文详细的介绍一个简单实用的中文输入法原理和实现方法。本输便于移植,开发成本更低,且时间大大缩短。并可以进行汉字、英文字母、数字符号等文本信息的输入,还支持词组的功能,适用于嵌入式linux设备上的应用程序的开发。

参考文献

[1]丁林松,黄丽琴.Qt4图形设计与嵌入式开发[M].北京:人民邮电出版社,2009,4

[2]宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2008,2.

[3]Jasmin Blanchette,Mark Summerfield.C++GUI Qt4编程(第二版)[M].闫锋欣,曾泉人,张志强,译.北京:电子工业出版社,2008,8.

[4]Inside Qt Series(十三):Qt/e体系结构概述[OL].2010-01-21.http://www.qkevin.com/archives/98

上一篇:着力推进新华书店行政管理体制改革下一篇:有趣的小猫作文400字

相关推荐