关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | strongerHuang

通常来说,在单片机上编程,要么汇编,要么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++基础知识,难度都不大。

使用说明

在Keil MDK环境下,使用的是ARM编译器(Arm Compiler),很多网上教程使用V6编译,其实V5和V6版本都是支持C++编程语言的。

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

使用V5和V6,工程配置的选项有些差异:

ST的开发库都已经做了支持,你会看到这么一段代码:

#ifdef __cplusplusextern "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);}
}

编译出来的代码量相对更大:

然后,如果有开发板,直接下载即可运行LED闪烁的现象。

说明:

使用C++写单片机流水灯程序,实现的方法有很多,比如还有一些更高级的继承、多态等用法,也可以引入进来。以上只是提供一种思路,引导初学者学习C++编程。

是不是很简单,看到这里,你学废了吗?

------------ END ------------

关注公众号后台回复『嵌入式开发』『单片机』相关文章。

回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

点击“阅读原文”查看更多分享

嵌入式开发 | 单片机能用C++开发吗?相关推荐

  1. c语言嵌入式开发单片机,嵌入式开发|单片机基础

    嵌入式开发它是一个综合的技能学习,既要去学习基本的Linux编程,又要学习物理机的操作使用,要想学习嵌入式的开发,在前面的文章中已经是跟大家说过了,嵌入式开发的学习需要掌握的基础课程还是比较多的,单片 ...

  2. 该不该放弃嵌入式,单片机这条路?(答主梦人亦冷:我与嵌入式软件开发爱恨交织7年)

    转载自知乎大佬 梦人亦冷的回答,问题:该不该放弃嵌入式,单片机这条路? 原文链接:https://www.zhihu.com/question/370606355/answer/1865920389 ...

  3. python嵌入式系统开发_python能开发单片机吗

    Python已经逐渐成为热门编程语言的"座上宾",同时它也是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言. 因此也就出现了将Pyth ...

  4. 嵌入式,单片机,ARM,Android底层开发之间的关系

    很多人在问我们学这些东西能干什么,这些东西有什么关系,我该学那个? 想知道这些首先得知道这些东西都试试很么. 单片机(Microcontrollers,亦称MCU)包括了CPU.随机存储器RAM.只读 ...

  5. 51单片机c语言应用开发三位一体实战精讲 pdf 119网盘,51单片机C语言应用开发三位一体实战精讲.pdf...

    燎舍黪曩饔黠抽璇漩 黏 地丛书 刘波文 ∷ :著 对 向 编 策划编辑 :胡晓柏 : 正 圭 飚翻 Ξ∶ 蓝设计 寸面设计 8Π 颥曩曩罂 内容简介 51系 (SO51/ATSg)为 工程 心 全书以 ...

  6. 嵌入式开发入门之经典 ARM开发板

    嵌入式开发入门之经典 开始进入嵌入式世界,真是一头雾水,不知道如何入手!也不知道该如何学习,学习什么,最近从网上转载这篇文章,对我启发很大,对于初始进入嵌入式的人们很有帮组,好多嵌入式大侠都说这是入门 ...

  7. 为什么大家都用C语言开发单片机,原因都在这啦

    提起单片机开发,就不得不说C语言,它是一门面向过程的.抽象化的通用程序设计语言,广泛应用于底层开发.那为什么大家都用C语言来开发单片机呢?原因都在这里了!下面通程创品就给大家简单介绍下. 为什么大家都 ...

  8. 单片机我们都了解,但是单片机应用系统的开发流程你们知道吗

    单片机我们都了解,但是单片机应用系统的开发流程你们知道吗 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺 ...

  9. Keil+T5L智能屏——让单片机图形化界面开发变得如此简单

    Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商.Keil公司由两家私人公司联合运 ...

最新文章

  1. 独家 | 层级聚类和Python实现的初学者指南(附链接)
  2. jdk自带压测工具_FULL GC分析过程分享
  3. php中时差怎么改,我的PHP时差功能可以改进吗?
  4. 项目中的那些事---下载pdf文件
  5. windows server2008 IIS搭建网站简易教程(阿里云)
  6. mysql空间数据类型的使用_MYSQL 空间数据类型用法
  7. Firefox关闭最后一个标签页时不关闭Firefox的设置
  8. 如何在markdown(csdn)中打出某个字符上面的三角帽子符号
  9. 双色球机器人博客博客,双色球预测程序算法
  10. MarkdownPad2行内公式如何用`$$`替代`\\(\\)`---MathJax风格化配置
  11. vba中FreezePanes(冻结窗格)用法
  12. 计算机课堂活跃小游戏,几个课堂小游戏(能活跃课堂气氛)
  13. 数据可视化-制作交易收盘价
  14. 油溶性CdSe/ZnS量子点,以CdSe为核心,ZnS为壳层,表面由疏水配体包裹的核/壳型荧光纳米材料
  15. 《黑白团团队》第八次团队作业:Alpha冲刺 第一天
  16. 你在工作中遇到过印象深刻的困难是什么,你怎么克服的?
  17. 自动写作ai-自动写作神器
  18. FITC-GSL I荧光素标记的西非单叶豆凝集素 I
  19. 基于机器学习的花卉识别
  20. python perl lisp_巴别塔-编程语言之旅【转】——C、C++、Lisp、Java、Perl、Ruby、Python核心比较...

热门文章

  1. 计算机怎么选购配置型号,怎样选购笔记本电脑配置
  2. 【参观微软分享有礼】微软拥抱开源
  3. 技术内部创新的类型和要素
  4. doraemon的python 网络基础、进程和操作系统发展史
  5. 韩国的NAVER和中国的百度
  6. 植物肉品牌Z-Rou株肉举办杭州超级粉丝见面会,正式宣告进入杭州市场
  7. Windows打印机共享配置设置
  8. signature=a6cb6ce8d8e12b283f4fc618f250a727,MS12-041:Windows 内核模式驱动程序中的漏洞可能会允许特权提升:2012 年 6 月 12 日...
  9. 学习python数据分析路线图_henry_dx_新浪博客
  10. 南核目录2020pdf_最新版CSSCI来源期刊目录及增减变化!