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

相关推荐
天朝八阿哥4 小时前
Bye~~ win10!
linux·windows
景彡先生4 小时前
Python列表(List)完全指南:从入门到实战优化
windows·python·list
小莞尔4 小时前
【51单片机】【protues仿真】基于51单片机火灾报警控制系统
c语言·单片机·嵌入式硬件·物联网·51单片机
可爱的鸡仔5 小时前
STM32--------DMA
stm32·单片机·嵌入式硬件
小草儿7996 小时前
gbase8s之.net8连接8s之mysql模式(windows)demo
windows·mysql·.net
D.....l6 小时前
STM32学习(MCU控制)(GPIO)
stm32·嵌入式硬件·学习
lzhdim6 小时前
雷蛇(Razer)炼狱蝰蛇V2X极速版无线鼠标开箱
单片机·嵌入式硬件·计算机外设
wuk9986 小时前
基于位置式PID算法调节PWM占空比实现电机转速控制
单片机·嵌入式硬件·算法
三佛科技-134163842126 小时前
暴力风扇方案MCU控制芯片开发
单片机·嵌入式硬件·智能家居·pcb工艺