日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2021-04-30 16:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

答案肯定是可以的,下面講講基于KeilSTM32,用C++編寫(xiě)流水燈程序的一些內(nèi)容。

1

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

不知道大家對(duì)面向過(guò)程和面向?qū)ο蟮睦斫庥卸嗌伲?/p>

C語(yǔ)言是面向過(guò)程的語(yǔ)言,C++是面向?qū)ο蟮木幊陶Z(yǔ)言。結(jié)合本文來(lái)說(shuō),面向過(guò)程相比面向?qū)ο蟮木幊蹋纱a量(bin文件)更小,運(yùn)行效率更高。

所以,C語(yǔ)言相比C++具有更小代碼量(bin文件)、更快的運(yùn)行速度。

當(dāng)然,這里是C相對(duì)C++而言。其實(shí),匯編相對(duì)C而言,具有更小代碼量和更快的運(yùn)行速度??梢詤⒖次恼拢河?匯編 和 C語(yǔ)言 寫(xiě)流水燈程序有什么不一樣?

因?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)目了。

2

準(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í)。比如:類(lèi)、對(duì)象這些基礎(chǔ)內(nèi)容。

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

3

使用說(shuō)明

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

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

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

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

#ifdef __cplusplus extern “C” {#endif

//這里C源代碼

#ifdef __cplusplus}#endif

什么意思呢?

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

4

定義LED類(lèi)

在本文默認(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類(lèi):

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ǔ)言,相信都能看懂。

5

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

用C++的思路和C語(yǔ)言類(lèi)似,先初始化,然后再實(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ì)更大:

然后,如果有開(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)題:基于Keil、STM32,用C++編寫(xiě)流水燈程序

文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(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)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6078

    文章

    45591

    瀏覽量

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

    關(guān)注

    22

    文章

    2131

    瀏覽量

    77417

原文標(biāo)題:基于Keil、STM32,用C++編寫(xiě)流水燈程序

文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C++與lua聯(lián)合編程

    ,實(shí)際上是在教授一種“算力握手”的藝術(shù)。在這個(gè)時(shí)代,能夠用最嚴(yán)苛的棧平衡法則管理內(nèi)存,最低的摩擦成本聯(lián)通 C++ 與 Lua 的人,早已不再是普通的代碼編寫(xiě)者,而是深諳系統(tǒng)資源調(diào)配之道的“技術(shù)精算師”。這份對(duì)底層細(xì)節(jié)的掌控力,
    發(fā)表于 04-19 16:27

    keil實(shí)現(xiàn)cc++混合編程

    起因項(xiàng)目中使用到一個(gè)開(kāi)源的模擬IIC的庫(kù),封裝的比較好,但是是使用c++寫(xiě)的。于是將其移植到自己的項(xiàng)目中,主要有以下三步操作: 在工程選項(xiàng)中 C/C++中去掉勾選 C99 Mode
    發(fā)表于 01-26 08:58

    學(xué)習(xí)單片機(jī)快速方法

    那么多錢(qián)去養(yǎng)那些優(yōu)化代碼的程序員還不如買(mǎi)一套新的硬件。我現(xiàn)在也是C語(yǔ)言編程的。 匯編幾乎不用。知道怎么使用開(kāi)發(fā)軟件之后,你就可以按照學(xué)習(xí)板的教程進(jìn)行編程練習(xí)。練習(xí)要分模塊進(jìn)行,比如流水燈
    發(fā)表于 01-14 07:42

    LAT1187+在 Keil 中使用 STM32CubeProgrammer應(yīng)用筆記

    STM32 MCU 新產(chǎn)品的早期用戶(hù)有時(shí)候會(huì)遇見(jiàn)工具鏈還在完善中的情形,例如,一部分STM32 工具已經(jīng)支持該產(chǎn)品,而另外一部分 STM32 工具還在更新中。具體到 Keil 用戶(hù),用
    發(fā)表于 01-11 17:27 ?0次下載

    C語(yǔ)言與C++的區(qū)別及聯(lián)系

    C語(yǔ)言和C++到底是什么關(guān)系? 首先C++C語(yǔ)言本來(lái)就是兩種不同的編程語(yǔ)言,但C++確實(shí)是對(duì)C
    發(fā)表于 12-24 07:23

    CC++之間的聯(lián)系

    1、語(yǔ)法兼容性: C++完全兼容C語(yǔ)言的語(yǔ)法,這意味著任何有效的C語(yǔ)言程序都可以直接在C++編譯器下編譯通過(guò)。 2、底層控制:
    發(fā)表于 12-11 06:51

    C語(yǔ)言和C++之間的區(qū)別是什么

    C++的標(biāo)準(zhǔn)庫(kù)那樣集成度高和功能齊全。 6、編譯器與語(yǔ)言特性: C++編譯器通常比C語(yǔ)言編譯器更加復(fù)雜,因?yàn)樗枰幚砀嗟恼Z(yǔ)言特性,比如模板元編程、命名空間、引用等。 C++
    發(fā)表于 12-11 06:23

    C++程序異常的處理機(jī)制

    1、什么是異常處理? 有經(jīng)驗(yàn)的朋友應(yīng)該知道,在正常的CC++編程過(guò)程中難免會(huì)碰到程序不按照原本設(shè)計(jì)運(yùn)行的情況。 最常見(jiàn)的有除法分母為零,數(shù)組越界,內(nèi)存分配失效、打開(kāi)相應(yīng)文件失敗等等。 一個(gè)
    發(fā)表于 12-02 07:12

    第4章 C語(yǔ)言基礎(chǔ)以及流水燈的實(shí)現(xiàn)(4.7 4.8)

    1.1?Keil軟件延時(shí) C語(yǔ)言常用的延時(shí)方法,有如圖4-2所示4種。 圖4-2 ?C語(yǔ)言延時(shí)方法 這4種延時(shí)方法,其中兩種非精確延時(shí),兩種精確一些的延時(shí)。for語(yǔ)句和while語(yǔ)句都可以通過(guò)改變i
    的頭像 發(fā)表于 11-19 17:20 ?1012次閱讀
    第4章 <b class='flag-5'>C</b>語(yǔ)言基礎(chǔ)以及<b class='flag-5'>流水燈</b>的實(shí)現(xiàn)(4.7 4.8)

    STM32的時(shí)候是直接MDK方便還是在vscodekeil插件方便一些?

    STM32的時(shí)候是直接MDK方便還是在vscodekeil插件方便一些
    發(fā)表于 08-12 08:02

    【沁恒CH585開(kāi)發(fā)板免費(fèi)試用體驗(yàn)】GPIO 流水燈

    ; 2) GPIO 端口模式設(shè)置; 3) 初始化IO口; 4) 編寫(xiě)處理函數(shù); 3.2 流水燈代碼實(shí)現(xiàn) 主函數(shù)代碼如下: #include \"CH58x_common.h\"
    發(fā)表于 07-04 22:55

    使用英特爾? NPU 插件C++運(yùn)行應(yīng)用程序時(shí)出現(xiàn)錯(cuò)誤:“std::Runtime_error at memory location”怎么解決?

    使用OpenVINO?工具套件版本 2024.4.0 構(gòu)建C++應(yīng)用程序 使用英特爾? NPU 插件運(yùn)行了 C++ 應(yīng)用程序 遇到的錯(cuò)誤: Microsoft
    發(fā)表于 06-25 08:01

    請(qǐng)問(wèn)是否可以在通用Windows平臺(tái)中構(gòu)建OpenVINO? GenAI C++ 應(yīng)用程序?

    無(wú)法在通用 Windows 平臺(tái)中構(gòu)建OpenVINO? GenAI C++ 應(yīng)用程序
    發(fā)表于 06-24 07:35

    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 C 而不是 C++?

    在單片機(jī)的地界兒里,C語(yǔ)言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說(shuō)內(nèi)存這道坎兒。您當(dāng)stm32f4的
    的頭像 發(fā)表于 05-21 10:33 ?1229次閱讀
    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    使用C++中的CyAPI編寫(xiě)的應(yīng)用程序上遇到了問(wèn)題,求解決

    我在使用 C++ 中的 CyAPI 編寫(xiě)的應(yīng)用程序上遇到了問(wèn)題。 我將 XferData() 方法與其他所有端點(diǎn)類(lèi)型一起使用,沒(méi)有遇到任何問(wèn)題。 但是,將其與 Endpoint0 一起使用會(huì)引發(fā)
    發(fā)表于 05-13 06:11
    额敏县| 乃东县| 宜州市| 托里县| 乌拉特前旗| 揭阳市| 新乡市| 黄山市| 赞皇县| 阿瓦提县| 海口市| 津市市| 江孜县| 来凤县| 通化市| 石柱| 灌阳县| 河西区| 甘孜县| 昌吉市| 锡林浩特市| 白水县| 成安县| 集贤县| 永川市| 阜平县| 余干县| 泗水县| 习水县| 花垣县| 加查县| 屯昌县| 龙南县| 吉首市| 龙游县| 山西省| 康马县| 朝阳县| 锦屏县| 新乐市| 顺昌县|