C++在嵌入式软件中的应用

点赞:3368 浏览:9905 近期更新时间:2024-03-05 作者:网友分享原创网站原创

如果系统中拥有嵌入式操作系统,那么软件开发的模式则大为改观.嵌入式操作系统放在中间,把软件开发一分为二.在嵌入式操作系统之上的是上层应用开发,在嵌入式操作系统之下的可以看做是底层驱动开发.应用开发主要关注实现应用本身的业务逻辑.驱动开发主要负责编写与硬件相关的代码.在这种情况下,无论是应用开发还是驱动开发都与日前通用操作系统下的相应开发类似,难度相对也比较低.

1VxWorks嵌入式平台的体系结构

VxWorks是公认的实时性最强的操作系统,它具有高度的可靠性、优秀的实时性和灵活,的可裁剪性,其主要组成有5个部分:高性能的实时操作系统核心wind、板级支持包BSP、网络设施、I/O系统和文件系统.VxWorks主要通过板级支持包BSP与硬件设备打交道.引导部分在目标系统启动时初始化硬件,为操作系统运行提供硬件环境.设备驱动程序部分主要是驱动特定目标环境中的各种设备,对其进行初始化和控制.通用常规驱动可以在不同的目标环境之间移植;专用BSP驱动程序与具体的硬件体系相关联.特殊设备主要指一些非基于I/O系统的设备,如串行设备、网络设备、PCI设备、PCMCIA设备、定时器、硬盘和Flash存储设备等.常见的VxWorks设备有终端及伪终端设备、管道设备、伪存储器设备、NFS设备、非NFS设备、虚拟磁盘设备和SCSI接口设备等.

1.1Vxworks的I/O系统

Vxworks系统的I/O系统包括了基本I/O与有缓存的I/O,能够以函数库的方式对标准的字符型设备和块型设备进行支持.字符型/块型设备的驱动程序由初始化功能、函数功能与中断怎么写作程序三个部分组成.初始化能够完成硬件初始化,进行设备需要资源的分配,进行系统的相关设置.函数功能是用来实现系统核心功能,在字符型设备的操作中函数包括了7个标准函数;而在块型设备操作中函数是SEQ_DEV或BLK_DEV结构中指定的功能函数.中断怎么写作程序(InterruptServeRoute,ISR)能够完成与硬件之间的交互操作.Vxworks系统提供了intConn

Ect()函数实现中断处理程序与中断之间的联系.

1.2VxWorks的BSP及其开发设计

板级支持包BSP包含了与硬件相关的功能函数,提供VxWorks与硬件之间的接口,能够进行硬件初始化,包括系统给电过程总入口代码的提供、存储器初始化、终止中断、向RAM区进行加载等,支持硬件驱动与Vxworks之间通信.BSP主要由C源文件和汇编文件组成,包括头文件、源文件、导出文件、make文件与二进制的驱动模块.经过链接与编译操作后,并在depend、bspname、makefile等文件的操作下,BSP源程序最后将生成映像.

1.3Tornado开发工具及其IDE简介

Tornado1I集成交叉开发环境是VxWorks实时嵌入式系统开发的完整理想的软件操作平台,能够完成软件工程项目创建、面向BSP移植的管理,还能够完成软件系统的设计与调试,还能够进行系统性能分析,为嵌入式软件系统开发提供了超越目标机器资源限制的调试与开发环境.TornadoⅡIDE包含了三个高度集成的部分:运行在宿主机和目标机上强有力的交叉开发工具和实用程序,运行在目标机上的VxWorks,连接宿主机和目标机的多种通信方式,如以太网和串口线等.TornadoⅡ含有的独立核心软件工具有图形化的交叉调试器(CrossWindDe-bugger/WDB)、工程配置工具(ProjectFacility/configuration)、集成仿真器VxSim(IntegratedSimulator)、动态诊断分析工具WindView、c/C++编译环境、主机目标机连接配置器(Launcher)、目标机系统状态浏览器(Browser)、命令行执行工具(WindSh)、多语言浏览器(WindNigator)、图形化核心配置工具(WindConfig)和增量加载器(IncrementalLoader)等.

C++在嵌入式软件中的应用参考属性评定
有关论文范文主题研究: 操作系统类论文范文 大学生适用: 硕士论文、学位论文
相关参考文献下载数量: 23 写作解决问题: 怎么写
毕业论文开题报告: 论文模板、论文前言 职称论文适用: 杂志投稿、职称评副高
所属大学生专业类别: 怎么写 论文题目推荐度: 优秀选题

2VxWorks平台中C++语言的应用

若要从用户的C语言代码中引入一个C++语言符号(非过载的全局符号),应该使用extem“C”把该符号和C语言代码原型链接起来.VxWorks操作系统中C语言符号可自动实现C++访问,这是因为VxWorks操作系统的头文件中使用了这种声明机制.

2.1支持组间安装

VxWorks操作系统默认情况下内核仅支持最低限度的C++组件.为增强C++功能,可通过增加组件完成对C++的支持.在将C++模块下载到VxWorks目标机之前.必须在主机上进行一些附加的处理,该处理通常称为细化,细化执行的任务如下:①初始化静态对象;②确保C付程序按正确顺序运行,对所有静态对象调用合适的构造体和析构体;③(仅对于GNU/ELF/DWARF)把由-fmerge-templates生成的任何linkonce部分分解为程序段和数据段.注意,细化在程序编译之后、下载之前执行.


2.2交互式调用静态构造体和析构体

VxWorks操作系统提供了两个调用静态构造体和析构体的策略分别为:

①自动策略:自动策略为默认策略.静态构造体在模块下载到目标对象之后,以及模块登录程序返回给调用程序之前执行;而静态析构体仅在模块卸载前执行.

②手动策略:在下载模块之后、运行应用程序之前,用户需要手动调用静态构造体;在任务完成运行之后,卸载模块之前,则需手动调用静态析构体.可以使用cplusCtors()调用静态构造体,cplusDtors()调用静态析构体.由于这些函数以模块为参数,所以静态构造体和析构体是模块和模块间的调用;此外可以对所有当前登录的静态构造体或析构体进行无参数调用.

在调用构造体和析构体时,可以使用cplusXtorSet()来改变调用策略,使用cplusStratShow()汇报当前策略信息.

3结束语

对于C++语言而言,很多时候它的一些语言本身的功能在实际嵌入式开发中并不使用.因为有些C++语言提供的功能在内存、速度和复杂性上会造成较大的开销.例如对于模板,虽然对于泛型编程很重要.如果编译器实现得不是很好,很容易增加最终代码的体积,对于对资源斤斤计较的嵌入式开发人员来说,这无疑是不希望看到的.还有异常处理,在一些嵌人式操作系统下,C++的异常处理会导致处理器执行状态的切换.这会导致系统效率极大地降低.这对于一些对实时性要求比较高的系统也是不恰当的.