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

相关推荐
面对疾风叭!哈撒给28 分钟前
Windows 系统安装 Mysql 8.0+
数据库·windows·mysql
全栈游侠1 小时前
STM32F103XX 01-存储器和总线架构
stm32·嵌入式硬件·架构
恒锐丰小吕1 小时前
屹晶微 EG2124A 中压260V三相半桥驱动芯片技术解析
嵌入式硬件·硬件工程
来自晴朗的明天1 小时前
5、CBMV321 分压式电压跟随器电路
单片机·嵌入式硬件·硬件工程
IDC02_FEIYA2 小时前
Windows资源管理器未响应怎么处理?
运维·服务器·windows
一品人家2 小时前
win32汇编使用GDI+入门教程之六
汇编·windows·win32汇编
果粒蹬i2 小时前
Windows平台ReactNative鸿蒙开发环境搭建指南
windows·react native·harmonyos
羽获飞2 小时前
从零开始学嵌入式之STM32——7.STM32的系统架构
stm32·单片机·嵌入式硬件
范纹杉想快点毕业2 小时前
嵌入式系统架构之道:告别“意大利面条”,拥抱状态机与事件驱动
java·开发语言·c++·嵌入式硬件·算法·架构·mfc
来自晴朗的明天3 小时前
6、AD7683 单通道 AD 采样电路
单片机·嵌入式硬件·硬件工程