国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

在 STM32 上使用 C++ 指南

發(fā)布時間:2020-4-21 17:33    發(fā)布者:嵌入式人生17
STM32 上使用 C++ 指南
簡介
本文描述了如何使用在搭載了 RT-Thread 系統(tǒng)的 STM32 平臺上使用 C++,包括 C++ 的配置和應用等。并給出了在STM32F411 NUCLEO開發(fā)板上驗證的代碼示例。
硬件平臺簡介
本文基于意法半導體 STM32F411 NUCLEO開發(fā)板,給出了 C++ 的具體應用示例代碼,由于RT-Thread上層應用API的通用性,因此這些代碼不局限于具體的硬件平臺,用戶可以輕松將它移植到其它平臺上。
STM32F411 NUCLEO是意法半導體推出的一款基于ARM Cortex-M4內(nèi)核的開發(fā)板,最高主頻為100Mhz,該開發(fā)板具有豐富的板載資源,可以充分發(fā)揮STM32F411RE 的芯片性能。
STM32F411RE從屬于銷量名列前茅的STM32F4系列,眾所周知,F4STM32主打高性能和數(shù)字信號處理的輕奢系列。
奢侈F4作為內(nèi)核為Cortex-M4 (DSP+FPU)MCU,可選180MHz 主頻、2M Flash/384KB RAM、Chrom-ART加速器、MPI-DSI接口、延伸到125度的工作溫度、DFSDM數(shù)字濾波器以及各種常見的音頻(SAI)、連接(Ethernet、Camera、USB)、控制(CAN、UART、I2C)、存儲(FMC、2/4/8 bits SPISDMMC)外設。
在價格讓人輕松、尺寸輕巧”(不到3mm*3mm的封裝)、功耗輕微。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14784\wps19.png
如何在 STM32 上使用 C++
準備工作
1、下載 RT-Thread 源碼
2、下載 ENV 工具
3、進入rt-thread\bsp\stm32f411-st-nucleo 目錄,檢查 BSP rtconfig.py 文件和 SConstruct 文件是否支持 C++ 配置,如下圖所示
檢查 rtconfig.py 文件中對 C++ 的支持
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14784\wps20.png
檢查 SConstruct 文件中對 C++ 的支持
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14784\wps21.png
打開 C++ 支持:
打開 Env 工具,在 Env 命令行中輸入 menuconfig,進入配置界面,使用 menuconfig 工具(學習如何使用)配置工程。在 menuconfig 配置界面依次選擇 RT-Thread Components ---> C++ features ---> Support C++ features,如圖所示:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14784\wps22.png
編譯工程: scons --target=mdk5 1. 生成 mdk5 工程,將示例代碼附帶的 main.cpp 替換掉 BSP 中的 main.c 并重新加入到工程中,如圖所示:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14784\wps23.png
編譯,下載程序,在終端輸入 help 命令可以看到 test_cpp 已經(jīng)添加成功了。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14784\wps24.png
運行 C++ 程序:
在終端輸入 test_cpp 運行結果如下圖所示。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14784\wps25.png
C++ 全局對象構造函數(shù)的調(diào)用
RT-Thread 中對全局對象構造函數(shù)的實現(xiàn)中,以 GNUC 為例,在 rt-thread\components\cplusplus 目錄下的 crt_init.c 文件中對 C++ 進行了系統(tǒng)初始化, 在特定的 BSP 目錄下,連接腳本文件 link.lds C++ 全局構造函數(shù)的代碼分配了段,使 C++ 全局對象構造函數(shù)鏈接后能夠存放在指定的段中。如下圖所示:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14784\wps26.png
crt_init.c 文件完成了 C++ 系統(tǒng)的初始化工作
C++ 系統(tǒng)初始化部分:
1RT_WEAK int cplusplus_system_init(void)
2{
3    typedef void(*pfunc)();
4    extern pfunc __ctors_start__[];
5    extern pfunc __ctors_end__[];
6    pfunc *p;
7
8    for (p = __ctors_start__; p < __ctors_end__; p++)
9        (*p)();
10
11    return 0;
12}
13INIT_COMPONENT_EXPORT(cplusplus_system_init);
cplusplus_system_init 函數(shù)中,將全局對象的構造函數(shù)依次鏈接到了鏈接腳本文件中為其分配的段中,并且調(diào)用了 RT-Thread 組件自動初始化的宏 INIT_COMPONENT_EXPORT,所以在鏈接的時候,C++全局對象構造函數(shù)所產(chǎn)生的目標文件就被鏈接到了__ctors_start____ctors_end__組成的段中。
鏈接腳本中為 C++ 全局構造函數(shù)分配的段部分:
1PROVIDE(__ctors_start__ = .);
2KEEP (*(SORT(.init_array.*)))
3KEEP (*(.init_array))
4PROVIDE(__ctors_end__ = .);
__ctors_start__ 分配了 C++ 全局構造函數(shù)段的起始地址, __ctors_end__ 分配了 C++ 全局構造函數(shù)段的結束地址,所以全局構造函數(shù)在系統(tǒng)初始化的時候,就會被鏈接到這里分配的段地址中。
RT-Thread C++ 異常說明
同樣,在鏈接腳本文件 link.lds 中,也為 C++ 異常分配了段地址:
1    __exidx_start = .;
2    ARM.exidx :
3    {
4        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
5        _sidata = .;
6    } > CODE
7    __exidx_end = .;
__exidx_start 分配了 C++ 異常的起始地址, __exidx_end 分配了 C++ 異常的結束地址,當異常產(chǎn)生的時候,就會被分配到指定的段地址中。
這里以一個 C++ 除零異常的拋出和捕獲為例:
1   #include
2
3    #define MIN_VALUE                 (1e-4)                          
4    #define IS_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        }
12
13        return x / y;                                 
14    }
15
16    void throw_exceptions(void *args)
17    {
18        try                                            
19        {
20            div_func(6, 3);
21            rt_kprintf("there is no err\n");
22            div_func(4, 0);                                   /* create exception*/
23            rt_kprintf("you can run here?\n");
24        }
25        catch(double)                                         /* catch exception */     
26        {
27            rt_kprintf("error of dividing zero\n");
28        }
29    }
30
31    MSH_CMD_EXPORT(throw_exceptions, throw cpp exceptions);
當除零異常發(fā)生的時候 div_func 函數(shù)會拋出一個異常,在 throw_exceptions 函數(shù)中會去捕獲這個異常。
下載代碼,并在終端輸入 throw_exceptions 運行結果如下圖所示。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14784\wps27.png
到這一步為止,如何在搭載了 RT-Thread 系統(tǒng)的 STM32 平臺上如何使用 C++ 的介紹就結束了。

本文地址:http://m.qingdxww.cn/thread-585676-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內(nèi)容、版權和其它問題,我們將根據(jù)著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • PIC32CM LS60 Curiosity Pro評估工具包
  • dsPIC® DSC:攻克各種觸摸傳感挑戰(zhàn)的電容式觸摸解決方案
  • 探索PIC16F13145 MCU系列——快速概覽
  • PIC32CM LS00 Curiosity Pro評估工具包
  • 貿(mào)澤電子(Mouser)專區(qū)
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区中文| 香蕉伊大在线中字色中文| 青青偷拍视频| 四虎国产视频| 日本草草影院| 欧美日韩精品一区二区在线播放| 亚洲国产青草| 天天插综合网| 午夜免费视频| 日韩精品视频一区二区三区| 图片区小说区av区| 性做久久久久久久久25的美女| 亚洲精品高清国产一线久久97| 四虎1515hh免费大炮社区| 午夜国产精品影院在线观看| 欧美综合国产精品日韩一| 日本一区二区三区日本免费| 四虎成人国产精品视频| 亚洲精品免费在线| 日韩一区二区三区不卡视频| 四虎国产精品高清在线观看| 香蕉视频久久| 亚洲夜夜骑| 香蕉碰碰| 青草青视频| 亚洲网在线观看| 野外一级毛片| 欧美国产91| 欧美成人三级网站在线观看| 视频免费1区二区三区| 思思99re热| 青草视频免费在线观看| 色偷偷亚洲第一成人综合网址| 天天色天天插| 亚洲成a人片在线观看88| 色偷偷97| 亚洲综合日韩精品欧美综合区| 日本伊人久久| 青草精品视频| 亚洲国内精品自在线影视| 人人舔人人爱|