C+在嵌入式系统中的运用_第1页
C+在嵌入式系统中的运用_第2页
C+在嵌入式系统中的运用_第3页
C+在嵌入式系统中的运用_第4页
C+在嵌入式系统中的运用_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、可编辑ppt,1,C+技术大会C+在嵌入式系统中的运用,何宗键 同济大学软件学院 嵌入式系统研究中心 2005 . 11,可编辑ppt,2,日程,从嵌入式系统谈起 让C+为嵌入式系统服务 C+的应用案例研究,可编辑ppt,3,Question?,C+ keyword : volatile,volatile UINT1 * ptr = (UINT1 *) 0 x1234; / Wait for register to become non-zero. while (*ptr = 0) ;/ pooling / Do something else.,可编辑ppt,4,嵌入式系统,IEEE(国际电气

2、和电子工程师协会)的定义 Devices used to control ,monitor or assist the operation of equipment ,machinery or plants. 对定义的理解: 以应用为中心,以计算机技术为基础,并且软硬件是可裁剪的,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。,可编辑ppt,5,嵌入式系统的特点,嵌入性:由于是嵌入到对象系统中,必须满足对象系统的环境要求,如物理环境(小型)、电气/气氛环境(可靠)、成本(价廉)等要求。 专用性:软、硬件的裁剪性;满足对象要求的最小软、硬件配置等。(欧洲:Dedicated

3、 System) 计算机系统:嵌入式系统必须是能满足对象系统控制要求的计算机系统。与上两个特点相呼应,这样的计算机必须配置有与对象系统相适应的接口电路。,可编辑ppt,6,嵌入式体系结构,嵌入式操作系统,嵌入式应用程序,可编辑ppt,7,近年来嵌入式设备市场机会,1.6 Billion units,可编辑ppt,8,嵌入式机遇,2004年4月 中国工程院院士 倪光南: 我国嵌入式应用的规模排在世界第三。2002年,我国嵌入式软件市场销售额为118.56亿元,占到了同年我国软件总产值1100亿元的10%,而今天已经占到了软件产业的40%,按2003年我国软件市场实现销售额399.6亿元计算,约为

4、13.6亿元。尽管如此,仍不容乐观。全球嵌入式软件市场在2002年时就超过了317亿美元。伴随着国内信息家电、手机、汽车电子等行业需求的加剧,嵌入式软件将扮演着越来越重要的角色。 传统的IT设备应该逐渐转变为嵌入设备,这是一个大趋势。在这个大趋势中,软件的地位越来越重要。因此,嵌入式软件在提升IT制造业的竞争力、优化产业结构的过程中起到了非常重要的作用,发展嵌入式软件势在必行。 我们在嵌入式软件技术方面与国外的差距不大。因为嵌入式软件是以应用为前提的,没有垄断的可能。谁掌握了应用,谁就能做得更好。,可编辑ppt,9,硬件的发展,嵌入式微处理器 X86工控领域。发展方向:小型、低功耗 ARM速度

5、、功能扩展 解决方案 手机、PDA、数码相机、MP3、MP4、游戏机、DVD,可编辑ppt,10,嵌入式软件开发人员,嵌入式领域,熟悉硬件技术。对软件技术与工程不太了解,熟悉软件工程思想与应用程序开发。对硬件设计,硬件原理不熟悉,可编辑ppt,11,嵌入式编程的一些特点,资源受限 处理器速度:算法的效率 内存少:所以必须非常注意内存的泄漏 I/O及外设 手机:显示屏幕,没有鼠标 外设的多样性,可编辑ppt,12,编程语言,嵌入式 系统,Assembly Language,Java / .NET,C / C+,8-bit, 16-bit单片机,J2ME, .NET CF,应用范围最广泛,可编辑p

6、pt,13,Assembly Language,优点 灵活,操作硬件 运行高效,体积小 缺点 代码冗长、复杂、容易出错 开发效率低 与硬件绑定 应用领域 低端嵌入式系统 系统的Startup代码 对运行效率要求比较高的地方,可编辑ppt,14,Java / .NET / 脚本语言,优点 RAD开发 简单易用 缺点 运行效率低 消耗系统资源大 应用领域 应用程序开发 图形界面 / 游戏开发,可编辑ppt,15,C语言,Linux / UNIX世界的系统编程语言 已经被广泛应用于嵌入式系统编程 越来越多的取代汇编语言,可编辑ppt,16,如何选择,开发效率,运行效率,汇编语言,虚拟机 / 脚本语言

7、,可编辑ppt,17,ThenWhy C+?,可编辑ppt,18,Bjarne Stroustrup如是说,C+s emphasis on general features (notably classes) has been its main strength C+ will not be a “Windows language” or a “web language” or even an “embedded systems language.” It will be a general-purpose language that supports those applications a

8、reas using a common set of facilities.,可编辑ppt,19,C+包含的一些思想,Better C 抽象数据类型ADT 面向对象的思想 OOD OOP 范型编程 GP template,可编辑ppt,20,案例分析:失败的手机项目,可编辑ppt,21,AndWhy NOT C+?,可编辑ppt,22,一些质疑,From comp.lang.c+ all the system objects from applications to interrupt handlers are defined as C+ classes.,可编辑ppt,34,class Ba

9、se public: Base() m_pArr = new int1024; if ( ! m_pArr) / what should we do? int * m_pArr; ;,构造函数没有返回值,可编辑ppt,35,class Base public: Base(bool ,可编辑ppt,36,class Base public: Base(bool ,可编辑ppt,37,共识:对象的构造失败的唯一方法是在构造函数中抛出异常,可编辑ppt,38,但是,异常处理会显著的增加代码的体积。 统计数字:5% - 20% Symbian中的方案: 关闭编译器的异常处理开关 Symbian中构造函

10、数失败怎么办?,可编辑ppt,39,Symbian 异常处理,TInt GetL(TInt aIndex) if(aIndex = KArraySize) User:Leave(KErrArgument); else return iArrayaIndex; / 使用这个函数: TInt x, err; TRAP(err, x = GetL(5);) if(err != KErrNone) / 输出错误信息等等 ,int Get(int aIndex) if(aIndex = KArraySize) throw new Exception(); else return iArrayaIndex

11、; / 使用这个函数: try x = GetL(5); catch(Exception e) /输出错误信息等等 ,可编辑ppt,40,清理栈Cleanup Stack,void FunL() HBufC * wbuf = HBufC:NewL(10); CleanupStack:PushL(wbuf); HBufC * wbuf2 = HBufC:NewL(20); CleanupStack:PushL(wbuf2); RFs fs; User:LeaveIfEror( fs.Connect(); CleanupClosePushL(fs); do_sth_maybe_leaveLLL()

12、; CleanupStack:PopAndDestroy(3); ,可编辑ppt,41,Efficient exception handling rules,Rule 1: Functions that can leave should have a letter L at the end of their names. void MyFunctionL() iMember = new (ELeave) CMember; iValue = AnotherFunctionL(); User:LeaveIfError(iSession.Connect(); Rule 2: While alloca

13、ting memory on the heap, if the pointer is an automatic variable, it should be pushed on the cleanup stack. CObject* object = CObject:NewL(); CleanupStack:PushL(object); object-LeavingFunctionL(); CleanupStack:PopAndDestroy(object);,可编辑ppt,42,Efficient exception handling rules: Continued,Rule 3: All

14、 the codes that might fail, should be taken out of the constructor, and put into a constructL() function. This will be called after the constructor has completed. This is two-phase construction. / Phase #1 MyObject:MyObject() / Phase #2 void MyObject:ConstructL() MyMemberData* data = new (ELeave) My

15、MemberData(); / Put both phases together in one function. MyObject* MyObject:NewL() MyObject * self = new (ELeave) MyObject(); CleanupStack:PushL(self); self-ConstructL(); CleanupStack:Pop(self); return self; ,可编辑ppt,43,图形系统,人机交互的发展:CUI - GUI - NUI(?) 包含的内容:图形,窗口,事件 嵌入式图形系统必须有以下几个特点: 占用资源少 高性能 高可靠性

16、可配置,可编辑ppt,44,Windows CE的图形系统,桌面Windows USER32.dll,GDI32.dll的一个子集 使用Win32 API编程,可编辑ppt,45,/ 得到窗口DC HDC dc = GetDC(hWnd); / 创建红色,虚线画笔 HPEN hpen = CreatePen(PS_DASH, 1, RGB(255, 0, 0); / 设置DC的画笔为新创建的画笔,同时保留旧的画笔句柄 HPEN hOld = (HPEN)SelectObject(dc, hpen); / 在窗口的DC上画线 LineTo(dc, 100, 100); / 把DC的画笔属性重新设

17、置为旧的画笔 SelectObject(dc, hOld); / 删除画笔 DeleteObject(hpen); / 释放窗口DC ReleaseDC(hWnd, dc);,可编辑ppt,46,/ 得到窗口DC HDC dc = GetDC(hWnd); / 创建红色,虚线画笔 HPEN hpen = CreatePen(PS_DASH, 1, RGB(255, 0, 0); / 在窗口的DC上画线 LineTo(dc, 100, 100);,HDC GetDC( HWND hWnd) CWindow* This = (CWindow*)hWnd; This-GetDC(); CWindow

18、:GetDC() return this-m_hDC; ,可编辑ppt,47,/ 得到窗口DC HDC dc = GetDC(hWnd); / 创建红色,虚线画笔 HPEN hpen = CreatePen(PS_DASH, 1, RGB(255, 0, 0); / 在窗口的DC上画线 LineTo(dc, 100, 100);,HPEN CreatePen() CPen * pRet = new CPen(); if (pRet) return (HPEN)pRet; ,可编辑ppt,48,/ 得到窗口DC HDC dc = GetDC(hWnd); / 创建红色,虚线画笔 HPEN hpe

19、n = CreatePen(PS_DASH, 1, RGB(255, 0, 0); / 在窗口的DC上画线 LineTo(dc, 100, 100);,LineTo(HDC, int, int) DC * pDC = (DC *)HDC; pDC-LineTo(); DC:LineTo() / perform drawing task ,可编辑ppt,49,GDI Object Model,可编辑ppt,50,Open source project supported by convergence Germany Licensed under GNU GPL Provides graphic

20、API set and integrated window system Works on a frame buffer device and provides the mechanism to use the hardware acceleration effectively. /,可编辑ppt,51,Architecture,DirectFB consists of the followings: Core API Module Generic GFX Driver GFX Drivers for Specific Hardware To bri

21、ng out the best performance on a specific graphics hardware GFX Drivers for the hardware should be written. Generic GFX Driver checks whether the hardware acceleration by a GFX driver is available If yes, it handovers to the GFX driver If not it uses software rendering engine,可编辑ppt,52,IDirectFB *df

22、b = NULL; IDirectFBSurface *primary = NULL; int screen_width = 0, screen_height = 0; int main (int argc, char *argv) / A surface description is needed to create a surface. DFBSurfaceDescription dsc; / Initialize DirectFB passing argc and argv DirectFBInit (,可编辑ppt,53,/ go fullscreen dfb-SetCooperativeLevel (dfb, DFSCL_FULLSCREEN); / create primary surface dsc.flags = DSDESC_CAPS; dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING; dfb-CreateSurface( dfb, ,可编辑ppt,54,DirectFB Interface,#define DECLARE_INTERFACE( IFACE ) typedef struct _#IFACE IFACE; #define DEFINE_INTERFACE( IFA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论