ESP8266开发学习笔记_使用C++进行嵌入式编程

ESP8266 开发学习笔记_By_GYC 【使用C++进行嵌入式编程】

由于C++具有封装、继承与多态的优秀特性,所以我将很多项目封装成了类方便调用,本部分会简单介绍一下如何在ESP8266中使用C++进行编程和一些注意事项。

一、简单的开始

我们使用的交叉编译工具链本身就支持C++,而且在官方的makefile里也写了C++编译相关的支持,所以对于用户来说,使用C++语言对ESP8266进行编程相当的容易,只需要将源文件的后缀改为“*.cpp” 、头文件改为 “*.hpp” ,或者直接添加“*.cpp” 、 “*.hpp”文件就可以实现使用C++语言编程。

image

image

二、主函数文件使用C++编程

同样的原理,在main文件夹下,将user_main.c 改为 user_main.cpp 。文件中就可以使用C++的各种关键字和语法了。

不过在user_main文件中,仅仅是支持C++编译还是不够的。因为编译器需要找到app_main这个函数作为用户程序入口。直接编译会报错找不到app_main函数。

image

基于此情况,我们需要给 app_main 函数加上 extern “C” 来告诉编译器,这个函数使用C语言风格编译,启动程序就能够正常的找到用户程序的入口了。

问题产生的原因和解决的原理如下:

此部分引用 作者:obatmg 的描述,详细原文链接为:https://blog.csdn.net/u014783685/article/details/84973067 

C++编译器在将cpp文件编译成库时,导出的函数名会改变,成员函数会通过加一些元素变成全局函数,如果这时候我们需要用C语言调用C++的函数,就会遇到C语言程序无法根据用户提供的函数名寻找到C++库中导出的真实函数名的问题,C++库中导出的真实函数名是由编译器决定的,这个时候就需要用到extern关键字。 

extern “C”的含义就是告诉编译器,下面的函数使用C风格来编译,C语言编译时就不会修改函数名,因为没有重载,类,命名空间等这些概念,函数名是唯一的,而C++因为有类、命名空间、函数重载这些概念,所以函数名可能是相同的,所以C++编译器会修改函数名,使得两个相同函数名的函数在调用时不会产生冲突。
——————— 

使用 extern “C” 来告诉编译器 之后,我们就可以正常的进行编译和使用了。

image

三、为什么使用C++

使用C++具有封装、继承与多态的优秀特性,我可以将很多项目封装成类,做成各种通用接口,方便在其他项目中调用。

使用C++类的概念,我可以构建各种子模块,通过添加类的方式添加新的功能,实现快速高灵活性的开发。

后面介绍的一些项目中也常常用到C++语言,所以在这里先做一个总结和说明,来记录和介绍我在ESP8266 IDF框架中使用C++的方法。我自己开发的小项目会上传到 我的github仓库上(https://github.com/gengyuchao),欢迎大家关注我的博客和github。如果有任何意见和建议,希望大家多多和我交流呀O(∩_∩)O~

Comments

:D 一言句子获取中...

Loading...Wait a Minute!