ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:14.47KB ,
资源ID:3653292      下载积分:7 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3653292.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(使用C++构建嵌入式开发框架.docx)为本站上传会员【丰****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

使用C++构建嵌入式开发框架.docx

1、使用C+构建嵌入式开发框架摘要:框架作为一种大粒度的重用技术在桌面软件开发中得到了广泛应用,而在嵌入式开发领域,目前还没有一套完整的标准框架可供使用。本文以通信领域的嵌入式软件开发为例,介绍使用C+语言,在ARM平台Nucleus plus操作系统下实现嵌入式开发框架EFC的方法和应用实例。关键词:框架 C+ ARM Nucleus MFC EFC 面向对象1 框架概述 什么是框架 国外着名的软件设计大师Ralph Johnson对面向对象技术进行了长期而深入的研究。在他的主页中,对框架进行了如下定义:A framework is a reusable design expressed as

2、a set of abstract classes and the way their instancesis a reusable design for all or part of a software system.框架把一个系统有机地分解成一组相对独立的构件,并定义了各个构件间的接口和作用关系,符合软件工程中设计的模块化、独立化和信息隐藏等特征。框架提供了一个大粒度的重用技术,即不仅支持源代码级的重用,而且支持分析和设计以及体系结构的重用,因而被认为是一种最有前途的面向对象技术。框架必须是健壮的、可扩展的、灵活的,它要求基于开放或共享标准。框架的设计要力求做到完备性、灵活性、可扩展性、

3、可理解性,同时抽象能用于不同的场合;用户能轻松地添加和修改功能,定制框架;用户和框架的交互清晰,文档齐全。框架设计的一个核心问题就是发现可重用的设计和“热点”,以保证框架具备充分的灵活性,使用户能在已有构件的基础上生成应用程序,实现“零代码编写”的理想目标。如何设计框架目前框架的设计大都采用实践法。实践法是指从若干个具体的典型应用中,抽象出现似点来构建框架;框架反过来又应用于不同的问题,并在解决不同问题的过程中得到更新;在框架的设计和实现的两步中,不断反复,等到框架逐渐成熟时,需要修改和反复的内容就会越来越小。具体步骤为:分析问题域,确定所需框架,从一类应用而不是单个的程序去分析、比较各种不同

4、的软件解决方案,寻求这些方案的共性和每个程度的唯一性特性。这些共性,尤其是那些经常被多个程序使用的部分将成为框架的基础。然后,定义框架体系结构并设计,包括设计用户与框架间的交互、给用户提供的最终工具等。框架的实现:包括框架核心类的实现、框架的测试、框架的试运行、框架的反复更新。框架的部署:包括文档的提供和分发过程、为用户提供技术支持、维护和更新框架。2 嵌入式框架EFC框架技术在桌面软件的开发中得到了广泛的应用,但在嵌入式开发领域,由于嵌入式开发的多样性及嵌入式操作系统的多样性,目前还没有一套完整的开发框架可供使用。因此,在嵌入式软件开发中常常是从底层做起,应用程序和RTOS密不可分。这样的开

5、发方式不但效率不高,也不利于软件的移植。EFC即嵌入式基础类库,是笔者借鉴Microsoft公司的MFC构建的一套在ARM平台Nucleus plus操作系统下的嵌入式开发框架。由于框架全部采用C+开发,没有和处理器相关的汇编代码,所以在其它硬件平台可不加修改地使用。如果更换不同的操作系统,则需要修改操作系统抽象层的部分代码;但由于EFC提供给上层应用程序的接口不变,所以应用程序不需要修改代码。 就软件的层次来说,EFC是一个操作系统之上、应用程序之下的中间件,如图1所示。在EFC中有一个操作系统抽象层,对RTOS进行了抽象和封装,提供包括任务、/O驱动、定时器、信号量、消息队列、事件、邮箱、

6、管道以及高级中断等基本服务的封装。为上层应用程序提供更高级的统一编程接口,它样就使应用软件的开发与具体的软件平台无关,解决了嵌入式应用软件的移植问题。 在图1中,各模块之间有交界表明模块之间有接口关系。EFC、应用程序以及RTOS都和硬件驱动有接口:EFC要使用一部分核心驱动;应用程序中调用的驱动是针对具体设备的;RTOS所需要的驱动就是系统的BSP部分。EFC的静态结构图如图2所示。类图是在UML中用类和它们之间的关系描述系统的一种图示。类用类名、类的属性以及操作来表示,在图中为简单起见,省略了属性和操作;类与类之间的关系使用不同的连线表示,图中带空心三角箭头的连线表示继承关系,两端带数字的

7、连线表示关联关系。在类图中,类的属性/方法的可见性使用“+”、“-”及“#”表示:“+”表示公共的,“-”表示私有的,“#”表示受保护的。从图2中可以看出,CMessage、CRTApp、CDevice、Cboard及Cinterface都派生于公共的类CRTObject。CRTApp对象中有受保护的CMessage、CEventLog、Cuser及CDevice各一个。CDevice对象中有一个或多个CBoard对象,相应的每个CBorad对象中有0个到多个CxxxInterace对象。 基本数据类型 构建一个框架,需要一些基本的元素,这些元素要在框架的构造以及应用程序开发中大量使用。这些基

8、本数据类型包括字符串类CString、集合类CArray、Clist及Cmap。CString包括一个长度可变的字符序列,提供使用非常直观方便的运算符和一些Todouble()、Tolong()、Tohex()等);CArray是具有内建索元素很快的检索速度;Clist为其所存储的每一个元素,都提供了两个指针,分别指向位于其前和其后的元素,形成一个双向链表,这使得插入和删除操作十分快捷;CMap为其存储的每个数据都附带一个关键字,并以关键字所组成的一个hash表作为索引,从而使得元素搜索、增加和删除操作都具有很高的效率。 RTOS的抽象和封装 CRTObject是一个EFC中最基础的类,它不但

9、是EFC中CRTApp、CDevice等类的基类,而且可以作为所有使用EFC的嵌入式开发人员定义新的类的超类。CRTObject类在EFC中主要承担RTOS抽象和封装任务。它提供了下面一些最基本的功能*CRTObject对RTOS的常用对象进行了封装,提供包括Task、Driver、Timer、Event Group、Semaphore、Queue、Pipe、Mailbox等的创建、删除、查找等功能的成员函数。这些函数提供了一个简单有效的方法来使用RTOS的对象。使用这些函数能够保证对象创建与销毁的安全性,而不会造成内存泄漏。*CRTObject提供了对RTTI的支持,在新的C+标准中,RTT

10、I已经是C+的一个功能,但并不是所有的编译器都提供支持这些新特性,就不支持。所以在这里参考MFC,通过宏的方式为每个类定义一个CRuntimeClass类型的静态常量和相关的成员函数。CRuntimeClass结构保证了类型的静态常量和相关的成员函数。CRuntimeClass结构保存了类的名称、大小等信息,这样我们就能在程序运行时确定对象的具体类型。*CRTObject还提供了把类的成员函数作为任务及定时器的回调函数的功能。在Nucleus中,任务和定时器的回调函数只能是全局函数或者类的静态成员函数,这在面向对象的开发中很不方便。这里通过把成员函数指针和对象的this指针作为参数传递给RTO

11、S,在RTOS调用公共回调函数时再取出来。通过函数指针的方式去调用类的成员函数,这样把有派生于CRTObject的类就可方便地使用成员函数作为任务、定时器等对象的回调函数。 应用程序类CRTApp CRTApp类用来定义整个应用程序对象,提供系统初始化、管理其它对象以及运行应用程序的功能。任何使用EFC框架的应用程序有且只能有一个派生于此类的对象。CRTApp对象中包含了动态创建的CMessage、CEventLog、CDevice及Cuser对象。通过在Nucleus的入口函数Application_Initialize中创建系统初始化任务,来把系统控制权交给CRTApp对象,在其中完成其它

12、对象的创建、系统的配置以及初始化任务。 文件系统 在嵌入式设备中通常使用Flash存储器来保存程序代码和数据,每片Flash一般由一定数量大小不等的扇区组成。它在读取方面与普通RAM存储器类似,可以实现随机的读取,但在写入操作上却有很大的不同。Flash中只有空白的单元才可以进行写入操作,要向非空的单元写入数据,需要先擦除整个扇区。所以程序中如果直接对Flash进行操作会很不方便。最好的办法就是在其上构造一个文件系统,文件系统提供简便、可靠的接口供上层使用,而把复杂的操作屏蔽在文件系统内部。这里文件系统包括内存文件系统和Flash文件系统。CFile是一个抽象类,只是定义文件系统的接口函数,具

13、体的实现在CMemFile及CFlashFile类中完成。 设备管理 在EFC中,设备管理由CDevice、CBoard、CInterface及其派生类完成。CDevice类代表整个设备,1个设备中包含1到多个CBoard对象,而每个CBoard对象中又包含0个到多个接口对象。这样以来,嵌入式设备都可由这几个类组合而成,大大简化了软件的设计。 命令处理 CMessage类是系统的命令处理模块,它直接派生于CRTObject类。它的功能主要是接收网管软件通过串口或网口发送未来的各种命令,完成对设备的配置管理、性能管理、告警管理、安全管理和维护管理等管理功能。CMessage类主要有表1所列的任务

14、。表1 CMessage类中的任务任务名称任务处理函数说 明TCP服务器监听任务TCPServerTask用于监听客户端的连接请求TCP响应任务TCPEchoTask对每客户端的连接都创建一响应任务串口任务UartTask通过串口对系统进行管理TFTP备分份任务TFTPClientPutTask备份应用程序和系统配置文件TFTP升级任务TFTPClientGetTask用于升级应用程序及修改用户配置文件 其它模块 CFlash类封装对Flash芯片的操作,主要包括读、写、擦除等操作。从图2可以看出,CEventLog和CFlashFile类中都包含CFlash对象;CEventLog类记录系统

15、中的发生的事件以及系统运行过程中产生的告警信息。为了实现掉电保存功能,这些事件都保存在Flash芯片中;Cuser类用来对系统的用户进行管理,防止对系统非授权的访问。3 使用EFC的设计方案举例这里以在通信和工业自动化领域使用较多的串口服务器为例,来说明使用FEC嵌入式开发框架的设计方案。串口服务器是一种可把多路异步RS232/RS485串行数据与通过以太网口传送的TCP/IP数据包进行相互转换,使传统的异步串行数据信息能通过Internet或Intranet传送或共享的设备。设每个串口对应TCP/IP的一个端口,则可画出图3所示的静态结构图。从图3可以看出,共对五个类进行了派生。CSerSv

16、rMessage类派生于CMessage类,用于通过网管对串口服务器进行管理;CserSvrDevice类派生于CDevice类,代表串口服务器设备;CserSvrDevice类对象中有一个或多个派生于CBoard类的CserSvrBoard类对象,而每个CserSvrBoard类对象拥有一个或多个派生于CasyInterface类的CSerSvrInterface类对象;ScerSvrApp类派生于CRTApp类,代表整个应用程序,并重载了虚函数OnCreateMessage()及OnCreateDevice,用来在其中创建系统的CSerSvrMessage和CserSvrDevice类的实

17、例来代替系统默认的CMessage和CDevice实例。 串口类CSerSvrInterface的设计是整个设计的关键,在每个串口类中都有一个TCP监听任务TCPServerTask用来作为服务器去监听客户端的连接;一个TCP客户端任务TCPClientTask用来连接其它服务器。无论是通过TCPServerTask还是TCPClientTask建立连接后,就挂起这两个任务而启动另外两个任务TCPSendTask和TCPRecvTask,它们分别用来通过网口发送数据和接收数据。TCPSendTask每隔10ms/1000*10=字节,所以串口的FIFO应大于116字节)把从串口读到的数据打包从网口发送出去;而TCPTecvTask使用阻塞方式读取网口数据。在读到数据后,根据串口发送缓冲区的情况慢慢通过串口往外发送,没发送完之前就不进行下一次从网口的数据读取。这样把串口类设计成一个完备的处理类,设备中每块板有多少串口就在CSerSvrBoard类的实例中有多少CSerSvrInterface类的实例。硬件模块化的结构简单地对应软件模块化的结构。 结语本文讲述了在嵌入式软件开发中使用C+构建系统开发框架的方法,并给出了框架的模型和应用实例。可以看出,使用面向对象的框架技术对于提高开发效率、降低开发难度、规范开发模式、便于软件的移植和维护方面,具有传统面向过程的开发方法不可比拟的优势。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服