日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

STM32 进阶教程 7 -  C与C++混合编程

發(fā)布時(shí)間:2025/4/5 c/c++ 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32 进阶教程 7 -  C与C++混合编程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

在嵌入式開發(fā)過程中經(jīng)常會(huì)用到第三個(gè)芯片/設(shè)備,這些第三方的芯片提供的DEMO程序或驅(qū)動(dòng)程序有時(shí)候是C++,如果先前的系統(tǒng)用C語言寫的就會(huì)出現(xiàn)點(diǎn)問題,往往需先將C++的驅(qū)動(dòng)程序自已手動(dòng)改成C語言再用,本節(jié)給大家介給一下如何在KEL MDK環(huán)境中實(shí)現(xiàn)C與C++混合編程。本節(jié)將在《STM32 進(jìn)階教程 4 -? 軟件實(shí)現(xiàn)高精度延時(shí) 2》基礎(chǔ)上將Delay.c變成C++實(shí)現(xiàn)的Delay.cpp編代碼實(shí)現(xiàn),實(shí)現(xiàn)一樣的延時(shí)效果。

?

示例詳解

基于硬件平臺(tái): STM32F10C8T6最小系統(tǒng)板, MCU 的型號(hào)是?STM32F103c8t6, 使用stm32cubemx 工具自動(dòng)產(chǎn)生的配置工程,使用KEIL5編譯代碼。

?

?

本示例所用的最小系統(tǒng)板原理圖:

?

  • 關(guān)于CUBEMX工具及KEIL工具的操作將不再細(xì)講,如果還有不熟悉的可以查看之前的教程文檔。下面直接介紹工程配置:
  • 系統(tǒng)時(shí)鐘樹
  • 定時(shí)器配置
  • 引腳配置
  • 中斷配置(保持默認(rèn))
  • ?

    ?

  • 工程代碼
  • 將事先準(zhǔn)備好的delay.cpp和delay.h文件加到工程中,并將main.c重命名為main.cpp并重新加入到工程中:
  • Delay.h文件放在INC文件夾下即可。

    ?

  • St的Hal庫(kù)對(duì)C++支持比較好,需要調(diào)整的比較少,但是在實(shí)際應(yīng)用中Keil MDK STM32 C與C++混合編程的幾個(gè)要點(diǎn)還是值得關(guān)注一下:
  • 1. 帶有C++語法(如使用了類特性)的源文件其文件名必須是.CPP后輟,如本例中的Delay.cpp文件。

    2. 需要調(diào)用由C++封裝的接口的源程序其文件名也應(yīng)是.CPP后輟,如本例中的main.cpp因其要包涵delay.h頭文件,且delay.h中又包函數(shù)了C++語法/關(guān)鍵字。

    3.如果要使用C++,工程就不能再使用MicroLIB庫(kù)了,因?yàn)镸icroLIB不支持C++:

    4.如果工程中以.CPP為后輟的源文件中有全局函數(shù)或變量(不在類中的),可以在其頭文件中以如下方式導(dǎo)出函數(shù)接口供其它模塊/文件調(diào)用:

    5.網(wǎng)上有些朋友說要把工程的 –C99特性去掉,在高版本的KEIL中C99特性其實(shí)是可以不去的!下面是筆者親自試過的三種可以實(shí)現(xiàn)C與C++混合編程的工程相關(guān)配置(如果C99與GUN兩個(gè)都不選會(huì)有問題!!):

    ?

  • 在main.cpp 中加入如下圖所示代碼
  • ?

  • 編譯工程,下載程序看效果,首先仿真運(yùn)行代碼,可以發(fā)現(xiàn)變量C = 11+15 =26 結(jié)果正確:
  • 讓程序全速運(yùn)行,查看PC13引腳上的波形:

    與《STM32 進(jìn)階教程 4 -? 軟件實(shí)現(xiàn)高精度延時(shí) 2》節(jié)的C語實(shí)現(xiàn)的延時(shí)開銷會(huì)大一點(diǎn)點(diǎn):

    ?

    通過上面的實(shí)例,我們已基本學(xué)會(huì)基于keil MDK平臺(tái)的stm32 中C與 C++混合編程的實(shí)現(xiàn)過程,是不是很簡(jiǎn)單,學(xué)完本節(jié)內(nèi)容后再遇到C++編寫的芯片驅(qū)動(dòng)或DEMO就可以可以很快移植 到我們的工程中了呢。

    OK,本期實(shí)驗(yàn)完成!下期見!同時(shí)如果大家有什么疑問或是有想了解的其它內(nèi)容,也歡迎大家留言!!最后喜歡這個(gè)公眾號(hào)的同學(xué)們記得加關(guān)注了,會(huì)有不定期技術(shù)干貨推出!!

    文中源碼資料下載,在公眾號(hào)里給十三發(fā)消息:

    下載|STM32進(jìn)階教程 7

    ?

    關(guān)注十三公眾號(hào)

    ?

    總結(jié)

    以上是生活随笔為你收集整理的STM32 进阶教程 7 -  C与C++混合编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。