VxWorks架构

在VxWorks 7上编译和运行Boost C++ 应用程序

1 简介

Boost项目提供了一组全面的,经过同行评审的,可移植的C++源代码库,这些库可与C++标准库一起很好地工作。

VxWorks是由Wind River构建的实时操作系统。

VxWorks支持Boost C++库的子集。支持的库是:

  • Atomic
  • Chrono
  • Container
  • Context
  • Contract
  • Date Time
  • Exception
  • Filesystem
  • Graph
  • Log
  • Math
  • Program Options
  • Random
  • Regex
  • Serialization
  • Timer
  • Type Erasure
  • BOOST Tests

在先前的文章(给VxWorks 7添加Boost C++库支持)中,我们解释了如何编译并启用boost的VxWorks内核,本文将描述如何从boost.org网站移植一些boost示例代码,并在VxWorks 7目标系统上运行它。

2 前提

本文的说明假定你正在使用:

3 相关文件

有关本主题的更多信息,请参考:

风河文档:

  • VxWorks对第三方软件的支持

非风河文档:

  • https://www.boost.org/

4 在WindRiver Workbench中创建一个实时进程(RTP)项目

4.1 基于VxWorks源代码编译(VSB)创建一个boostvsb的RTP

你必须基于先前文章中启用了Boost的VxWorks项目创建RTP项目。在workbench中,执行一下操作:

File > New > Wind River Workbench Project

选择一个 Real Time Process Project

选择RTP编译类型
图1:选择RTP编译类型

将项目命名为“boostapp”,你需要基于在上一篇文章中创建的VSB来创建工程,VSB之前被称为“boostvsb”,选择Browse,找到文件boostvsb/vsb.vxconfig,这样RTP项目就基于“boostvsb”了。

4.2 将RTP.C重命名为RTP.CPP

RTP项目源文件必须重命名为“rtp.cpp”,因为这个boost源文件是C++而不是C的源代码,因此必须正确编译。

在Workbench Project Explorer view中右键单击“rtp.c”,选择“Rename”,然后将文件名设置为“rtp.cpp”。

重命名源码文件
图2:重命名源码文件

5 找到BOOST库示例代码

5.1 访问boot.org网站

在网络浏览器中,访问到https://www.boost.org。“boostvsb”项目是包含了boost数学库后建立的,因此我们将选择boost.org上一些使用了数学库的示例代码。

5.2 找到几何示例代码

选择boost的“几何库”示例,访问至https://www.boost.org/doc/libs/1_54_0/libs/geometry/doc/html/index.html,在“Spatial Indexes”下,单击“Examples”。

找到几何示例代码
图3:找到几何示例代码

选择示例“Index of polygons stored in vector.”

选择存储在向量中的多边形的索引
图4:选择存储在向量中的多边形的索引

这提供了示例源代码,该应用程序使用boost数学库来创建多边形数学对象的树,然后询问并输出其值。highlight此源代码并复制它。

6 将Boost应用程序打包成一个RTP项目

6.1 将源代码复制到rtp.cpp文件

请确保负责所有的boost网站示例源代码行并替换“rtp.cpp”文件里的内容。

将源代码复制到RTP项目中
图5:将源代码复制到RTP项目中

6.2将boost_system库添加到RTP构建属性

右键单击boostapp RTP,然后选择“属性Properties”,选择“Build Properties”,“Libraries”,单击”Add to all”, 选择”Add library file (-I)” 然后输入: “-I boost_system”

将Core Boost库添加到RTP项目
图6:将Core Boost库添加到RTP项目

点击”Apply and Close”,然后点击 “Yes” 来重新索引项目。现在可以重新编译这个项目,编译应该可以成功完成。如果你遇到任何编译错误提示boost库缺失的话,你必须从库的对话框的编译属性(Build Properties)里手动添加这些库。

注意:如果你在你的RTP代码里面使用了boost现成库,你必须增加(-I boost_thread)作为一个额外的RTP库。

7 运行这个BOOST应用程序RTP

7.1 从Workbench启动VxWorks Simulator目标机

在Workbench的target connection窗口中,为你在上一遍文章中创建的“boostvip” VIP项目来创建一个VxWorks模拟器连接。

创建VxWorks Simulator目标连接
图7:创建VxWorks Simulator目标连接

启动目标机

7.2 调整内核调度程序以启用时间分片

在VxWorks目标内核shell中,输入以下内容:


-> kernelTimeSlice(1)

Boost应用程序可以在此VxWorks内核配置上更成功地运行。

7.3 在目标上运行bootapp RTP

右键单击Workbench中的“boostapp”项目,然后选择“Run/Debug Real Time Process”,观察boost多边形应用程序在目标上运行,并从VxWorks仿真目标机的控制台生成输出。

运行Boost Polygon应用程序
图8:运行Boost Polygon应用程序