那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

能用C++開發單片機嗎

strongerHuang ? 來源:strongerHuang ? 作者:strongerHuang ? 2022-03-10 17:47 ? 次閱讀

通常來說,在單片機編程要么匯編,要么C語言,而用C++進行開發的很少

那么究竟能不能用C++開發單片機呢?答案肯定是可以的。

下面基于Keil、STM32,用C++編程點亮LED,給初學者提供一下思路。

為什么很少用C++開發單片機

不知道大家對面向過程面向對象的理解有多少?

C語言是面向過程的語言,C++是面向對象的編程語言。結合本文來說,面向過程相比面向對象的編程,生成代碼量(bin文件)更小,運行效率更高。 所以,C語言相比C++具有更小代碼量(bin文件)、更快的運行速度。 當然,這里是C相對C++而言。其實,匯編相對C而言,具有更小代碼量和更快的運行速度。(可以參看文章:用 匯編 和 C語言 點燈程序有什么不一樣? 因為單片機的RAM和Flash資源相比較小,運行速度也相對較低,所以,你會發現:很少有人在單片機上面用C++開發項目。 其實,隨著單片機的存儲資源以及運行速度的增加,目前有些工程師開始用C++開發單片機項目了。

準備工作

在Keil MDK開發環境下,用C語言開發STM32比較常見了,什么開發環境安裝、創建工程等這些步驟,本文不講述,請參看我文章:Keil系列教程01_Keil介紹、下載、安裝與注冊Keil系列教程02_新建基礎軟件工程

這是Keil的基礎教程,有不懂的同學,可以在我公眾號后臺回復關鍵字“Keil系列教程”閱讀Keil更多的使用方法。

然后就是需要懂一些C++的基礎語法,本文講述的內容比較基礎,用到C++很基礎的知識。比如:類、對象這些基礎內容。

沒學過C++也沒關系,只要懂C語言,在網上學C++基礎知識,難度都不大。

使用說明

在KeilMDK環境下,使用的是ARM編譯器(Arm Compiler),很多網上教程使用V6編譯,其實V5和V6版本都是支持C++編程語言的。

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

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

使用V5和V6,工程配置的選項有些差異:

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

ST的開發庫都已經做了支持,你會看到這么一段代碼:

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

什么意思呢?

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

定義LED類

本文默認大家掌握了用C語言開發STM32流水燈的知識,直接描述C++代碼內容。

本文講述一個很基礎的例子"LED點燈",用C++編程實現的方法很多,這里將其中一個基礎的方法。

首先,創建一個main.cpp源代碼文件,定義一個LED類:

class LED_Class{}

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

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

再次就是用到的函數:初始化GPIO、打開、關閉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);  }};
這個代碼是不是很簡單,即使你不會C++,只要懂C語言,相信都能看懂。

流水燈實現(main函數)

用C++的思路和C語言類似,先初始化,然后再實現:
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);  }}

編譯出來的代碼量相對更大:

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

然后,如果有開發板,直接下載即可運行LED閃爍的現象。

說明:

使用C++寫單片機流水燈程序,實現的方法有很多,比如還有一些更高級的繼承、多態等用法,也可以引入進來。以上只是提供一種思路,引導初學者學習C++編程。

是不是很簡單,看到這里,你學廢了嗎?

原文標題:嵌入式開發 | 單片機能用C++開發嗎?

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23351

    瀏覽量

    663148
  • 單片機
    +關注

    關注

    6043

    文章

    44619

    瀏覽量

    638479
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73854

原文標題:嵌入式開發 | 單片機能用C++開發嗎?

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    用PC直接開發單片機系統

    用PC直接開發單片機系統
    發表于 08-19 22:28

    mac開發單片機

    在mac上如何開發單片機?
    發表于 08-08 14:06

    單片機c++

    簡單學過c,c++,要入門單片機了,想知道單片機能用c++嗎,聽說能用。但是好像網上和圖書館都不
    發表于 05-08 13:07

    開發單片機過程中有哪些步驟

    文章目錄序言一、軟件介紹1、Keil C512、STC-ISP二、安裝1、Keil C51安裝2、STC-ISP安裝結語序言作為單片機的入門開發者,51
    發表于 07-13 09:18

    C語言來開發單片機系統軟件最大的好處是什么

    1.為什么也是C語言?用C語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高等,因此C 語言編程在
    發表于 07-15 09:17

    C語言和匯編語言在開發單片機時各有哪些優缺點?

    C語言和匯編語言在開發單片機時各有哪些優缺點?C或匯編語言可以用于單片機,C++能嗎?搞單片機
    發表于 10-19 07:51

    請問如何快速的開發單片機

    請問如何快速的開發單片機?
    發表于 10-26 07:59

    開發單片機常見的IDE是什么

    開發單片機常見的IDE有哪些?(點擊鏈接閱讀原文)
    發表于 11-22 08:26

    C++開發單片機有哪些優勢和劣勢呢?

    在一般的IDE里面除了C可以選擇還有很多常見的C++,C++開發單片機有哪些優勢和劣勢?
    發表于 10-16 07:30

    快速的開發單片機的技巧分享

    作為一個單片機開發的老司機,在這里告訴大家如何快速的開發單片機,完成自己的項目。
    的頭像 發表于 02-07 07:30 ?2843次閱讀

    簡述關于Keil、STM32 用C++編寫流水燈程序

    通常來說,在單片機上編程, 要么匯編,要么C語言 ,而用C++進行開發的很少,那么究竟能不能用C++
    的頭像 發表于 04-22 10:23 ?5653次閱讀
    簡述關于Keil、STM32 用<b class='flag-5'>C++</b>編寫流水燈程序

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

    通常來說,在單片機上編程,要么匯編,要么C語言,而用C++進行開發的很少,那么究竟能不能用C++
    的頭像 發表于 04-30 16:10 ?3149次閱讀

    開發單片機常見的IDE有哪些?

    開發單片機常見的IDE有哪些?(點擊鏈接閱讀原文)
    發表于 11-13 12:36 ?12次下載
    <b class='flag-5'>開發單片機</b>常見的IDE有哪些?

    如何使用eclipse開發單片機程序

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

    在Visual Studio Code上開發單片機程序(基于IAR msp430)

    在Visual Studio Code上開發單片機程序(基于IAR msp430)
    發表于 11-15 15:51 ?55次下載
    在Visual Studio Code上<b class='flag-5'>開發單片機</b>程序(基于IAR msp430)
    LV百家乐官网客户端LV| 百家乐如何切牌好| 百家乐官网真人博彩的玩法技巧和规则 | 大发888娱乐场下载com| 金沙百家乐的玩法技巧和规则| 保单百家乐游戏机| 风水做生意房漏水| 娱乐百家乐官网的玩法技巧和规则| 百家乐官网马宝| 百家乐官网游戏规则玩法| 百家乐官网视频软件| 狮威国际娱乐| e世博线上娱乐| 皇冠赌球| 长寿区| 百家乐官网论坛白菜| 保单百家乐官网技巧| 金沙百家乐官网现金网| 网络百家乐官网的破解| 玩百家乐官网平台| 澳门百家乐官网娱乐城开户| 太阳城百家乐官网注册平台| 赌场百家乐官网视频| 打百家乐官网庄闲的技巧| 百家乐官网单机破解版| 三星百家乐官网的玩法技巧和规则| 王子百家乐官网的玩法技巧和规则 | 聚宝盆百家乐官网游戏| 百家乐官网代理商博彩e族| 赌场百家乐官网试玩| 单机百家乐官网小游戏| 24山坐向| 重庆百家乐团购百嘉乐量贩KTV地址| 百家乐辅助器| 推二八杠技巧| 新利棋牌游戏| 合作市| k7百家乐官网最小投注| 休闲百家乐官网的玩法技巧和规则| 百家乐全透明牌靴| 中骏百家乐的玩法技巧和规则 |