VxWorks入门小白菜鸟教程3 —— 编译运行VxWorksSDK示例hello_cmake_rtp(Windows篇)

一、创建build文件夹

打开wrsdk-vxworks7-win-qemu\examples\rtp\hello_cmake_rtp文件夹,在空白处右键->在终端中打开。

执行命令:

mkdir build

cd build

将新建build文件。

二、安装cmake

从CMake 官方网站(https://cmake.org/download/)下载适合 Windows 11 的版本。选择带有 .msi 后缀的安装包,这是 Windows 系统的安装程序格式,安装更便捷。

1、双击下载好的 .msi 安装包,点击 "Next"。

2、勾选 "I accept the terms in the License Agreement"(接受许可协议),再点击 "Next"。

3、选择 "Add CMake to the system PATH for all users"(关键:为所有用户添加 CMake 到系统环境变量),这样后续在任意命令行窗口都能直接使用cmake命令,然后点击 "Next"。

4、选择安装路径(可使用默认路径,或自定义到非 C 盘目录),点击 "Next"。

5、点击 "Install" 开始安装。若弹出 "允许此应用对设备进行更改吗?" 的提示,点击 "是"。

6、安装完成后,点击 "Finish"。

7、打开终端,执行命令:cmake --version,确认正常输出版本信息

三、用cmake编译该示例工程

在步骤一的终端中(关键),执行命令:(注意:其中wrsdk-vxworks7-win-qemu-1.10的路径根据实际情况修改)

cmake .. -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="D:\!VxWorks\wrsdk-vxworks7-win-qemu-1.10\wrsdk-vxworks7-win-qemu\vxsdk\sysroot\mk\rtp.toolchain.cmake"

如果提示的信息类似下图,代表编译成功:

在build文件夹中确认是否已生成Makefile文件

接着执行命令:make

如果提示的信息类似下图,代表编译成功:

build文件夹中已生成3个关键文件:

libhellostatic.a:编译生成的静态库(供其他项目引用)。

hello_cmake:主程序可执行文件(VxWorks 下通常后缀为 .vxe 或无后缀,具体以实际文件为准)。

failtest:测试用可执行文件(用于验证测试用例)。

四、在VxWorks中运行hello_cmake

启动VxWorks,并在Windows中启动ftp服务器,使VxWorks可以访问test1文件夹。(具体操作见《VxWorks小白入门1 ------ 开发环境安装与验证(Windows篇)》)

在VxWorks中运行hello_cmake文件,可以看到结果:

恭喜你在VxWorks世界迈出了第一步!

五、hello_cmake_rtp代码解析

src文件夹中是工程代码,包含以下几个文件:

src/

├── cpp/

│ ├── hello.cpp

│ ├── hello.hpp

│ ├── list.cpp

│ └── list.h

├── static/

│ ├── hello.c

│ └── hello.h

├── asm/

│ └── addone.s

├── helloworld.c

└── failtest.c

1. src/cpp/hello.cpp

C++实现文件,主要包含:

  • `IntListItem`类的构造函数(打印构造信息)和`displayValue`方法(打印元素值);

  • `hello_cpp`函数的实现:创建`SortedList`对象,添加`IntListItem`元素,显示列表第一个元素的值;

  • 通过条件编译(`_WRS_KERNEL`)处理不同环境下的输出方式(`std::cout`或`printf`)。

2. src/cpp/hello.hpp

C++头文件,用于声明`hello_cpp`函数,并通过`extern "C"`包裹,确保C语言代码可以正确调用该C++函数。

3. src/cpp/list.cpp

链表相关类的实现文件,实现了:

  • `ListItem`类的`addBefore`(在当前元素前插入)和`addAfter`(在当前元素后插入)方法;

  • `List`类的`add`(添加元素到链表末尾)、`remove`(移除指定元素)、`getFirst`(获取首元素)方法;

  • `SortedList`类的`add`方法(按排序规则插入元素,基于`compare`方法)。

4. src/cpp/list.h

链表相关类的声明头文件,定义了:

  • 基类`ListItem`(包含链表节点指针,纯虚函数`compare`和`displayValue`,需派生类实现);

  • 链表管理类`List`(维护表头、表尾和元素计数,提供添加、移除元素的接口);

  • 派生类`IntListItem`(存储int类型数据,实现`compare`和`displayValue`)和`FloatListItem`(存储float类型数据,实现`compare`);

  • 排序链表类`SortedList`(继承`List`,重写`add`方法实现排序插入)。

5. src/static/hello.c

静态库相关的C实现文件,定义`hello_static`函数,功能为打印`"Hello Static Library"`。

6. src/static/hello.h

静态库相关的C头文件,声明`hello_static`函数,供其他文件调用。

7. src/asm/addone.s

汇编语言实现文件,用于定义addone函数。该函数功能为接收一个整数参数,返回该参数加 1 的结果(即i + 1)。

在src/helloworld.c中,非WIN32环境下通过extern int addone(int);声明该函数,并在main函数中调用(addone(1)),用于演示 C 语言与汇编语言的交互。

8. src/helloworld.c

主程序入口文件,包含`main`函数:

  • 区分内核态(`_WRS_KERNEL`)和用户态,打印不同的`Hello world`信息及命令行参数;

  • 调用`hello_cpp`(C++模块)、`hello_static`(静态库模块)和`addone`(汇编或C实现的加法函数);

  • 展示多语言(C、C++、汇编)模块的协作。

9. src/failtest.c

简单测试程序,`main`函数直接返回退出码1,用于测试程序退出非0状态的场景。

相关推荐
Moshow郑锴6 分钟前
SpringBoot 内置 CollectionUtil:实战用法速览,告别空指针!
windows·spring boot·microsoft
清风6666668 分钟前
基于单片机的大棚温湿度与二氧化碳智能控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
翼龙云_cloud15 分钟前
腾讯云渠道商:如何快速配置腾讯云轻量应用服务器 Windows 实例?
windows·云计算·腾讯云
d111111111d26 分钟前
STM32-HAL库学习,初识HAL库
笔记·stm32·单片机·嵌入式硬件·学习
天空属于哈夫克329 分钟前
基于 Windows 消息队列的静默点击方案
windows·企业微信
不惑_29 分钟前
Windows安装PyCharm
ide·windows·pycharm
一个平凡而乐于分享的小比特33 分钟前
Windows系统原生脚本语言--Batch语言
windows·脚本语言
清风66666634 分钟前
基于单片机的超声波自动泥浆回收系统
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
weixin_4643076337 分钟前
windows禁用更新
windows
小尧嵌入式1 小时前
CANOpen协议
服务器·网络·c++·windows