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状态的场景。

相关推荐
qq_3692243314 天前
Windows全系通用!ntdll.dll文件丢失、报错、闪退问题的完整排查与修复教程
windows·dll·dll修复·dll丢失·dll错误
u1521096484914 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150014 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼14 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi14 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
阿米亚波14 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
caimouse14 天前
Reactos 第 10 章 网络操作 — 10.3.1 NIC驱动
网络·windows
初圣魔门首席弟子14 天前
Node.js 详细介绍(知识库版)
windows·qt·node.js·知识库
科芯创展14 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司14 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设