ESP32 之 ESP-IDF 教学(五(2))——使用C++的工程
本文章 来自原创专栏《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.txt
和main.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++的工程相关推荐
- ESP32开发学习(IDF)--简介
注:对于ESP32开源技术感兴趣的可以加群,我们一起探索交流学习,群号:782473783.群名:ESP32开源技术交流群. 您可能已经知道Espressif制造的esp8266,wifi芯片.它在2 ...
- 曲鸟全栈UI自动化教学(五):Selenium的键盘鼠标事件详解
一.前言 在之前的教学中对于页面的操作只涉及到了两个:点击.输入:其实Selenium的键盘鼠标操作还有很多,现在就为你一一讲解. [Python测试交流群:8140 78962] 文章目录 一.前言 ...
- 【教学案例】Baxter应用于工程专业新生教学的实践赏析
通过Baxter数字孪生的练习来训练机器人操作技能 IgorVerner.DanCuperman.SergeyGamer.AlexPolishukTechnion--以色列理工学院 摘要:这项研究探索 ...
- 从零开始学习机器学习五:决策树算法特征工程
决策树&特征工程 目标 1 简介 1.1 认识决策树 2 分类原理 2.1 熵 2.2 决策树的划分依据一-信息增益 2.3 决策树的划分依据二-信息增益率 2.4 决策树的划分依据三-基尼值 ...
- 一级造价工程师(安装)- 计量笔记 - 第五章第二节通风空调工程
一.不定项选择题 1.下列选项中,属于通风系统组成部分的有(送风系统.排风系统). 通风系统分为送风系统和排风系统.送风系统是将清洁空气送入室内,排风系统是排除室内的污染气体. 2.自然通风是利用(风 ...
- CSR867x开发基础教学 - 新建CSR8675默认的sink工程
如何新建一个csr8675默认的sink工程呢?csr8765比较繁琐,耐心跟着教程做. 基于我蓝牙网的开发板进行测试调试,新版的开发板体验很好,使用的是ADK4.2版本. 我所做的功能简介:差分模拟 ...
- 小学五年级计算机教学工作总结,小学五年级数学教师工作总结(精选8篇)
小学五年级数学教师工作总结3 本学期,我担任五年级数学教学工作,我结合本班学生的实际情况,勤勤恳恳,兢兢业业,使教学工作有计划.有组织.有步骤地开展,圆满地完成了教学任务.现总结如下: 一.认真制定教 ...
- 五年级上册计算机教学工作计划,小学五年级上册信息技术教学工作计划(精选5篇)...
小学五年级上册信息技术教学工作计划(精选5篇) 时光在流逝,从不停歇,我们的教学工作又将翻开新的一页,是时候写一份详细的教学计划了.好的教学计划都具备一些什么特点呢?以下是小编为大家整理的小学五年级上 ...
- ESP32 开发笔记(五)XPT2046 触摸
ESP32 Touch TFT GitHub地址:工程源码 该工程时使用了 lcd.xpt2046.esp32 实现了触摸屏基础功能 编译.运行 请参考 esp-idf 的工程配置与运行
- ESP32 (Timer)-定时器学习(7)
提示:本博客作为学习笔记,有错误的地方希望指正 文章目录 一.ESP32定时器介绍 1.1.概述 1.2.使用esp_timer api 1.3.回调函数 1.4.esp_timer在浅睡眠期间 1. ...
最新文章
- python3笔记_python3 笔记
- 来自社区的Visual Studio Code使用体验和教程
- mysql 隔离级别和锁相关
- 阿里云时空数据库引擎HBase Ganos上线,场景、功能、优势全解析
- l1范数最小化快速算法【文献阅读】
- 我的一个特点:数据处理能力还可以,但是数据规律记忆能力有限
- C# winform中判断控件类型
- 查看ie保存的表单_小学信息技术gt;搜索保存网页教师资格证面试模板
- 计算机电路基础填空题,计算机电路基础期末复习练习题.doc
- java inner class_Java Inner Class 内部类
- 微pe Linux,微PE工具箱 v2.1 正式版
- [Bug]Superset通过pyhive连接Spark SQL表名获取失败
- 附件无法上传怎么办?
- Python正则表达式和re模块,完美匹配中文与中文标点符号
- 跨境电商亚马逊运营的五大小技巧你都知道哪些
- python与分形0004 - 带刺的圆
- swoole基础教程-1.简介
- 树莓派创建文件夹权限不够_Linux或树莓派3——挂载U盘、移动硬盘并设置rwx权限...
- 给chrome浏览器设置壁纸
- 使用evo工具评估ORB_SLAM2在TUM数据集上的运行轨迹