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

相关推荐
承渊政道1 小时前
Fooocus本地AI绘图教程:Windows部署、低门槛生图与远程访问
人工智能·windows·cpolar·fooocus·生图
陈工大模型3 小时前
收到乱码压缩包之后,我重新测了 7-Zip、Bandizip 和win解压缩
windows·电脑·软件工程·软件需求·7-zip
谙弆悕博士4 小时前
在文件夹右键直接打开 Kali WSL:一条 `wsl --cd` 注册表脚本
windows·脚本·wsl·右击·ksli
陈工大模型5 小时前
解压工具的三个技术分水岭:编码、分卷、容器格式
人工智能·windows·安全·解压工具·免费国内办公软件
杯子不吃紫菜7 小时前
LangGraph 体系实战(下):中断恢复、流式、子图与设计模式
单片机·嵌入式硬件·设计模式
qq_448011167 小时前
中断服务函数简介
嵌入式硬件
Risehuxyc7 小时前
STM32程序逻辑---入口函数逻辑和NVIC嵌套向量中断控制器初始化
stm32·单片机·嵌入式硬件
【 STM32开发 】8 小时前
CubeMX+STM32】SD卡U盘实现__USB+FATFS (F103 篇)
stm32·单片机·嵌入式硬件
无敌最俊朗-1 天前
【电感专题2:电感的感抗、电路的阻抗、电流的滞后】
单片机·嵌入式硬件·元器件·电感
wuyk5551 天前
嵌入式故障诊断-Bug002-局部大数组压栈高温必死机
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·嵌入式实时数据库