付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用C+勾建嵌入式开发框架摘要: 框架作为一种大粒度的重用技术在桌面软件开发中得到了广泛 应用,而在嵌入式开发领域,目前还没有一套完整的标准框架可供使用。本文 以通信领域的嵌入式软件开发为例,介绍使用 C+语言,在ARM平台Nucleus plus操作系统下实现嵌入式开发框架 EFC的方法和应用实例。关键词: 框架 C+ ARM Nucleus MFC EFC 面向对象1 框架概述1.1 什么是框架国外著名的软件设计大师 Ralph Johnson 对面向对象技术进行了长期而深 入的研究。在他的主页中,对框架进行了如下定义: A framework is a reusable design e
2、xpressed as a set of abstract classes and the way their instances collaborate.It is a reusable design for all or part of a software system. (框架是整个系统或系统的一部分的可重用性设计,由 一组抽象出来的类及其实例间的相互作用方式组成。)框架把一个系统有机地分解成一组相对独立的构件,并定义了各个构件间的接口和作用关系,符合软件工程中设计的模块化、独立化和信息隐藏等特 征。框架提供了一个大粒度的重用技术,即不仅支持源代码级的重用,而且支 持分析和设计以及体系
3、结构的重用,因而被认为是一种最有前途的面向对象技 术。框架必须是健壮的、可扩展的、灵活的,它要求基于开放或共享标准。框 架的设计要力求做到完备性、灵活性、可扩展性、可理解性,同时抽象能用于 不同的场合;用户能轻松地添加和修改功能,定制框架;用户和框架的交互清 晰,文档齐全。框架设计的一个核心问题就是发现可重用的设计和“热点”, 以保证框架具备充分的灵活性,使用户能在已有构件的基础上生成应用程序, 实现“零代码编写”的理想目标。1.2 如何设计框架目前框架的设计大都采用实践法。实践法是指从若干个具体的典型应用 中,抽象出现似点来构建框架;框架反过来又应用于不同的问题,并在解决不 同问题的过程中得
4、到更新;在框架的设计和实现的两步中,不断反复,等到框 架逐渐成熟时,需要修改和反复的内容就会越来越小。具体步骤为:分析问题 域,确定所需框架,从一类应用而不是单个的程序去分析、比较各种不同的软 件解决方案,寻求这些方案的共性和每个程度的唯一性特性。这些共性,尤其 是那些经常被多个程序使用的部分将成为框架的基础。然后,定义框架体系结 构并设计,包括设计用户与框架间的交互、给用户提供的最终工具等。框架的实现:包括框架核心类的实现、框架的测试、框架的试运行、框架 的反复更新。框架的部署:包括文档的提供和分发过程、为用户提供技术支持、维护和 更新框架。2 嵌入式框架 EFC框架技术在桌面软件的开发中得
5、到了广泛的应用,但在嵌入式开发领域, 由于嵌入式开发的多样性及嵌入式操作系统的多样性,目前还没有一套完整的 开发框架可供使用。因此,在嵌入式软件开发中常常是从底层做起,应用程序 和RTOS密不可分。这样的开发方式不但效率不高,也不利于软件的移植。EFC(Embedded Foundation Classes )即嵌入式基础类库,是笔者借鉴Microsoft公司的MFC(微软基础类库一桌面系统框架库的工业标准)构建的一 套在ARM平台Nucleus plus操作系统下的嵌入式开发框架。由于框架全部采用 C+开发,没有和处理器相关的汇编代码,所以在其它硬件平台可不加修改地使 用。如果更换不同的操作
6、系统,则需要修改操作系统抽象层的部分代码;但由 于EFC提供给上层应用程序的接口不变,所以应用程序不需要修改代码。图 2 EFC 静态结构图就软件的层次来说,EFC是 一个操作系统之上、应用程序之下的中间 件,如图1所示。在EFC中有一个操作系统抽象层,对 RTOS进行了抽象和封 装,提供包括任务( task )、 /O 驱动( driver )、定时器( timer )、信号量(sema phore)、消息队歹( quecue)、事件(eve nt group )、由P箱 (mailBox)、管道(pipe)以及高级中断(HISR)等基本服务的封装。为上层 应用程序提供更高级的统一编程接口,
7、它样就使应用软件的开发与具体的软件 平台无关,解决了嵌入式应用软件的移植问题。在图1中,各模块之间有交界表明模块之间有接口关系。EFC应用程序以及RTOS都和硬件驱动有接口: EFC要使用一部分核心驱动(例如实时时钟的驱 动、ARM串口和网口的驱动、I2C总线的驱动等);应用程序中调用的驱动是针 对具体设备的;RTO新需要的驱动就是系统的BSP部分。EFC的静态结构图(类图)如图2所示。类图是在UML(统一建模语言)中 用类和它们之间的关系描述系统的一种图示。类用类名、类的属性以及操作来 表示,在图中为简单起见,省略了属性和操作;类与类之间的关系使用不同的 连线表示,图中带空心三角箭头的连线表
8、示继承关系,两端带数字的连线表示 关联关系。在类图中,类的属性 /方法的可见性使用“ +”、“ -”及“#”表 示:“+”表示公共的( public ),“- ”表示私有的( private ),“#”表示 受保护的( protected )。从图 2 中可以看出,CMessage CRTApp CDevice、Cboard 及 Cinterface 都派生于公共的类 CRTObject。CRTApp对象中有受保护的CMessageCEventLog、Cuser 及 CDevice 各一个。CDevice 对象中有一个或多个 CBoard对 象,相应的每个 CBorad对象中有0个到多个Cxx
9、xlnterace 对象。2.1 基本数据类型构建一个框架,需要一些基本的元素,这些元素要在框架的构造以及应用 程序开发中大量使用。这些基本数据类型包括字符串类 CString 、集合类 CArray、 Clist 及 Cmap。 CString 包括一个长度可变的字符序列,提供使用非 常直观方便的运算符(例如 +, +=, =, =,!=)和一些 Todouble() 、 Tolong()、Tohex()等);CArray是具有内建索元素很快的检索速度;Clist为其所存储的每一个元素,都提供了两个指针,分别指向位于其前和其后的元 素,形成一个双向链表,这使得插入和删除操作十分快捷;CMap
10、为其存储的每个数据都附带一个关键字,并以关键字所组成的一个hash表作为索引,从而使得元素搜索、增加和删除操作都具有很高的效率。2.2 RTOS 的抽象和封装它提供了下面一些Task、 Driver 、 等的创建、删除、RTOS勺对CRTObject是一个EFC中最基础的类,它不但是 EFC中CRTApp CDevice 等类的基类,而且可以作为所有使用 EFC的嵌入式开发人员定义新的类的超 类。CRTObject类在EFC中主要承担RTOS由象和封装任务。 最基本的功能:*CRTObject对RTOS勺常用对象进行了封装,提供包括 Timer、 Event Group、 Semaphore、
11、 Queue、 Pipe、 Mailbox 查找等功能的成员函数。这些函数提供了一个简单有效的方法来使用 象。使用这些函数能够保证对象创建与销毁的安全性,而不会造成内存泄漏。*CRTObject 提供了对 RTTI(Run-Time Type Information ,运行时类型信 息)的支持,在新的C+标准中,RTTI已经是C+勺一个功能,但并不是所有 的编译器都提供支持这些新特性,ADS1.2就不支持。所以在这里参考 MFC通 过宏的方式为每个类定义一个 CRuntimeClass 类型的静态常量和相关的成员函 数。 CRuntimeClass 结构保证了类型的静态常量和相关的成员函数。
12、CRuntimeClass 结构保存了类的名称、大小等信息,这样我们就能在程序运行 时确定对象的具体类型。*CRTObject 还提供了把类的成员函数作为任务及定时器的回调函数的功 能。在 Nucleus 中,任务和定时器的回调函数只能是全局函数或者类的静态成 员函数,这在面向对象的开发中很不方便。这里通过把成员函数指针和对象的 this指针作为参数传递给 RTOS在RTOS调用公共回调函数时再取出来。通过 函数指针的方式去调用类的成员函数,这样把有派生于CRTObject的类就可方便地使用成员函数作为任务、定时器等对象的回调函数。2.3 应用程序类 CRTAppCRTA PF类用来定义整个应
13、用程序对象,提供系统初始化、管理其它对象以 及运行应用程序的功能。任何使用 EFC框架的应用程序有且只能有一个派生于 此类的对象。CRTApp寸象中包含了动态创建的 CMessage CEventLog、CDevice 及 Cuser 对象。通过在 Nucleus 的入口函数 Application_Initialize 中创建系统初始化任 务(回调函数为CRTAP类的成员函数InitTask ),来把系统控制权交给 CRTA pp寸象,在其中完成其它对象的创建、系统的配置以及初始化任务。2.4 文件系统在嵌入式设备中通常使用 Flash 存储器来保存程序代码和数据,每片Flash 一般由一定
14、数量大小不等的扇区组成。它在读取方面与普通RAM存储器Flash 文件系统。 CFile 是一个抽象类似,可以实现随机的读取,但在写入操作上却有很大的不同。 Flash 中只有 空白的单元才可以进行写入操作,要向非空的单元写入数据,需要先擦除整个 扇区。所以程序中如果直接对 Flash 进行操作会很不方便。最好的办法就是在 其上构造一个文件系统,文件系统提供简便、可靠的接口供上层使用,而把复 杂的操作屏蔽在文件系统内部。这里文件系统包括内存文件系统和 类,只是定义文件系统的接口函数(例如 Open、Read、Write 、Seek、 GetLength、Close 等),具体的实现在 CMem
15、File (内存文件)及 CFlashFile (Flash 文件)类中完成。2.5 设备管理在EFC中,设备管理由CDevice、CBoard CInterface 及其派生类完成。CDevice类代表整个设备,1个设备中包含1到多个CBoard对象,而每个 CBoard对象中又包含0个到多个接口对象(CInterface 类的派生类对象)。这 样以来,嵌入式设备(仅限通信领域)都可由这几个类组合而成,大大简化了 软件的设计。2.6 命令处理CMessage类是系统的命令处理模块,它直接派生于 CRTObject类。它的功 能主要是接收网管软件通过串口或网口发送未来的各种命令,完成对设备的配
16、 置管理、性能管理、告警管理、安全管理和维护管理等管理功能。CMessage类主要有表 1 所列的任务。表 1 CMessage 类中的任务任务名称任务处理函数说明TCP!服务器监听任务TCPServerTask用于监听客户端的连接请求TCP响应任务TCPEchoTask寸每客户端的连接都创建 一响应任务串口任务UartTask通过串口对系统进行管理 TFTP备分份任务TFTPCIientPutTask备份应用程序和系统配置文件 TFTP升级任务TFTPClientGetTask 用于升级应用程序及修改用户配置文件2.7 其它模块CFlash 类封装对 Flash 芯片的操作,主要包括读、写、
17、擦除等操作。从图 2可以看出,CEventLog和CFIashFile 类中都包含CFlash对象;CEventLog类 记录系统中的发生的事件以及系统运行过程中产生的告警信息。为了实现掉电 保存功能,这些事件都保存在 Flash芯片中;Cuser类用来对系统的用户进行 管理,防止对系统非授权的访问。3使用EFC的设计方案举例这里以在通信和工业自动化领域使用较多的串口服务器为例,来说明使用FEC嵌入式开发框架的设计方案。串口服务器是一种可把多路异步RS232/RS485串行数据与通过以太网口传送的 TCP/IP数据包进行相互转换,使传统的异步串 行数据信息能通过 Internet 或 Intr
18、anet 传送或共享的设备。设每个串口对应TCP/IP的一个端口,则可画出图3所示的静态结构图(图 中 SerSvr 是 Server 的简写)。从图3可以看出,共对五个类进行了派生。CSerSvrMessage类派生于CMessage类,用于通过网管对串口服务器进行管理(这里具体命令略); CserSvrDevice类派生于CDevice类,代表串口服务器设备; CserSvrDevice类 对象中有一个或多个派生于 CBoard类的CserSvrBoard类对象,而每个 CserSvrBoard 类对象拥有一个或多个派生于 CasyInterface 类的CSerSvrInterface 类对象;ScerSvrApp类派生于CRTApf类,代表整个应用程 序,并重载了虚函数 OnCreateMessageO及OnCreateDevice (),用来在其中 创建系统的CSerSvrMessage和CserSvrDevice类的实例来代替系统默认的 CMessage和 CDevice 实例。图 3 串口服务器系统软件静态结构图串口类 CSerSvrI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿科呼吸机使用的护理规范
- 2026上海中医药大学附属曙光医院招录25人(第一批)考试参考试题及答案解析
- 2026年衢州龙游县创新咨询服务有限公司公开招聘合同制员工12人考试参考试题及答案解析
- 2026吉林大学第二医院从事诊室助理岗位人员4人笔试模拟试题及答案解析
- 2026年青海建筑职业技术学院单招综合素质考试题库含答案解析
- 2026三菱日联银行(中国)春季校园招聘考试备考试题及答案解析
- 2026北京中核环保有限公司社会招聘1人考试参考题库及答案解析
- 2026内蒙古自治区民航机场集团有限责任公司招聘97人考试参考试题及答案解析
- 2026浙江武义经开物业发展有限公司招聘2人考试备考题库及答案解析
- 新课标视域下音乐单元整体教学的实践探究
- DZ∕T 0345-2020 煤炭矿区地质勘查成果总结报告编写规范(正式版)
- 踝关节骨折LaugeHansen分型课件
- 国际大奖小说傻狗温迪克
- 15D502 等电位联结安装
- 成人有创机械通气气道内吸引技术操作解读-
- 标志桩安装质量评定表
- 初高中数学衔接讲义
- 安徽杭富固废环保有限公司10万吨工业废物(无机类)资源化利用及无害化处置项目环境影响报告书
- 多学科设计优化综述
- mcn机构的通讯录
- 卫星导航系统课程教学大纲
评论
0/150
提交评论