哪位高手告诉我qt+ace 开发跨平台程序,windows 与linux下需要安装些哪些东东能否介绍下相关的一些经验

哪位高手告诉我qt+ace 开发跨平台程序,windows 与linux下需要安装些哪些东东能否介绍下相关的一些经验,第1张

ACE全称adaptive communication enviroment,是一套C++的通信库。它提供了socket/threading/memory management等多种系统调用的面对对象的wrapper,使C++通信软件开发更加简单。

ACE最帅的特点:跨平台!!!!!!ACE屏蔽了底层平台特定的语义,使用ACE编写的C++程序,可以在linux/windows/HP-Unix下编译执行,而且效率很高。曾经做过的一个VOIP项目就是用ACE写的,那个项目的技术相当复杂,需要用到socket/multi-threading等很多与 *** 作系统联系紧密的技术,但用了ACE(界面用Qt)后,那个项目源码可以直接在linux和windows下编译运行,呵呵,还是相当成功的。项目进行中感到ACE相当成熟,举一个朋友说Siemens的某些大型工程也是用的ACE。而且,ACE是免费开源的软件包--不用白不用。

C++ Network Programming就是ACE项目的负责人Schmidt写的,这位老哥以前是华盛顿大学的副教授,主要研究领域是软件工程(他写了不少关于pattern的文章和书),现在猫到UC Irvine去了,好象还是副教授(要这哥们在中国,早应该成教授了吧)。这两本书主要介绍了ACE的使用,也涉及了部份设计方面的内容。第一卷主要介绍ACE的基本功能和使用,第二卷则偏重通讯软件中的design pattern。搞通信软件开发的兄弟们绝对应该看看此书。

另外也有人推荐把ACE作为学习C++的范例来学习,呵呵,这就是个人喜好的问题了总的来说ACE的代码风格还是很不错的--比STL那些天书好看些,呵呵。

Q: 什么是ACE或者ACE2插件

A: 如果把普通的插件比作一棵棵互不关联的小树, 那么ACE库或者ACE2库就是一棵大树干,所有基于ACE的插件就是长在上面的树枝 共有的部分都被集成到一起,因此代码非常短小和快速,而且稳定ACE2是用来取代ACE的版本,虽然有一些插件还未能从ACE转换到ACE2,但是ACE2系的插件现在可说代表了wow插件的最高水平

ACE2是为其他倚赖ACE2才能运行的插件提供库支持的一个库文件,本身不具备任何功能。

如BigWigs[ACE2]就说明BigWigs这个插件需要ACE2的支持。

使用方法:解压缩以后无论是ACE2还是!LIB都直接放入Interface\Addons里面就可以了。

ACE 类插件因为短小精悍 面向对象 有越来越多的插件开始以其作为编写库

目前已经发展到 ACE2

ACE2运行库开发组都是提倡直接内嵌的,完全没有必要单独提出来!没错如果你有10个内嵌了ACE2的插件,开始载入的时候确实会载入10个副本的ACE2导致Warmup显示内存占用偏大,但是在下次的碎片回收中,多余的ACE2副本都会被清除,只留下一个驻留内存。如果有新旧多个版本,则会自动选择最新的版本驻留。所以说,Warmup的数据,不能正确的反映出ACE2插件的实际内存使用。Warmup的作者本身也是ACE开发团队的成员,现在由于Warmup导致的一些对ACE2的误解,这家伙想必也是哭笑不得了,呵。

作为ACE2插件的使用者,完全没有需要去考虑运行库的版本更新等等问题,这是ACE2标准的一个重要精神,是ACE2开发初始就持有的初衷!所有的ACE2运行库,都是可直接内嵌、自动管理版本,不需要使用者进行任何管理干预的!

ACE2作为wow插件界的技术先锋,为插件作者提供了一个良好的开发平台,也切实地为玩家带来了易用、强大而低资源占用的优秀插件。希望大家不要为过往的成见和一些人的误导而错失了如此优秀的插件!

谈运行库而色变,完全是没有必要的。ACE2的优秀运行库(包括ACE2和基于ACE2标准的CandyBar, Dewdrop, Metrognome, Compost, ParserLib等等)不但是简化了插件的开发,优化了代码,也对降低插件资源占用作用。再加上ACE开发社区作者们强烈的优化意识,可以负责的说,ACE2的插件比其他插件绝对更省资源!

本质上来说, Qt是一个跨平台的C++应用程序开发框架,有时又被称为C++部件工具箱。Qt被用在KDE桌面环境、Opera、GoogleEarth、Skype、Adobe Photoshop Album和VirtualBox的开发中。它是诺基亚(Nokia)的QtDevelopment Frameworks 部门的产品。使用 Qt,只需一次性开发应用程序和用户界面,无须重新编写源代码,便可跨不同桌面和嵌入式 *** 作系统部署这些应用程序。

基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有下列优点:

a) 优良的跨平台特性:

Qt支持下列 *** 作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux,Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD,BSD/OS, SCO, AIX, OS390,QNX 等等。

b) 面向对象

Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。

c) 丰富的 API

Qt包括多达 250 个以上的 C++ 类,还替供基于模板的 collections, serialization, file, I/Odevice, directory management, date/time 类。甚至还包括正则表达式的处理 功能。

d) 支持 2D/3D 图形渲染,支持 OpenGL

e) 大量的开发文档

f) XML 支持

最近诺基亚发布了Qt 46——最新版的跨平台应用程序和用户界面框架。Qt 46 对全新平台提供支持,具有强大的全新图形处理能力并支持多点触摸和手势输入,让高级应用程序和设备的开发过程变得更加轻松和快乐。

诺基亚应用服务和框架副总裁Sebastian Nystrom说:“不论是什么样产品设计或开发平台,Qt 46的发布对开发人员来说都是一件令人兴奋的事。”

“开发人员可以轻而易举地为桌面平台或设备(包括数亿部基于Symbian 和 Maemo系统的设备)开发出具有视觉美感和网络连接功能的应用程序。”

Nystrm补充说:“开发人员将非常喜欢使用Qt直观的编程界面,快速开发出功能强大、外表美观的应用程序。”

更多平台

Qt46 首次包含了对Symbian 平台的支持,并在其所支持的平台中新增了 Windows 7、Apple Mac OS 106 (雪豹)和即将上市的Maemo 6。此外还为实时 *** 作系统QNX 和 VxWorks提供了网络社区支持。对Maemo 5的支持目前也已进入研发阶段,其技术预览版第二版已于今日发布。

Qt 对 Symbian 和 Maemo 的支持首次为开发人员创造了使用同一代码库同时针对这两个平台进行开发的机会。能够跨平台分享代码就意味着开发人员所开发的应用程序上市的速度将更快,影响的设备用户群将更广。

Qt Mobility项目下的全新Qt API技术预览版也于今日同时发布。这些跨平台的API为开发人员提供了多种功能,如导航类设备的定位功能,以及信息发送和接收、联系人和网络连接管理等。

外观更炫

Qt 46是在45图形增强功能的基础上创建的,进一步强化了这些图形功能,添加了全新的动画框架(Animation Framework)——包括直观的状态机功能——以及全新的高级图形功能,如不透明、阴影、闪光和滤镜等。

使用手指

Qt46最令人兴奋的新功能之一就是可以创建多点触摸应用程序。这种全新的基于多触点和手势的输入法(如轻触和动力滚动)使Qt46框架的功能更为强大,用户可以通过触觉以动态的方式与应用程序和设备进行互动。

性能更强

传统软件开发观点认为高级用户界面功能的获得通常是以性能严重受损作为代价的。Qt 46 对此观点提出了挑战,为此投入大量工作,既要获得最佳性能,又要能让开发人员所开发的产品达到用户所要求的“令人惊叹”的效果。

性能提升主要包括:一个经过高度优化、重新编写的 Qt GraphicsView 渲染算法、一个全新的 OpenGL 绘图引擎、WebKit、使用 OpenVG 对 2D 矢量图形的支持,以及对全新 DirectFB 的支持。

最新工具

在发布 Qt 46 的同时,作为 Qt 开发跨平台 IDE 的 Qt Creator 也发布了更新版本。Qt Creator 13 和 Qt 46共同构成的 Qt SDK,包含了开发跨平台应用程序所需的全部功能。(来自programbbs)

3、用QT能做什么?

在QT的官方网站谈到了15年来取得了的成就,它帮助世界各地和各个行业组织开发出先进的高度创新的应用和设备。

使用Qt,众多的开发商和公司已经能够:

● 减少了近50%的开发时间。

● 加速了50%的开发速度由于代码可维护

● 减少了50%的代码量

Qt的用户怎么说?

● 94%报告说,Qt的满足或超过其发展的期望

● 92%会向他人推荐使用Qt

● 76%报告因为使用Qt,生产率提高

Qt的应用领域:

有很多出名的例子是都是使用Qt开发的。例如: Arora(一款跨平台的开源网页浏览器)、eva(Linux版QQ聊天软件)、FreeMat(一个自由开源的数值计算环境和编程语言 )、Gadu-Gadu(即时通信软件)、Google地球(Google Earth)(三维虚拟地图软件)、ImageVis3D、KDE(著名的桌面环境)、Elibs(一个许多KDE程序都使用的共享库,如Amarok、K3b、KDevelop、KOffice等)、Lastfm播放器(著名的互联网音乐社区网站的桌面客户端)、Motorola A760(UI 以 Qt/Embedded 建构)、MythTV9(开源的数字视频录制软件)、Opera(著名的网页浏览器)、Qterm(跨平台的BBS软件)、QtExtended、Quantum GIS、Skype(一个使用人数众多的基于P2P的VOIP聊天软件)、SMPlayer(跨平台多媒体播放器)、TeamSpeak(跨平台的音效通信软件) 、Tlenpl:波兰人发明的 instant messaging client TOra、VirtualBox(虚拟机软件)、Xconfig(Linux的Kernel配置工具) 、chmcreator(开源的chm开发工具)……

通信工程和嵌入式还是有点区别的,嵌入式偏重于计算机

通信工程 通信工程是一个比较宽泛的专业。主要学习 :电路、信号与分析、电子技术、通信系统原理、数字通信系统、通信网络基础、电信网络、程控交换技术、无线通信技术、数字微波通信等。 毕业后能在通信领域中从事研究、设计、制造、运营。多在国民经济各部门和国防工业中从事开发、应用通信技术与设备的高级工程技术。 需要掌握的知识和能力: —-1.掌握光波、无线、多媒体等通信技术。 —-2.分析、设计、调试际通信系统和通信网 2嵌入式我也是计算机专业,对这个比较了解,下面是同济大学软件学院的院长说的话,详细介绍了嵌入式,可以让你男朋友看看嵌入式是当前最热门最有发展前途的it应用领域之一。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、pda、电子字典、可视电话、vcd/dvd/mp3 player、数字相机(dc)、数字摄像机(dv)、u-disk、机顶盒(set top box)、高清电视(hdtv)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。 嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。 一类是学电子工程、通信工程等偏硬件专业出身的人,他们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件。另一类是学软件、计算机专业出身的人,主要从事嵌入式 *** 作系统和应用软件的开发。如果我们学软件的人对硬件原理和接口有较好的掌握,我们完全也可写bsp和硬件驱动程序。好处: (1) 目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如 *** 作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业it人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如arm处理器、嵌入式 *** 作系统、mpeg技术、无线通信协议等),掌握这些新技术的人当然很找。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。 (2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。搞企业应用软件的it企业,这个用户的系统搞完了,又得去搞下一个用户的,而且每个用户的需求和完成时间都得按客户要求改变,往往疲于奔命,重复劳动。相比而言,搞嵌入式系统的公司,都有自己的产品计划,按自己的节奏行事。所开发的产品通常是通用的,不会因客户的不同而修改。一个产品型号开发完了,往往有较长一段空闲时间(或只是对软件进行一些小修补),有时间进行充电和休整。另外,从事嵌入式软件的每个人工作范围相对狭窄,所涉及的专业技术范围就是那些(arm、rtos、mpeg、80211等),时间长了这些东西会越搞越有经验,卖卖老本,几句指导也够让那些初入道者琢磨半年的。若搞应用软件,可能下一个客户要换成一个完全不同的软件开发平台,那就苦了。 (3) 哪天若想创业,搞自已的产品,那么嵌入式是一个不错的主意,这可不像应用软件那样容易被盗版。土木学院有一个叫启明星的公司开发出一个好象叫“工程e”的掌上pda(南校区门口有广告),施工技术人员用该pda可当场进行土木概预算和其它土木计算,据说销路特好。我认识的某大学老师,他开发的饭馆用的点菜pda(wince平台,可无线连网和上网),据他说销路不错,饭馆点点pda让客户点菜,多显派头档次。我记得00级2+2班当年有一组同学在学windows程序设计课程时用vc++设计了一个功能很强的点菜系统做为课程项目,当时真想建议他们将这个软件做成pda,估计会有些销路(上海火车站南广场的macdonald便使用很漂亮的pda给用户点食品,像摸像样的)。这些pda的硬件设计一般都是请其它公司给订做(这叫“贴牌”:oem),都是通用的硬件,我们只管设计软件就变成自己的产品了。 缺点是: (1) 入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是 *** 作系统级软件功底不深,则可能不适于此行。 (2) 这方面的企业数量要远少于企业计算类企业。特别是从事嵌入式的小企业数量较多(小企业要搞自己的产品创业),知名大公司较少(搞嵌入式的大公司主要有intel、motorola、ti、philip、samsung、sony、futjtum、bell-alcatel、意法半导体、microtek、研华、华为、中兴通信、上广电等制造类企业)。这些企业的习惯思维方式是到电子、通信等偏硬专业找人。由于我院以前毕业生以企业计算为主,所以我院与这些企业联系相对较少。我院正积极努力,目前已与其中部分公司建立了联系,争取今后能有我院同学到这些企业中实习或就业。 (3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。 我院同学若学习嵌入式,显然应偏重于嵌入式软件,特别是嵌入式 *** 作系统方面,应是我们的强项。对于搞嵌入式软件的人,最重要的技术显然是(实际上很多公司的招聘广告上就是这样写的): (1) 掌握主流嵌入式微处理器的结构与原理 (2) 必须掌握一个嵌入式 *** 作系统 (3) 必须熟悉嵌入式软件开发流程并至少做过一个嵌入式软件项目。 我院在嵌入式软件方面最重要的课程包括: (1) 嵌入式微处理器结构与应用:这是一门嵌入式硬件基础课程,我院用这门课取代了传统的“微机原理与接口”课程(目前国内已有少部分高校it专业这样做了,因为讲x86微机原理与接口很难找到实际用处,只为教学而已)。我们说过,嵌入式是软硬件结合的技术,搞嵌入式软件的人应对arm处理器工作原理和接口技术有充分了解,包括arm的汇编指令系统。若不了解处理器原理,怎么能控制硬件工作,怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率),怎么能写出驱动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员时都要求熟悉arm处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书 (xxx specification),您必须能看懂其中的内存分布和端口使用等最基本的说明(就像x86汇编一样),否则怎么设计软件。有些同学觉得嵌入式处理器课程较枯燥,这主要是硬件课程都较抽象的原因,等我们的嵌入式实验室10月份建好后,您做了一些实验后就会觉得看得见摸得着。还有同学对arm汇编不感兴趣,以为嵌入式开发用c语言就足够了。其实不应仅是将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理的。一个不熟悉汇编语言的人,怎么能在该处理器写出最优的c语言代码。在嵌入式开发的一些关键部分,有时还必须写汇编,如bootloader等(可能还包括bsp)。特别是在对速度有极高要求的场合(如dsp处理器的高速图像采集和图像解压缩),目前主要还要靠汇编写程序(我看到过很多公司是这样做的)。当您在一个嵌入式公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的(我就遇到过),这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时您就必须看懂汇编程序,否则软硬件人员可能就无法交流。很多嵌入式职位招聘时都要求熟悉汇编。 [小知识] 目前嵌入式处理器常见的有arm、powerpc、mips、motorola 68k、coldfire(冷火)等,但arm占据了绝对主流(资料说手机中几乎100%都是arm处理器)。arm是一个只卖知识产权的公司,目前获得购买了arm cpu核授权许可的大公司很多,包括intel、samsung、amstel、motorola、philip等,他们都在arm cpu核的基础上进行了一些外围扩展,形成自己的处理器(如samsung s3c2410,motorola imxl9328等处理器都是采用arm 9内核,指令一级是相同的)。而众多中小公司又购买了这些处理器,设计了各种各样的开发板,如华恒等国内很多著名嵌入式公司都生产基于samsung s3c2410的开发板,供最终用户使用或供教学实验。在arm这个食物链上,arm公司是大鱼,intel、samsung等公司是小鱼,而华恒等则是虾米,最终用户(想我们要采购嵌入式开发板的实验室)则是喂虾米的。intel早期生产的是低端arm(strong arm,相当于arm 7),现在转向主要生产高端arm(即intel xscale处理器,相当于arm 10,主要用在高端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的大多数功能。以上是我的一点了解,可能有不对的地方。我们学院正在建设的嵌入式实验室(10月底到货)包括30套arm 7系统(拟采用samsung s3c44b0x开发板,主要用于嵌入式处理器结构、嵌入式linux课程实验),10套arm 9系统(拟采用samsung s3c2410x开发板,主要用于windows ce课程建设),每套实验板都配了高速仿真器,价格都很贵(比我们招标的dell pc还贵),很容易损坏,同学应爱护使用。 (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 2418内核移植在其上。

要求:

1、300m的!

2、2根天线的!

还可以选择其他品牌的!

例如:腾达、迅捷、水星、等。

注意: 路由器的M是Mbps的简称,比特率是用来描述数据传输速度快慢的一个单位,比特率越大,数据流速越快。理论上150Mbps的网速,每秒钟的传输速度就是1875MB/S。300Mbps的网速,每秒钟的传输速度就是375MB/S。数据的流速是变动的,比特率只是一个平均参考值。1M的网速,理论上是128KB/S,但实际上只有120左右不到,因为数据在传输过程中会有一定的损耗。

举例:

也就是说路由器标注的150M表示路由器最多只能支持到150M的带宽,就算网速是200M的,经过路由器出来也只有150M,300M的同理。

VxWorks的信号量机制分析

VxWorks信号量是提供任务间通信、同步和互斥的最优选择,提供任务间最快速的通信。也是提供任务间同步和互斥的主要手段。VxWorks提供3种信号量来解决不同的问题。

二进制信号量:最快的最常用的信号量,可用于同步或互斥。

互斥信号量:为了解决内在的互斥问题如优先级继承、删除安全和递归等情况而最优化的特殊的二进制信号量。

计数信号量:类似于二进制信号量,但是随信号量释放的次数改变而改变。

二进制信号量

二进制信号量能够满足任务间的互斥和同步,需要的系统开销最小,因此也称快速信号量。二进制信号量可以看成一个标志,对应资源是可用还是不可用。当一个任务调用semTake ()请求一个信号量时,如果此时信号量可用,信号量会被清零,并且任务立即继续执行;如果信号量不可用,任务会被阻塞来等待信号量。

当一个任务调用semGive ()释放一个二进制信号量时。如果信号量已经可用,释放信号量不会产生任何影响;如果信号量不可用并且没有任务等待使用该信号量,信号量只是被简单地置为可用;如果信号量不可用并且有一个或多个任务等待该信号量,最高优先级的任务被解阻塞,信号量仍为不可用。

互斥

当两个以上的任务共享使用同一块内存缓冲区或同一个I/O设备之类的资源时,可能会发生竞争状态。

二进制信号量可以通过对共享资源上锁,实现高效的互斥访问,不象禁止中断或禁止抢占,二进制信号量将互斥仅仅限于对与之联系的资源的访问,并且比禁止中断和禁止抢占提供更精确的互斥粒度。使用时创建用于保护资源的二进制信号量,初始时信号量可用。

当任务需要访问这个资源时,首先取得这个信号量,所有其它想要访问这个资源的任务将被阻塞。当任务完成了对该资源的访问时,释放该信号量,允许其他任务使用该资源。因此所有对一个需要互斥访问资源的 *** 作由semTake ()和semGive ()对一起来实现。

semTake(semMutex,WAIT FOREVER)

临界区,某一时刻仅被一个任务访问

semGive (semMutex)

同步

信号量另一种通常的用法是用于任务间的同步机制。在这种情况下,信号量代表一个任务所等待的条件或事件。最初,信号量是不可用的。一个任务或中断处理程序释放该信号量来通知这个事件的发生。等待该信号量的任务将被阻塞直到事件发生、该信号量可用。一旦被解阻塞,任务就执行恰当的事件处理程序。信号量在任务同步中的应用对于将中断服务程序从冗长的事件处理中解放出来以缩短中断响应时间是很有用的。

互斥信号量

互斥信号量是一种特殊的二进制信号量,用于解决具有内在的互斥问题:优先级继承、删除安全和对资源的递归访问等情况。

对于一般的 *** 作系统,一般互斥信号量就是二值信号靓量,但VxWoks中有非同寻常的意义。另外一个典型就是,Linux内核也单独设立了互斥信号量。

互斥信号量与二进制不同点在于:

①定义一个互斥信号量时,其已经初始化完毕为可用,它仅用于互斥;

②仅能由取(semTake ())它的任务释放,即由同一个任务申请然后使用完毕后释放;

③因为semTake和semGive是成对出现的,因此不能在ISR 中释放(semGive ())。

优先级继承

优先级倒置发生在一个高优先级的任务被迫等待一段不确定时间,等待一个低优先级任务完成。VxWorks允许使用优先级继承算法,在互斥信号量中使用选项SEM-INVERSION-SAFE ,将使能优先级继承算法,优先级继承协议确保拥有资源的任务以阻塞在该资源上的所有任务中优先级最高的任务的优先级执行,直到它释放所拥有的所有信号量,然后该任务返回到正常状态。因此这个“继承的高优先级”任务受到不会被任何中间优先级任务抢占的保护。

删除安全

另一个互斥问题涉及到任务删除。在一个受信号量保护的临界区,经常需要保护在临界区执行的任务不会被意外地删除。删除一个在临界区执行的任务可能引起意想不到的后果,造成保护资源的信号量不可用,可能导致资源处于破坏状态,也就导致了其他要访问该资源的所有任务无法得到满足。

原语taskSafe()和taskUnsafe ()提供了防止任务被意外删除的一种方法。同时互斥信号量提供了选项SEM-DELETE-SAFE ,使用这个选项,每次调用semTake ( )时隐含地使能了taskSafe(),当每次调用semGive ()时隐含地使能了taskUnsafe ()这种方式,任务得到信号量时得到不会被删除的保护。

递归资源访问

互斥信号量能够被递归地获得。这意味着信号量能够被一个拥有该信号量的任务在该信号量最终被释放之前多次获取。递归对于满足一些子程序即要求能够相互调用但是也要求互斥访问一个资源非常有用。这种情形是可能的,因为系统需要跟踪哪一个任务当前拥有信号量。

计数器信号量

计数器信号量是实现任务同步和互斥的另一种手段,在具体实现上有点差异。计数器信号量除了像二进制信号量那样工作外,还保持对信号量释放次数的跟踪。与二进制信号量不同的时,计数型信号量每次释放,计数器加一;每次获取,计数器减一,当信号量减到0 时,试图获取该信号量的任务被阻塞。

正如二进制信号量,当计数信号量释放时,如果有任务阻塞在该信号量阻塞队列上,那么任务解除阻塞;但是如果信号量释放时,没有任务阻塞在该信号量阻塞队列上,那么计数器加一。

结 论

通过对嵌入式 *** 作系统VxWorks的多任务之间的通信机制的分析可以看出,信号量在实现多任务间的通信、同步和互斥中发挥着重要的作用。因此,深入理解和正确使用VxWorks的信号量,可以提高实时系统中多任务间通信的效率

摘要:介绍内存压缩技术和一个基于硬件的内存压缩系统模型,探讨内存压缩技术在嵌入式系统中的应用;重点介绍内存压缩系统的硬件要求及 *** 作系统对内存压缩机制的支持;简单介绍内存压缩中常用的算法Lempel-Ziv,并就内存压缩技术在嵌入式系统中的应用问题作一些探讨。

关键词:嵌入式系统 内存压缩 压缩内存控制器 Lempel-Ziv算法

1 内存压缩技术介绍

为节省存储空间或传输带宽,人们已经在计算机系统中广泛地使用了数据压缩技术。在磁介质存储数据或网络传输数据时,人们使用基于硬件或软件的各种压缩技术。当压缩技术在各个领域都很流行时,内存压缩技术却由于其复杂性而一直未得到广泛使用。近年来,由于在并行压缩一解压算法以及在硅密度及速度方面取得的进展,使得内存压缩技术变得可行。

内存压缩技术的主要思想是将数据按照一定的算法压缩后存入压缩内存中,系统从压缩内存中找到压缩过的数据,将其解压后即可以供系统使用。这样既可以增加实际可用的内存空间,又可以减少页面置换所带来的开销,从而以较小的成本提高系统的整体性能。

内存压缩机制是在系统的存储层次中逻辑地加入一层——压缩内存层。系统在该层中以压缩的格式保存物理页面,当页面再次被系统引用时,解压该压缩页后,即可使用。我们将管理这一压缩内存层的相关硬件及软件的集合统称为内存压缩系统。内存压缩系统对于CPU、I/O设备、设备驱动以及应用软件来说是透明的,但是 *** 作系统必须具有管理内存大小变化以及压缩比率变化的功能。

对于大多数的 *** 作系统而言,要实现内存压缩,大部分体系结构都不需要改动。在标准的 *** 作系统中,内存都是通过固定数目的物理页框(page frame)来描述的,由 *** 作系统的VMM来管理。要支持内存压缩,OS要管理的实际内存大小和页框数目是基于内存的压缩比率来确定的。这里的实现内存是指 *** 作系统可的内存大小,它与物理内存的关系如下:假设PM是物理内存,RM(t)是系统在t时刻的实际内存,而CR(t)是压缩比率,在给定时刻t可支持的最大实际内存为RM(t)=CR1(t)×PM。然而,由于应用程序的数据压缩率是不依赖于OS而动态变化的,未压缩的数据可能会耗尽物理内存,因此当物理内存接近耗尽时, *** 作系统必须采取行动来解决这个问题。

2 内存压缩系统的硬件模型

目前由于内存压缩的思想越来越引起人们的注意市场上也出现了一些基于软件的内存压缩器。这些内存压缩器主要是通过软件对数据进行压缩,但由于访问压缩数据带来的延迟,它在系统性能方面改进并不明显,有些甚至降低了系统性能。本节介绍一种基于硬件的内存压缩系统模型。

图1是一个典型的内存压缩系统的硬件模型,包括了压缩内存、L3高速缓冲、压缩内存控制器等硬件部分。

其中压缩内存(133MHz SDRAM)包含了压缩数据。L3高速缓冲是一个共享的、32MB、4路组相联、可回写的高速缓冲,每行大小为1KB,由两倍数据率(DDR)SDRAM制定。L3高速缓冲包含了未压缩的缓冲行,由于大部分的访问都可以在L3高速缓冲中命中,因此它隐藏了访问压缩主存引起的延迟。L3高速缓冲对于存储分级体系中的上层而言就是主存,它的 *** 作对于其它硬件,包括处理器和I/O来说都是透明的。压缩内存控制器是整个内存压缩系统的控制中心,它负责数据的压缩/解压,监控物理内存的使用情况以及实际地址到物理地址的寻址过程。

数据压缩过程是这样的:压缩内存控制将1KB的高速缓冲行压缩后写入压缩内存中,然后将它们从压缩内存中读出后解压。其压缩算法就是Lempel-Ziv算法,我们会在下一部分介绍这个算法。压缩机制将压缩的数据块以不同的长度格式存放到内存中。压缩内存的存储单元是一个256字节的区域。按照压缩比率不同,一个1KB的内存块(正好是L3每行的大小)可以占据0~4个压缩区域。

压缩内存控制器必须根据长度格式的不同将系统总线上的实际地址翻译成物理内存的中的物理地址。实际地址是出现在处理器外部总线上常规地址。篁 址用来录十压缩内存的256字节区域。实际地址空间存在于L1/L2/L3高速缓冲中,用于立即访问。而其余的内存内容部分以压缩形式存在于物理内存中。内存控制器通过查询压缩翻译表(CTT)执行从实际地址到物理地址的翻译,这个表被保留在物理内存的某个位置。图2是CTT表的格式及内存控制器的寻址模式。

每个1KB内存块的实际地址映射到CTT的一项,而CTT每项共16字节,包括四个物理区域地址,每个地址指向物理内存听一个256字节区域。对于少于120位的块,如一个全为零的块,则使用一种特殊的CTT格式,称为通用行格式。在这种格式中,压缩数据全部存放在CTT项中,代替了四个地址指针。因此,一个1KB的通用块仅占用物理内存中的16字节,其压缩比率达到64:1。

压缩内存控制器中有一系列的寄存器用于监控物理内存使用。Sectors Used Register(SUR)向 *** 作系统报告压缩内存的使用情况。The Sectors Used Threshold Registers,SUTHR和SUTLR,用于设置内存耗尽情况的中断入口点。SUTLR寄存器是PCI中断电路INTA的入口,而SUTHR寄存器是NMI中断的入口。当SUR超过了SUTLR的值,内存控制器产生一个中断,则 *** 作系统采取措施来阻止内存消耗。

在实际地址到物理地址的转换中,一个有用的方法是快速页 *** 作。它允许控制器仅修改CTT项的四个指针,从而将4KB的页面内容换出或清空。快速页 *** 作通过将与4KB页面相关的CTT项全部修改通用行格式(即全为零),从而将这4KB页面的内容全部清空。同样,一对页面可以通过交换它们相关的CTT项的区域指针来交换页面内容。由于没有大量的数据移动发生,快速页面 *** 作速度相当快。

压缩内存控制器的压缩/解压功能是基于LempelZiv算法来进行的,因此下一节将简单介绍一下该算法的思想。

3 内存压缩算法Lempel-Ziv

绝大多数的压缩算法,包括用得特别流行的Lempel-Ziv压缩算法家庭,都是基于对原子记录(Token)字符串的完全重复检测。这个算法虽然不是最好的算法,但是,Lempel-Ziv算法强调的是算法的简单与取得高压缩率的速率,因此它还是在内存压缩中得到了广泛的应用。

Lemple-Ziv算法(简称LZ)是编码时将一个位串分成词组,然后将数据流描述成一系列的对。每个对组成一个新的词组,它包含一个数字(前一个词组的标识)和一个位(被附加到前一个词组上)。这种编码方式很庞大,可是一旦应用到适合的字符串,它就是相当有效率的编码方式。下面举例说明这种算法是如何编码的。

++表示连接(010++1=0101),U=0010001101是未被压缩的字符串。C是压缩后的字符串。P(x)表示词组数x。先看一下U=0010001101发现,它可以被写为U=0++010001101,因此得到P(1)=P(0)++0。现在继续将其写为U=0++02++0001101,可得到P(2)=P(1)++1。现在我们已经将P(2)描述为上一词组和一个新的位的组合。下一步,U=0++01++00++01101,并得到P(3)=P(1)++0。现在我们注意到,有U=0++01+00+011++01,而P(4)=011=P(2)++1,最后得到P(5)=P(1)++1。运算的步骤如表1所列。

一旦创建了表1,就有了整个编码的图表。要创建Lempel-Ziv数据流,则依照公式创建对。如果公式是P(x)=P(A)++B,则每个对为(A++B)。因此P(1)=P(0)++0变为(00++0),P(2)=P(1)++0变为(01++0),依此类推,将所有这些对连接起来,就得到了最后的字符串,结果如表2所列。这样,C就变成000011010101011,看来比U要长得多。但这里由于U的长度短,因此未能看出优势,而且包含P(0)的公式都没有压缩,所以也引起了长度增加。

Lempel-Ziv字符串的解码是很简单的,就是抓住其中的对,对照表1进行重构。

表1 编码过程

步 骤 值 公 式 U

0 - P(0) 0010001101

1 0 P(1)=P(0)++0 0++010001101

2 01 P(2)=P(1)++1 0++01++00++01101

3 00 P(3)=P(1)++0 0++01++00++01101

4 011 P(4)=P(2)++1 0++01++00++011++01

5 01 P(5)=P(1)++1 0++01++00++011++01

表2 如何创建编码字符串

公 式 P(1)=P(0)++0 P(2)=P(1)++1 P(3)=P(1)++0 P(4)=P(2)++1 P(5)=P(1)++1

对 00++0=000 01++1=011 01++0=010 10=++1=101 01++1=011

C

000++011++010++101++011=000011010101011

4 *** 作系统对内存压缩的支持

在压缩内存系统中,内存大小指的是实际内存大小,它比物理内存大。在引导时,BIOS向 *** 作系统报告的内存大小就比实际安装的物理内存要大。例如,硬件原型安装的是512MB的SDRAM,但BIOS向 *** 作系统报告的内存大小为1GB。当应用程序数据以2:1或更高的比率压缩时,实际内存的工作方式与一般 *** 作系统的内存工作方式是相同的。但当应用程序以未压缩数据来填充内存时(如一个zip文件不可能达到2:1的压缩比率),由于一般的OS只看到实际地址空间,因此不能意识到物理内存已经耗尽。例如,一个 *** 作系统的实际内存为1024MB,而牧师内存为512MB。这时实际内存已经分配了600MB,系统显示还有424MB的空闲内存。但是由于已分配内存的压缩率很低,此时物理内存的耗用已经接近512MB。如果再近一步地分配内存,那么系统就会因为物理内存的耗尽而崩溃,尽管它仍然显示还有424MB的空闲内存。这种情况下,必须由 *** 作系统提供对压缩内存进行管理的支持。

由于内存压缩是一个比较新的概念,一般的情况作系统都没有这样的机制来区分实际地址和物理地址,也不能处理“物理内存耗尽”的情况。不过,只要对 *** 作系统内核做一些小的改动或者在 *** 作系统之上增加一个设备驱动程序,即可达到目的。

一般来说,要从以下几方面对压缩内存进行管理。

(1)监控物理内存使用情况

通过轮询或中断法,查看物理内存的使用情况,并在物理内存耗尽前给出警告。压缩内存管理例程是通过压缩内存控制器中的一些寄存器来实现对物理内存的监控。SUR报告物理内存的使用情况,SUTHR和SUTLR用于设置中断临界值。压缩内存管理算法是基于物理内存使用的四种状态,分别为steady、acquire、danger和interrupt,其临界值的关系是mc_th_acquire<mc_th_danger<mc_th_interrupt。

我们可以使用轮询和中断相结合的方法进行监控,并对物理内存使用的变化作出反应。通过时钟中断来驱动轮例程,该例程每10ms读取一次SUR的值,并将它与系统设定的临界值比较。当系统处于steady状态时,不用采取任何行动;当使用超过mc_th_acquire,应该增加nr_rsrv_pages来限制内存分配,但这并未引起内存缺乏;当使用超过mc_th_danger,应该增加nr_rsrv_pages到引起内存缺乏,并导致页面分配器和置换进程回收内存页面,一旦进入到该状态,物理内存管理例程会唤醒置换进程回收内存。

(2)回收内存以及清空空闲页面内容以减少使用

以标准的Linux内核为例, *** 作系统中有两具主要的变量来管理内存太少的情形。这两个变量是nr_free_pages和struct freepages。为了检测内存是否已耗尽,在分配内存前要进行检查。

if(nr_free_pages<freepagesmin){

/内存太少,回收页面/

}

else

{/可以进行分配/

在内存压缩系统中,通过增加一个新变量nr_rsrv_pages来完成此功能。这样就使最小空闲页面数量变为:freepagesmin"=freepagesmin+nr_rsrv_pages。

通过动态地调整nr_rsrv_pages变量,压缩内存管理例程可以人为地造成内存缺乏的现象,从而引起置换进程回收页面,此时会将调用进程暂时挂起。回收内存包含缩减各种缓冲,并将进程页面置换到磁盘上。当页面返回到空闲页面池时,它们会被清零。我们可以使用前面提到的快速页面 *** 作来减少清空页面 *** 作所带来的开销。

(3)阻塞CPU周期以减少物理内存使用率

当物理内存使用超过监界值mc_th_interrupt,控制器就中断处理器,nr_rsrv_pages进一步增加,然后CPU blocker就开始运行。我们在轮询机制的基础上还使用了中断机制,因为中断机制比轮询机制更加快速。如果在10ms的间隔中,物理内存使用突然上升,硬件中断会比轮询例程更早检测到这一情况。为了更加安全,我们使用CPUblocker来阻塞引起物理内存使用的进程。CPU blocker是空闲线程,它们可以使CPU空忙。由于页面被置换到磁盘是以机器速度运行的,而物理内存使用却可以以内存访问速度运行,速度从而得到增加。当牧师内存使用持续增加,以至换页也无法缓解时,进程需要被阻塞。我们就通过启动CPUblocker来阻塞CPU周期直到换页机制能有效地降低物理内存使用。CPUblocker不会阻塞中断,而且每40ms它就会让出CPU以免其它进程被饿死。

5 内存压缩技术在嵌入式系统中的应用

嵌入式系统是一种特殊的计算机系统,它是一个更大的系统或设备的一部分。通常,一个嵌入式系统是驻留在单处理机底板上的,其应用程序存储在ROM中。事实上,所有具有数字接口的设备——监视器、微波炉、VCRs、汽车等,都使用了嵌入式系统。一些嵌入式系统包含了 *** 作系统,称为嵌入式 *** 作系统。为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然在功能上和标准微处理器基本是一样的,但和工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性中,内存仍然是珍贵的资源,因此研究内存压缩技术在嵌入式系统中的应用具有一定的价值。

内存压缩的思想在一些嵌入式 *** 作系统中,实际上已经得到了体现。例如在VxWorks中,当 *** 作系统下载到目标机上时,其中一种方式是将引导程序和VxWorks映像都存放在ROM中。为了将其解压后再从ROM拷贝到RAM。这种基于软件的压缩方式,可以节省ROM空间,但其引导过程相对较慢。

以上的内存压缩技术在ROM中得到了应用,但对于RAM来讲,基于软件内存压缩技术,由于其访问压缩数据可能造成的延迟和不确定性,会对嵌入式系统的实时性造成和。因此它与虚拟内存技术一样,在嵌入式系统中未得到广泛应用。

本文所介绍的内存压缩系统是基于硬件的。在相同基准下,测试结果显示出,该系统的运行速度比标准系统的运行速度快13倍。如果要实现相同大小的内存,采用内存压缩系统的硬件费用比购买RAM的费用要低,而且内存越大,其节省的费用越多,可以达到一半的价钱。因此笔者认为在内存资源极其宝贵的嵌入式系统中,实现基于硬件的内存压缩系统具有较大的价值。

结语

本文介绍的内存压缩系统是基于专门的硬件支持,即L3高速缓冲和内存控制器。在目前大多数Pentium以上架构的硬件平台上,只需要对 *** 作系统内核做一些小的屐,或者增加一个设备驱动及服务程序,即可完成此项功能。由于嵌入式系统对实时性的要求,基于硬件的内存压缩技术可以在增大可用内存的同时不影响系统的实时性,其硬件费用相对RAM的价格更低,具有一定的实用价值。

实时 *** 作系统

英文称Real

Time

Operating

System,简称RTOS。

1、实时 *** 作系统定义

什么东西一旦弄上实时两个字就是对响应时间有严格的要求。实时 *** 作系统贵在实时,要求在规定的时间内完成某种 *** 作。主要用在工业控制中,实时 *** 作系统中一般任务数是固定的,有硬实时和软实时之分,硬实时要求在规定的时间内必须完成 *** 作,这是在 *** 作系统设计时保证的;软实时则没有那么严,只要按照任务的优先级,尽可能快地完成 *** 作即可。我们通常使用的 *** 作系统在经过一定改变之后就可以变成实时 *** 作系统。

实时 *** 作系统是保证在一定时间限制内完成特定功能的 *** 作系统。例如,可以为确保生产线上的机器人能获取某个物体而设计一个 *** 作系统。在“硬”实时 *** 作系统中,如果不能在允许时间内完成使物体可达的计算, *** 作系统将因错误结束。在“软”实时 *** 作系统中,生产线仍然能继续工作,但产品的输出会因产品不能在允许时间内到达而减慢,这使机器人有短暂的不生产现象。一些实时 *** 作系统是为特定的应用设计的,另一些是通用的。一些通用目的的 *** 作系统称自己为实时 *** 作系统。但某种程度上,大部分通用目的的 *** 作系统,如微软的Windows

NT或IBM的OS/390有实时系统的特征。这就是说,即使一个 *** 作系统不是严格的实时系统,它们也能解决一部分实时应用问题。

2、实时 *** 作系统的特征

通常,实时 *** 作系统必须有以下特征:

1)多任务;

2)有线程优先级

3)多种中断级别

小的嵌入式 *** 作系统经常需要实时 *** 作系统。内核要满足实时 *** 作系统的要求。但其它部件,如设备驱动程序也是需要的,因此,一个实时 *** 作系统常比内核大。

3、实时 *** 作系统的分类

软实时系统和硬实时系统。

实时系统对逻辑和时序的要求非常严格,如果逻辑和时序出现偏差将会引起严重后果。实时系统有两种类型:软实时系统和硬实时系统。

软实时系统仅要求事件响应是实时的,并不要求限定某一任务必须在多长时间内完成;而在硬实时系统中,不仅要求任务响应要实时,而且要求在规定的时间内完成事件的处理。通常,大多数实时系统是两者的结合。

事实上,没有一个绝对的数字可以说明什么是硬实时,什么是软实时。它们之间的界限是十分模糊的。这与选择什么样的CPU,它的主频、内存等参数有一定的关系[1]。另外,因为应用的场合对系统实时性能要求的不同而有不同的定义。因此,在现有的固定的软、硬件平台上,如何测试并找出决定系统实时性能的关键参数,并给出优化的措施和试验数据,就成为一个具有普遍意义并且值得深入探讨的课题。本文就是基于此目的进行讨论的。

因为采用实时 *** 作系统的意义就在于能够及时处理各种突发的事件,即处理各种中断,因而衡量嵌入式实时 *** 作系统的最主要、最具有代表性的性能指标参数无疑应该是中断响应时间了。中断响应时间通常被定义为:

中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间[2]。

中断延迟时间=MAX(关中断的最长时间,最长指令时间)

+

开始执行ISR的第一条指令的时间[2]。

以上就是关于哪位高手告诉我qt+ace 开发跨平台程序,windows 与linux下需要安装些哪些东东能否介绍下相关的一些经验全部的内容,包括:哪位高手告诉我qt+ace 开发跨平台程序,windows 与linux下需要安装些哪些东东能否介绍下相关的一些经验、本科通信工程搞软件开发嵌入式方面(比如凌阳)需要哪些知识求指点、买无线路由器主要看哪些参数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9393149.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存