本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!

↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录       _ O x

是否进入ESP32教学导航(基于ESP-IDF)?

       确定


文章目录

  • 1、导言
  • 2、在main文件中使用C++ —— 将 `/main/main.c`更改为`/main/main.cpp`
  • 3、在组件(`Components`)中使用C++

1、导言

在上一篇文章ESP32 之 ESP-IDF 学习笔记(五)【ESP-IDF CMake构建系统(Build System)】中讲到了 ESP-IDF 的 CMake 工程结构,并重点讲了如何利用 组件Components 让编译器找到你的各种程序文件(*.c *.cpp)以及头文件(*.h),以构建完整的工程。

乐鑫提供的官方工具链支持C++的编译,所以ESP-IDF工程是支持C++的。

C++在嵌入式领域的优点颇多,下面介绍在ESP-IDF工程中使用C++以及使用过程中的注意事项。

2、在main文件中使用C++ —— 将 /main/main.c更改为/main/main.cpp

我们知道,一个标准ESP-IDF工程文件夹中有一个main文件夹,这个文件夹就是main组件。具体详见上一篇文章:ESP32 之 ESP-IDF 学习笔记(五)【ESP-IDF CMake构建系统(Build System)】

大多数例程中都至少有CMakeList.txtmain.c,而这个CMakeList.txt的内容一般是:

idf_component_register(  SRCS            "main.c"INCLUDE_DIRS  "."
)

注意第二行,就是需要编译的源文件。下面我们把它改为main.cpp同时把main文件夹下的main.c改名为main.cpp。这样就是把main组件用C++编写的第一步。

idf_component_register(  SRCS            "main.cpp"INCLUDE_DIRS    "."
)

第二步,我们打开改名后的main.cpp文件,里边的内容一般有一个app_main()入口函数。如:

#include <stdio.h>void app_main() {}

我们把main.c改名为main.cpp后,还需要把app_main()函数前边加上如下内容,使其变成如下代码。当然,头文件也可以换成cpp的标准输入输出头文件

#include <iostream>extern "C" void app_main() {}

这是因为C++编译器与C编译器的原因,我们知道C语言是不支持函数重载的,同名函数只能有一个,而在C++中,同名函数但不同参数的函数是可以存在的,并且在使用过程中互不干扰,原因是编译之后的函数不同。

注意:并不是 所有函数在使用C++编译时都要加extern "C",原因见下


打个比方(以下 可能并不是真实的情况,只是打一种比方

void func(int para1, int para2);void func(int para1, float para2);

在C++中编译后你可以理解为(以下 可能并不是真实的情况,只是打一种比方)通过这样实现的函数重载

void func_int_int(int para1, int para2);void func_int_float(int para1, float para2);

而在C语言编译后你就可以理解成函数名不变,我们的入口函数app_main()函数也是如此。因此,因为函数重载的原因,程序执行时 ESP32 可能找不到你的入口函数。所以要让ESP32找到入口函数,必须告诉编译器,此函数不能按照C++那样进行编译。所以就有了函数头部的extern "C"

注意:extern "C"还有其他的用法,这不是本文的重点,请读者自行查询。

3、在组件(Components)中使用C++

参考本文第2小节介绍的 main组件(在main文件中使用C++ )

ESP-IDF提供了关于C++使用的例程,参照esp-idf\examples\cxx\

ESP32 之 ESP-IDF 教学(五(2))——使用C++的工程相关推荐

  1. ESP32开发学习(IDF)--简介

    注:对于ESP32开源技术感兴趣的可以加群,我们一起探索交流学习,群号:782473783.群名:ESP32开源技术交流群. 您可能已经知道Espressif制造的esp8266,wifi芯片.它在2 ...

  2. 曲鸟全栈UI自动化教学(五):Selenium的键盘鼠标事件详解

    一.前言 在之前的教学中对于页面的操作只涉及到了两个:点击.输入:其实Selenium的键盘鼠标操作还有很多,现在就为你一一讲解. [Python测试交流群:8140 78962] 文章目录 一.前言 ...

  3. 【教学案例】Baxter应用于工程专业新生教学的实践赏析

    通过Baxter数字孪生的练习来训练机器人操作技能 IgorVerner.DanCuperman.SergeyGamer.AlexPolishukTechnion--以色列理工学院 摘要:这项研究探索 ...

  4. 从零开始学习机器学习五:决策树算法特征工程

    决策树&特征工程 目标 1 简介 1.1 认识决策树 2 分类原理 2.1 熵 2.2 决策树的划分依据一-信息增益 2.3 决策树的划分依据二-信息增益率 2.4 决策树的划分依据三-基尼值 ...

  5. 一级造价工程师(安装)- 计量笔记 - 第五章第二节通风空调工程

    一.不定项选择题 1.下列选项中,属于通风系统组成部分的有(送风系统.排风系统). 通风系统分为送风系统和排风系统.送风系统是将清洁空气送入室内,排风系统是排除室内的污染气体. 2.自然通风是利用(风 ...

  6. CSR867x开发基础教学 - 新建CSR8675默认的sink工程

    如何新建一个csr8675默认的sink工程呢?csr8765比较繁琐,耐心跟着教程做. 基于我蓝牙网的开发板进行测试调试,新版的开发板体验很好,使用的是ADK4.2版本. 我所做的功能简介:差分模拟 ...

  7. 小学五年级计算机教学工作总结,小学五年级数学教师工作总结(精选8篇)

    小学五年级数学教师工作总结3 本学期,我担任五年级数学教学工作,我结合本班学生的实际情况,勤勤恳恳,兢兢业业,使教学工作有计划.有组织.有步骤地开展,圆满地完成了教学任务.现总结如下: 一.认真制定教 ...

  8. 五年级上册计算机教学工作计划,小学五年级上册信息技术教学工作计划(精选5篇)...

    小学五年级上册信息技术教学工作计划(精选5篇) 时光在流逝,从不停歇,我们的教学工作又将翻开新的一页,是时候写一份详细的教学计划了.好的教学计划都具备一些什么特点呢?以下是小编为大家整理的小学五年级上 ...

  9. ESP32 开发笔记(五)XPT2046 触摸

    ESP32 Touch TFT GitHub地址:工程源码 该工程时使用了 lcd.xpt2046.esp32 实现了触摸屏基础功能 编译.运行 请参考 esp-idf 的工程配置与运行

  10. ESP32 (Timer)-定时器学习(7)

    提示:本博客作为学习笔记,有错误的地方希望指正 文章目录 一.ESP32定时器介绍 1.1.概述 1.2.使用esp_timer api 1.3.回调函数 1.4.esp_timer在浅睡眠期间 1. ...

最新文章

  1. python3笔记_python3 笔记
  2. 来自社区的Visual Studio Code使用体验和教程
  3. mysql 隔离级别和锁相关
  4. 阿里云时空数据库引擎HBase Ganos上线,场景、功能、优势全解析
  5. l1范数最小化快速算法【文献阅读】
  6. 我的一个特点:数据处理能力还可以,但是数据规律记忆能力有限
  7. C# winform中判断控件类型
  8. 查看ie保存的表单_小学信息技术gt;搜索保存网页教师资格证面试模板
  9. 计算机电路基础填空题,计算机电路基础期末复习练习题.doc
  10. java inner class_Java Inner Class 内部类
  11. 微pe Linux,微PE工具箱 v2.1 正式版
  12. [Bug]Superset通过pyhive连接Spark SQL表名获取失败
  13. 附件无法上传怎么办?
  14. Python正则表达式和re模块,完美匹配中文与中文标点符号
  15. 跨境电商亚马逊运营的五大小技巧你都知道哪些
  16. python与分形0004 - 带刺的圆
  17. swoole基础教程-1.简介
  18. 树莓派创建文件夹权限不够_Linux或树莓派3——挂载U盘、移动硬盘并设置rwx权限...
  19. 给chrome浏览器设置壁纸
  20. 使用evo工具评估ORB_SLAM2在TUM数据集上的运行轨迹

热门文章

  1. NR/5G - SUL
  2. MMM金融互助平台崩盘了,你当接盘侠了没?
  3. 下载360图片(一)
  4. php 查看nts,nts | php教程|php源码|php学习
  5. Apollo入门课程04-感知
  6. [转载]AP_INVOICES_ALL应付发票表详解
  7. php织梦源码安装,如何安装网上下载的织梦源码
  8. JavaScript 引用数据类型
  9. ros实验操作——订阅者Subscriber的编程实现
  10. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(二)