Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread
C11_C++11
RT-Thread C++11 Support
发布于 2021-09-23 14:13:17 浏览:2793
订阅该版
[tocm] 在最近的更新中,RT-Thread 增加了对 gcc 和 armclang 的 cpp11 支持。目前支持的 cpp11 特性如下所示: - Atomic - Conditional variables - Clocks - Future - Mutexes - Threads - TLS ## 如何使用 在 RT-Thread 中使用 cpp11 需要对工具链进行修改。在使用前,请对工具链进行备份。 1. 下载 [gcc](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) 工具链: ``` gcc version 10.2.1 20201103 (release) (GNU Arm Embedded Toolchain 10-2020-q4-major) ``` 2. 在 rt-thread/bsp/qemu-vexpress-a9 工程下使用 menuconfig 打开 cpp11 支持: ![image.png](https://oss-club.rt-thread.org/uploads/20210923/46284be7b100baa9f226ee8c29e9630c.png.webp) 3. 删除工具链目录中的下面这些文件: ``` rm -f toolchain/arm-none-eabi/include/c++/10.2.1/thread rm -f toolchain/arm-none-eabi/include/c++/10.2.1/mutex rm -f toolchain/arm-none-eabi/include/c++/10.2.1/condition_variable rm -f toolchain/arm-none-eabi/include/c++/10.2.1/future rm -f toolchain/arm-none-eabi/include/pthread.h ``` 4. 清空下面文件中的内容(注意不是删除): ``` toolchain/arm-none-eabi/include/sys/_pthreadtypes.h ``` 5. 设置工具链路径: ``` set RTT_EXEC_PATH=D:\software\tools\gcc-arm-none-eabi-10.3-2021.07-win32\gcc-arm-none-eabi-10.3-2021.07\bin ``` 6. 修改 rtconfig.py 文件,添加 c++ 编译参数: ``` CXXFLAGS = CFLAGS + ' -std=c++11 -fabi-version=0 -MMD -MP -MF' ``` 7. 输入 `scons` 编译工程 ![image.png](https://oss-club.rt-thread.org/uploads/20210923/0ba5856f68601bad9ba0837af9cb1467.png.webp) ## 测试 通过 utest 框架来测试一下 RT-Thread 对 cpp11 的支持情况。这里只测试了 Thread 和 Mutex 两个特性。 ![image.png](https://oss-club.rt-thread.org/uploads/20210923/a620684b7661ac93d59cfdbb96da24c9.png.webp) ### Thread 1. 在 applications 目录下,创建文件 `thread_tc.cpp` 并输入以下内容: ``` #include
#include "utest.h" #include
static void test_thread(void) { int count = 0; auto func = [&]() mutable { for (int i = 0; i < 100; ++i) { ++count; } }; std::thread t1(func); t1.join(); if (count != 100) { uassert_false(1); } std::thread t2(func); t2.join(); if (count != 200) { uassert_false(1); } uassert_true(1); } static rt_err_t utest_tc_init(void) { return RT_EOK; } static rt_err_t utest_tc_cleanup(void) { return RT_EOK; } static void testcase(void) { UTEST_UNIT_RUN(test_thread); } UTEST_TC_EXPORT(testcase, "components.cplusplus.thread_tc", utest_tc_init, utest_tc_cleanup, 10); ``` 2. 输入 scons 编译工程,输入 qemu.bat 启动 qemu: ![image.png](https://oss-club.rt-thread.org/uploads/20210923/f3cfcca06d17c21fd483ffea043e9af6.png) 3. 输入 `utest_run` 运行测试用例: ![image.png](https://oss-club.rt-thread.org/uploads/20210923/e946a61d865b4d18a0042d10751adc14.png) ### Mutex 1. 在 applications 目录下,创建文件 `mutex_tc.cpp` 并输入以下内容: ``` #include
#include "utest.h" #include
#include
static void test_mutex(void) { std::mutex m; int count = 0; auto func = [&]() mutable { std::lock_guard
lock(m); for (int i = 0; i < 1000; ++i) { ++count; } }; std::thread t1(func); std::thread t2(func); t1.join(); t2.join(); if (count != 2000) { uassert_false(1); } uassert_true(1); } static rt_err_t utest_tc_init(void) { return RT_EOK; } static rt_err_t utest_tc_cleanup(void) { return RT_EOK; } static void testcase(void) { UTEST_UNIT_RUN(test_mutex); } UTEST_TC_EXPORT(testcase, "components.cplusplus.mutex_tc", utest_tc_init, utest_tc_cleanup, 10); ``` 2. 输入 scons 编译工程,输入 qemu.bat 启动 qemu: ![image.png](https://oss-club.rt-thread.org/uploads/20210923/ba838e354cc7b5e9acdb91cf4c5412d1.png) 3. 输入 `utest_run` 运行测试用例: ![image.png](https://oss-club.rt-thread.org/uploads/20210923/cf88b0ebdb6e9c8de1d93663683042cd.png)
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Papalymo
请勿打扰
文章
25
回答
85
被采纳
17
关注TA
发私信
相关文章
1
RT-THREAD在STM32H747平台上移植lwip
2
正点原子miniSTM32开发板读写sdcard
3
反馈rtt串口驱动对低功耗串口lpuart1不兼容的问题
4
Keil MDK 移植 RT-Thread Nano
5
RT1061/1052 带 RTT + LWIP和LPSPI,有什么坑要注意吗?
6
RT thread HID 如何收发数据
7
求一份基于RTT系统封装好的STM32F1系列的FLASH操作程序
8
RT-Thread修改项目名称之后不能下载
9
rt-studio编译c++
10
有木有移植rt-thread(nano)到riscv 32位MCU上
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部