0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式 | 如何在搭载了RT-Thread系统的STM32平台上使用C++?

5RJg_mcuworld 来源:YXQ 2019-06-20 14:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文描述了如何使用在搭载了 RT-Thread 系统的 STM32 平台上使用 C++,包括 C++的配置和应用等,并给出了在STM32F411 NUCLEO开发板上验证的代码示例。

硬件平台简介

本文基于意法半导体STM32F411 NUCLEO开发板,给出了 C++的具体应用示例代码,由于RT-Thread上层应用API的通用性,因此这些代码不局限于具体的硬件平台,用户可以轻松将它移植到其它平台上。

STM32F411 NUCLEO是意法半导体推出的一款基于ARM Cortex-M4内核的开发板,最高主频为100Mhz,该开发板具有丰富的板载资源,可以充分发挥STM32F411RE 的芯片性能。

STM32F411RE从属于销量名列前茅的STM32F4系列,众所周知,F4是STM32主打高性能和数字信号处理的“轻奢”系列。

“奢侈”在F4作为内核为Cortex-M4 (DSP+FPU)的MCU,可选180MHz 主频、2M Flash/384KB RAM、Chrom-ART加速器、MPI-DSI接口、延伸到125度的工作温度、DFSDM数字滤波器以及各种常见的音频(SAI)、连接(Ethernet、Camera、USB)、控制(CANUARTI2C)、存储(FMC、2/4/8 bits SPI、SDMMC)外设。

“轻”在价格让人“轻松”、尺寸“轻巧”(不到3mm*3mm的封装)、功耗“轻微”。

如何在STM32上使用C++

准备工作

1、下载RT-Thread 源码

2、下载ENV 工具

3、进入rt-threadspstm32f411-st-nucleo目录,检查 BSPrtconfig.py文件和SConstruct文件是否支持C++配置,如下图所示

检查rtconfig.py文件中对C++的支持

检查SConstruct文件中对C++的支持

打开C++支持:

打开Env工具,在Env命令行中输入menuconfig,进入配置界面,使用menuconfig工具(学习如何使用)配置工程。在menuconfig配置界面依次选择RT-Thread Components ---> C++ features ---> Support C++ features,如图所示:

编译工程:scons --target=mdk51. 生成mdk5工程,将示例代码附带的main.cpp替换掉BSP中的main.c并重新加入到工程中,如图所示:

编译,下载程序,在终端输入help命令可以看到test_cpp已经添加成功了。

运行C++程序:

在终端输入test_cpp运行结果如下图所示。

C++ 全局对象构造函数的调用

RT-Thread中对全局对象构造函数的实现中,以GNUC为例,在rt-threadcomponentscplusplus目录下的crt_init.c文件中对C++进行了系统初始化, 在特定的BSP目录下,连接脚本文件link.lds为C++全局构造函数的代码分配了段,使C++全局对象构造函数链接后能够存放在指定的段中。如下图所示:

crt_init.c文件完成了C++系统的初始化工作

C++系统初始化部分:

 1RT_WEAKintcplusplus_system_init(void) 2{ 3typedefvoid(*pfunc)(); 4externpfunc__ctors_start__[]; 5externpfunc__ctors_end__[]; 6pfunc*p; 7 8for(p=__ctors_start__;p< __ctors_end__; p++) 9        (*p)();1011    return 0;12}13INIT_COMPONENT_EXPORT(cplusplus_system_init);

在cplusplus_system_init函数中,将全局对象的构造函数依次链接到了链接脚本文件中为其分配的段中,并且调用了RT-Thread组件自动初始化的宏INIT_COMPONENT_EXPORT,所以在链接的时候,C++全局对象构造函数所产生的目标文件就被链接到了__ctors_start__和__ctors_end__组成的段中。

链接脚本中为C++全局构造函数分配的段部分:

1PROVIDE(__ctors_start__=.);2KEEP(*(SORT(.init_array.*)))3KEEP(*(.init_array))4PROVIDE(__ctors_end__=.);

__ctors_start__分配了C++全局构造函数段的起始地址,__ctors_end__分配了C++全局构造函数段的结束地址,所以全局构造函数在系统初始化的时候,就会被链接到这里分配的段地址中。

RT-Thread C++ 异常说明

同样,在链接脚本文件link.lds中,也为C++异常分配了段地址:

1__exidx_start=.;2ARM.exidx:3{4*(.ARM.exidx*.gnu.linkonce.armexidx.*)5_sidata=.;6}>CODE7__exidx_end=.;

__exidx_start分配了C++异常的起始地址,__exidx_end分配了C++异常的结束地址,当异常产生的时候,就会被分配到指定的段地址中。

这里以一个C++除零异常的抛出和捕获为例:

 1#include 2 3#defineMIN_VALUE(1e-4) 4#defineIS_DOUBLE_ZERO(d)(abs(d)< MIN_VALUE) 5 6    double div_func(double x, double y)                      7    { 8        if (IS_DOUBLE_ZERO(y)) 9        {10            throw y;                                           /* throw exception */11        }1213        return x / y;                                  14    }1516    void throw_exceptions(void *args)17    {18        try                                            19        {20            div_func(6, 3);21            rt_kprintf("there is no err
");22            div_func(4, 0);                                   /* create exception*/23            rt_kprintf("you can run here?
");24        }25        catch(double)                                         /* catch exception */     26        {27            rt_kprintf("error of dividing zero
");28        }29    }3031    MSH_CMD_EXPORT(throw_exceptions, throw cpp exceptions);

当除零异常发生的时候div_func函数会抛出一个异常,在throw_exceptions函数中会去捕获这个异常。

下载代码,并在终端输入throw_exceptions运行结果如下图所示。

到这一步为止,如何在搭载了RT-Thread系统的STM32平台上如何使用C++的介绍就结束了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2305

    文章

    11123

    浏览量

    371212
  • C++
    C++
    +关注

    关注

    22

    文章

    2122

    浏览量

    76718

原文标题:如何在搭载了RT-Thread系统的STM32平台上使用C++?

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RT-Thread嵌入式系统工程师认证 | 雄鹰计划

    你是否感觉对口就业非常难,苦于没有平台对能力进行匹配?您是否期待在校期间就可以获得offer?您是否渴望在实时操作系统领域大展拳脚?是否期待获得权威认证,为实习就业增添砝码?嵌入式系统
    的头像 发表于 11-08 09:34 417次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>工程师认证 | 雄鹰计划

    【好书推荐】RT-Thread第22本相关书籍!《嵌入式实时操作系统开发实践》| 技术集结

    教学的首选平台。本次推荐的第22本RT-Thread相关书籍——《嵌入式实时操作系统开发实践(基于英飞凌PSoC62和RT-Thread)》
    的头像 发表于 10-16 18:46 380次阅读
    【好书推荐】<b class='flag-5'>RT-Thread</b>第22本相关书籍!《<b class='flag-5'>嵌入式</b>实时操作<b class='flag-5'>系统</b>开发实践》| 技术集结

    RT-Thread 2025嵌入式软件大赛重磅来袭

    为激发开发者潜能、促进技术交流,RT-Thread 正式启动2025年度嵌入式软件大赛! 本赛道为嵌入式软件大赛,聚焦嵌入式软件设计与开发,携手瑞萨、英飞凌、ST、恩智浦、富瀚微、玄
    的头像 发表于 09-22 16:40 3266次阅读
    <b class='flag-5'>RT-Thread</b> 2025<b class='flag-5'>嵌入式</b>软件大赛重磅来袭

    RT-Thread 2025嵌入式软件大赛重磅来袭

    为激发开发者潜能、促进技术交流,RT-Thread正式启动2025年度嵌入式软件大赛!本赛道为嵌入式软件大赛,聚焦嵌入式软件设计与开发,携手瑞萨、英飞凌、ST、恩智浦、富瀚微、玄铁、兆
    的头像 发表于 09-20 10:06 1308次阅读
    <b class='flag-5'>RT-Thread</b> 2025<b class='flag-5'>嵌入式</b>软件大赛重磅来袭

    【好书推荐】RT-Thread第20本相关书籍!《嵌入式实时操作系统RT-Thread原理与应用》| 技术集结

    01内容简介ContentSummary本书为读者提供一个全面、系统RT-Thread学习指南,旨在帮助初学者及有经验的开发者掌握RT-Thread实时操作
    的头像 发表于 08-24 10:05 695次阅读
    【好书推荐】<b class='flag-5'>RT-Thread</b>第20本相关书籍!《<b class='flag-5'>嵌入式</b>实时操作<b class='flag-5'>系统</b><b class='flag-5'>RT-Thread</b>原理与应用》| 技术集结

    经济日报:国产嵌入式操作系统领军企业RT-Thread正在持续把新思想、新技术留给上海|媒体视角

    经济日报报道RT-Thread睿赛德2025世界人工智能大会落下帷幕,一系列亮眼成果为上海AI产业注入动力。作为国产嵌入式操作系统领军企业,RT-Thread睿赛德在大会中展现创新活力
    的头像 发表于 08-05 21:02 960次阅读
    经济日报:国产<b class='flag-5'>嵌入式</b>操作<b class='flag-5'>系统</b>领军企业<b class='flag-5'>RT-Thread</b>正在持续把新思想、新技术留给上海|媒体视角

    【北京】RT-Thread 嵌入式操作系统专业培训班,八月初火热报名中! | 知行工坊

    深入内核,精通驱动,掌握调试!RT-Thread官方在8月1日-8月3日倾力打造为期三天的嵌入式操作系统专业培训班,即将登陆北京!本次培训聚焦RT-Thread核心原理与实战开发,助您
    的头像 发表于 07-03 18:03 1125次阅读
    【北京】<b class='flag-5'>RT-Thread</b> <b class='flag-5'>嵌入式</b>操作<b class='flag-5'>系统</b>专业培训班,八月初火热报名中! | 知行工坊

    【好书推荐】RT-Thread第17本相关书籍!嵌入式系统原理与开发

    ,无法真正落地应用?如果你也有这些困扰,那么这本书你一定不能错过——《嵌入式系统原理与开发:基于STM32CubeIDE和RT-Thread》。它将帮你从基础原理到实
    的头像 发表于 06-23 20:22 548次阅读
    【好书推荐】<b class='flag-5'>RT-Thread</b>第17本相关书籍!<b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>原理与开发

    2025 RT-Thread全球技术大会议程正式发布!

    。2024RT-Thread全球技术大会,由开源操作系统RT-Thread发起,并联合国内外领先企业的重磅嘉宾,携手国内外顶尖企业专家与超3万名线上参与者,共议边缘计算、嵌入式
    的头像 发表于 05-27 19:28 1078次阅读
    2025 <b class='flag-5'>RT-Thread</b>全球技术大会议程正式发布!

    中新社:RT-Thread携“睿擎平台”亮相工博会 | 媒体视角

    RT-Thread睿赛德,报道“睿擎工业开发平台”在工博会首发亮相在4月23日开幕的成都国际工业博览会上,嵌入式操作系统领军企业RT-Thread
    的头像 发表于 04-24 11:16 1116次阅读
    中新社:<b class='flag-5'>RT-Thread</b>携“睿擎<b class='flag-5'>平台</b>”亮相工博会 | 媒体视角

    RT-Thread嵌入式操作系统专业培训班-深圳站重磅开启!

    RT-Thread官方将在深圳举办为期三天的嵌入式操作系统专业培训班!本次培训将深入讲解RT-Thread嵌入式实时操作
    的头像 发表于 04-11 18:18 655次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>嵌入式</b>操作<b class='flag-5'>系统</b>专业培训班-深圳站重磅开启!

    RT-Thread嵌入式操作系统专业培训班来上海啦!

    RT-Thread官方将在上海(RT-Thread大本营)发起为期三天的嵌入式操作系统专业培训班!本次培训将会深入讲解RT-Thread
    的头像 发表于 02-27 17:27 831次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>嵌入式</b>操作<b class='flag-5'>系统</b>专业培训班来上海啦!

    RT-Thread嵌入式操作系统专业培训班登陆郑州!

    RT-Thread官方将在河南-郑州发起为期三天的嵌入式操作系统专业培训班!本次培训将深入讲解RT-Thread嵌入式实时操作
    的头像 发表于 02-12 18:28 723次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>嵌入式</b>操作<b class='flag-5'>系统</b>专业培训班登陆郑州!

    清华大学出版社推出RT-Thread新作,助力嵌入式开发人才培养

    RT-Thread第16本权威著作,助力嵌入式开发人才培养近日,清华大学出版社出版由杨卫波、庄友谊、阮秀凯老师编写的最新教材——《嵌入式系统
    的头像 发表于 01-16 19:07 915次阅读
    清华大学出版社推出<b class='flag-5'>RT-Thread</b>新作,助力<b class='flag-5'>嵌入式</b>开发人才培养

    RT-Thread应用开发寒假师资培训——西安站

    随着物联网和智能系统的快速发展,嵌入式成为当前最热门最有发展前途的IT应用领域之一。为进一步提升全国大学生在嵌入式芯片及系统设计领域的创新能力,特别是针对物联网应用开发中
    的头像 发表于 12-11 01:06 1029次阅读
    <b class='flag-5'>RT-Thread</b>应用开发寒假师资培训——西安站