RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

能用C++開(kāi)發(fā)單片機(jī)嗎

strongerHuang ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2022-03-10 17:47 ? 次閱讀

通常來(lái)說(shuō),在單片機(jī)編程,要么匯編,要么C語(yǔ)言,而用C++進(jìn)行開(kāi)發(fā)的很少

那么究竟能不能用C++開(kāi)發(fā)單片機(jī)呢?答案肯定是可以的。

下面基于Keil、STM32,用C++編程點(diǎn)亮LED,給初學(xué)者提供一下思路。

為什么很少用C++開(kāi)發(fā)單片機(jī)

不知道大家對(duì)面向過(guò)程面向?qū)ο?/strong>的理解有多少?

C語(yǔ)言是面向過(guò)程的語(yǔ)言,C++是面向?qū)ο蟮木幊陶Z(yǔ)言。結(jié)合本文來(lái)說(shuō),面向過(guò)程相比面向?qū)ο蟮木幊?,生成代碼量(bin文件)更小,運(yùn)行效率更高。 所以,C語(yǔ)言相比C++具有更小代碼量(bin文件)、更快的運(yùn)行速度。 當(dāng)然,這里是C相對(duì)C++而言。其實(shí),匯編相對(duì)C而言,具有更小代碼量和更快的運(yùn)行速度。(可以參看文章:用 匯編 和 C語(yǔ)言 點(diǎn)燈程序有什么不一樣? 因?yàn)閱纹瑱C(jī)的RAM和Flash資源相比較小,運(yùn)行速度也相對(duì)較低,所以,你會(huì)發(fā)現(xiàn):很少有人在單片機(jī)上面用C++開(kāi)發(fā)項(xiàng)目。 其實(shí),隨著單片機(jī)的存儲(chǔ)資源以及運(yùn)行速度的增加,目前有些工程師開(kāi)始用C++開(kāi)發(fā)單片機(jī)項(xiàng)目了。

準(zhǔn)備工作

在Keil MDK開(kāi)發(fā)環(huán)境下,用C語(yǔ)言開(kāi)發(fā)STM32比較常見(jiàn)了,什么開(kāi)發(fā)環(huán)境安裝、創(chuàng)建工程等這些步驟,本文不講述,請(qǐng)參看我文章:Keil系列教程01_Keil介紹、下載、安裝與注冊(cè)Keil系列教程02_新建基礎(chǔ)軟件工程

這是Keil的基礎(chǔ)教程,有不懂的同學(xué),可以在我公眾號(hào)后臺(tái)回復(fù)關(guān)鍵字“Keil系列教程”閱讀Keil更多的使用方法。

然后就是需要懂一些C++的基礎(chǔ)語(yǔ)法,本文講述的內(nèi)容比較基礎(chǔ),用到C++很基礎(chǔ)的知識(shí)。比如:類、對(duì)象這些基礎(chǔ)內(nèi)容。

沒(méi)學(xué)過(guò)C++也沒(méi)關(guān)系,只要懂C語(yǔ)言,在網(wǎng)上現(xiàn)學(xué)C++基礎(chǔ)知識(shí),難度都不大。

使用說(shuō)明

在KeilMDK環(huán)境下,使用的是ARM編譯器(Arm Compiler),很多網(wǎng)上教程使用V6編譯,其實(shí)V5和V6版本都是支持C++編程語(yǔ)言的。

在工程中添加C++源代碼(比如:main.cpp

d5073b04-9196-11ec-952b-dac502259ad0.png

使用V5和V6,工程配置的選項(xiàng)有些差異:

d5274f34-9196-11ec-952b-dac502259ad0.png

ST的開(kāi)發(fā)庫(kù)都已經(jīng)做了支持,你會(huì)看到這么一段代碼:

#ifdef __cplusplus extern "C" {#endif
//這里C源代碼
#ifdef __cplusplus}#endif

什么意思呢?

這是一段預(yù)處理,從預(yù)處理代碼可以看得出來(lái),大概意思就是:支持C和C++混合編程

定義LED類

本文默認(rèn)大家掌握了用C語(yǔ)言開(kāi)發(fā)STM32流水燈的知識(shí),直接描述C++代碼內(nèi)容。

本文講述一個(gè)很基礎(chǔ)的例子"LED點(diǎn)燈",用C++編程實(shí)現(xiàn)的方法很多,這里將其中一個(gè)基礎(chǔ)的方法。

首先,創(chuàng)建一個(gè)main.cpp源代碼文件,定義一個(gè)LED類:

class LED_Class{}

然后定義私有成員(當(dāng)然,public也可以):

class LED_Class{private:  GPIO_TypeDef *GPIOx;  uint16_t GPIO_Pin;  uint32_t RCC_APB2Periph;}

再次就是用到的函數(shù):初始化GPIO、打開(kāi)、關(guān)閉LED等。

class LED_Class{private:  GPIO_TypeDef *GPIOx;  uint16_t GPIO_Pin;  uint32_t RCC_APB2Periph;
public:  LED_Class(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin, uint32_t RCC_APB2Periph){    LED_Class::GPIOx = GPIOx;    LED_Class::GPIO_Pin = GPIO_Pin;    LED_Class::RCC_APB2Periph = RCC_APB2Periph;  }
  void Init(void){      GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph,ENABLE);      GPIO_InitStruct.GPIO_Pin   = GPIO_Pin;      GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;      GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;GPIO_Init(GPIOx,&GPIO_InitStruct);  }
  void Open(void){    GPIO_SetBits(GPIOx, GPIO_Pin);  }
  void Close(void){    GPIO_ResetBits(GPIOx, GPIO_Pin);  }};
這個(gè)代碼是不是很簡(jiǎn)單,即使你不會(huì)C++,只要懂C語(yǔ)言,相信都能看懂。

流水燈實(shí)現(xiàn)(main函數(shù))

用C++的思路和C語(yǔ)言類似,先初始化,然后再實(shí)現(xiàn):
int main(void){  LED_Class LED1(GPIOF, GPIO_Pin_7, RCC_APB2Periph_GPIOF);  LED_Class LED2(GPIOF, GPIO_Pin_8, RCC_APB2Periph_GPIOF);
  LED1.Init();  LED2.Init();
  while(1)  {    LED1.Open();    LED2.Open();    Delay(10);
    LED1.Close();    LED2.Close();    Delay(10);  }}

還有一種初始化:

int main(void){  LED_Class *LED1 = new LED_Class(GPIOF, GPIO_Pin_7, RCC_APB2Periph_GPIOF);  LED_Class *LED2 = new LED_Class(GPIOF, GPIO_Pin_8, RCC_APB2Periph_GPIOF);
  LED1->Init();  LED2->Init();
  while(1)  {    LED1->Open();    LED2->Open();    Delay(50);
    LED1->Close();    LED2->Close();    Delay(50);  }}

編譯出來(lái)的代碼量相對(duì)更大:

d545608c-9196-11ec-952b-dac502259ad0.png

然后,如果有開(kāi)發(fā)板,直接下載即可運(yùn)行LED閃爍的現(xiàn)象。

說(shuō)明:

使用C++寫(xiě)單片機(jī)流水燈程序,實(shí)現(xiàn)的方法有很多,比如還有一些更高級(jí)的繼承、多態(tài)等用法,也可以引入進(jìn)來(lái)。以上只是提供一種思路,引導(dǎo)初學(xué)者學(xué)習(xí)C++編程。

是不是很簡(jiǎn)單,看到這里,你學(xué)廢了嗎?

原文標(biāo)題:嵌入式開(kāi)發(fā) | 單片機(jī)能用C++開(kāi)發(fā)嗎?

文章出處:【微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23252

    瀏覽量

    660557
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6035

    文章

    44554

    瀏覽量

    634629
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73618

原文標(biāo)題:嵌入式開(kāi)發(fā) | 單片機(jī)能用C++開(kāi)發(fā)嗎?

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    用PC機(jī)直接開(kāi)發(fā)單片機(jī)系統(tǒng)

    用PC機(jī)直接開(kāi)發(fā)單片機(jī)系統(tǒng)
    發(fā)表于 08-19 22:28

    mac開(kāi)發(fā)單片機(jī)

    在mac上如何開(kāi)發(fā)單片機(jī)?
    發(fā)表于 08-08 14:06

    單片機(jī)c++

    簡(jiǎn)單學(xué)過(guò)c,c++,要入門(mén)單片機(jī)了,想知道單片機(jī)能用c++嗎,聽(tīng)說(shuō)能用。但是好像網(wǎng)上和圖書(shū)館都不
    發(fā)表于 05-08 13:07

    開(kāi)發(fā)單片機(jī)過(guò)程中有哪些步驟

    文章目錄序言一、軟件介紹1、Keil C512、STC-ISP二、安裝1、Keil C51安裝2、STC-ISP安裝結(jié)語(yǔ)序言作為單片機(jī)的入門(mén)開(kāi)發(fā)者,51
    發(fā)表于 07-13 09:18

    C語(yǔ)言來(lái)開(kāi)發(fā)單片機(jī)系統(tǒng)軟件最大的好處是什么

    1.為什么也是C語(yǔ)言?用C語(yǔ)言來(lái)開(kāi)發(fā)單片機(jī)系統(tǒng)軟件最大的好處是編寫(xiě)代碼效率高、軟件調(diào)試直觀、維護(hù)升級(jí)方便、代碼的重復(fù)利用率高等,因此C 語(yǔ)言編程在
    發(fā)表于 07-15 09:17

    C語(yǔ)言和匯編語(yǔ)言在開(kāi)發(fā)單片機(jī)時(shí)各有哪些優(yōu)缺點(diǎn)?

    C語(yǔ)言和匯編語(yǔ)言在開(kāi)發(fā)單片機(jī)時(shí)各有哪些優(yōu)缺點(diǎn)?C或匯編語(yǔ)言可以用于單片機(jī),C++能嗎?搞單片機(jī)
    發(fā)表于 10-19 07:51

    請(qǐng)問(wèn)如何快速的開(kāi)發(fā)單片機(jī)

    請(qǐng)問(wèn)如何快速的開(kāi)發(fā)單片機(jī)?
    發(fā)表于 10-26 07:59

    開(kāi)發(fā)單片機(jī)常見(jiàn)的IDE是什么

    開(kāi)發(fā)單片機(jī)常見(jiàn)的IDE有哪些?(點(diǎn)擊鏈接閱讀原文)
    發(fā)表于 11-22 08:26

    C++開(kāi)發(fā)單片機(jī)有哪些優(yōu)勢(shì)和劣勢(shì)呢?

    在一般的IDE里面除了C可以選擇還有很多常見(jiàn)的C++C++開(kāi)發(fā)單片機(jī)有哪些優(yōu)勢(shì)和劣勢(shì)?
    發(fā)表于 10-16 07:30

    快速的開(kāi)發(fā)單片機(jī)的技巧分享

    作為一個(gè)單片機(jī)開(kāi)發(fā)的老司機(jī),在這里告訴大家如何快速的開(kāi)發(fā)單片機(jī),完成自己的項(xiàng)目。
    的頭像 發(fā)表于 02-07 07:30 ?2758次閱讀

    簡(jiǎn)述關(guān)于Keil、STM32 用C++編寫(xiě)流水燈程序

    通常來(lái)說(shuō),在單片機(jī)上編程, 要么匯編,要么C語(yǔ)言 ,而用C++進(jìn)行開(kāi)發(fā)的很少,那么究竟能不能用C++
    的頭像 發(fā)表于 04-22 10:23 ?5461次閱讀
    簡(jiǎn)述關(guān)于Keil、STM32 用<b class='flag-5'>C++</b>編寫(xiě)流水燈程序

    如何基于Keil、STM32用C++編寫(xiě)流水燈程序?

    通常來(lái)說(shuō),在單片機(jī)上編程,要么匯編,要么C語(yǔ)言,而用C++進(jìn)行開(kāi)發(fā)的很少,那么究竟能不能用C++
    的頭像 發(fā)表于 04-30 16:10 ?3111次閱讀

    開(kāi)發(fā)單片機(jī)常見(jiàn)的IDE有哪些?

    開(kāi)發(fā)單片機(jī)常見(jiàn)的IDE有哪些?(點(diǎn)擊鏈接閱讀原文)
    發(fā)表于 11-13 12:36 ?12次下載
    <b class='flag-5'>開(kāi)發(fā)單片機(jī)</b>常見(jiàn)的IDE有哪些?

    如何使用eclipse開(kāi)發(fā)單片機(jī)程序

    如何使用eclipse開(kāi)發(fā)單片機(jī)程序
    發(fā)表于 11-13 12:51 ?6次下載
    如何使用eclipse<b class='flag-5'>開(kāi)發(fā)單片機(jī)</b>程序

    在Visual Studio Code上開(kāi)發(fā)單片機(jī)程序(基于IAR msp430)

    在Visual Studio Code上開(kāi)發(fā)單片機(jī)程序(基于IAR msp430)
    發(fā)表于 11-15 15:51 ?55次下載
    在Visual Studio Code上<b class='flag-5'>開(kāi)發(fā)單片機(jī)</b>程序(基于IAR msp430)
    RM新时代网站-首页