ESP-IDF 使用vscode创建例程

使用vscode创建例程

ESP-IDF:Show Examples Projects
选择例程,Create project using example hello_world
设置COM口 
linux 查看设备管理dev
cd /dev 
ls ttyS*   --ttyS0  
ttyS0是计算机串行接口 
ttyACM0是USB通信设备CDC   
ttyACM0就是COM1  ttyACM0就是COM2以此类推
下载提示“Pression denied”属于权限问题,原因是用户无dev权限。
    
提示权限不够,是因为用户没有/dev/tty 的访问权限,只需将用户添加到dialout组就可以解决权限不够的问题。
解决方法如下:
1.由于tty属于“dialout”组,比如用户名是qilin,
   用命令查看用户所属于的组别
   groups qilin
2.如果没有隶属“dialout”,则把该用户加入进去
   sudo gpasswd --add qinlin dialout
3.重新启动后,再登录系统就可以了。

VSCode 解决头文件红色波浪线

VSCode解决头文件有红色波浪线_vscode头文件红色波浪线_泠山的博客-CSDN博客

F1 —>>> ESP-IDF:Add vscode configuration folder

安装VMware Tools

虚拟机->重新安装vmtools

tar -zxvf VMwareTools-10.3.22-15902021.tar.gz 
sudo ./vmware-install.pl 
安装时注意查看提示信息,否则可能安装失败,安装成功会提示,Enjoy.
完成后就可以对文件进行复制粘贴

创建共享文件夹
查看虚拟文件夹
vmware-hgfsclient

如果出现vmware打开异常,重新删除安装文件,然后安装vmware tools
cd /usr/lib
sudo rm -r vmware-tools
cd /etc
sudo rm -r vmware-tools

开发乐鑫芯片

乐鑫开源 - Gitee.com

官方文档

Get Started — ADF 音频应用开发框架 文档 (espressif.com)

esp-skainet: ESP-Skainet 是乐鑫推出的智能语音助手,目前支持唤醒词识别和命令词识别。 (gitee.com)

vscode   sdk configuration editor    //SDK 配置

idf.py menuconfig                    //菜单配置

ESP-IDF介绍

工程结构介绍

(16条消息) ESP32 之 ESP-IDF 教学(五)——IDF工程项结构_esp idf_Augtons正(单片机)的博客-CSDN博客

博主其他文章写得也不错。

路径包含介绍-Cmake-list管理文件(基础应用)可参考lvgl官方库CM编写方法

ESP32-IDF中cmake文件管理(添加头文件 C文件 组件的方法)_哔哩哔哩_bilibili

CMake应用:CMakeLists.txt完全指南 - 知乎 (zhihu.com)

一般来说,编译目标(target)的类型一般有静态库、动态库和可执行文件。 这时编写CMakeLists.txt主要包括两步:

  1. 编译:确定编译目标所需要的源文件
  2. 链接:确定链接的时候需要依赖的额外的库

下面以开源项目(cmake-template)来演示。项目的目录结构如下:

./cmake-template
├── CMakeLists.txt
├── src
│   └── c
│       ├── cmake_template_version.h
│       ├── cmake_template_version.h.in
│       ├── main.c
│       └── math
│           ├── add.c
│           ├── add.h
│           ├── minus.c
│           └── minus.h
└── test
    └── c
        ├── test_add.c
        └── test_minus.

项目的构建任务为:

  1. 将math目录编译成静态库,命名为math
  2. 编译main.c为可执行文件demo,依赖math静态库
  3. 编译test目录下的测试程序,可以通过命令执行所有的测试
  4. 支持通过命令将编译产物安装及打包

工程使用idf hello word 模板

目录如下:

CMakeLists.txt (1)

main(FILE)

​ ----------CMakeList.txt (2)

​ ----------hello_world_main.c

pytest_hello_world.py

README.md

sdkconfig.ci


CMakeLists.txt (1)

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

CMakeLists.txt (2)

# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)     //添加了IDF环境路径下当前工程全部CMakeList.txt文件
project(hello_world)

*** 如果需要添加compoents ***

需要再目录中添加组件的CMakeList.txt

compoents

​ ----------CMakeList.txt

​ ----------component.mk

​ ----------test1.c

​ ----------test1.h

​ ----------filename(file)

CMakeList.txt 写法与解释

(16条消息) ESP32-添加多目录的自定义组件_idf_component_register_NULL_1969的博客-CSDN博客

file(GLOB_RECURSE SOURCES 		./*.c      			#包含当前文件夹路径下的C文件 ./*.cpp亦可 如同时包含.c和.cpp需要都包含入
								./*.cpp
								./filename/*.c		#包含当前文件夹路径下filename下的C文件,如没有此文件可以不需要此包含路径
								) 
#ChatGPT解释:								
# file(GLOB_RECURSE SOURCES ./*.c) 是一个 CMake 命令,用于获取指定目录下所有以 .c结尾的文件,并将它们保存在 SOURCES 变量中。
# idf_component_register 函数中的 SRCS 参数,以便注册这些源文件为组件的一部分。

idf_component_register(SRCS	${SOURCES}
                   INCLUDE_DIRS 
								.     				#找到当前文件夹(上述)路径的头文件
								./filename 			#找到当前文件夹路径下filename下的头文件,如没有此文件可以不包含此路径
                    REQUIRES    filename			#组件之间相关的调用关系,如有依赖关系填写需要包含的文件名,没有则为空。否则报错“未找到头文件”
					REQUIRES    filename1		                       
                    			)				

可自定义文件名(不建议,官方推荐默认COMPONENTS文件夹)
在(1)CMakeList.txt中添加:
set(EXTRA_COMPONENT_DIRS
./filename
)

IDF使用C++组件开发

ESP32 IDF支持C与C++同时编译。

1.新建.cpp文件

2.修改CMakeLists.txt

file(GLOB_RECURSE SOURCES 		./*.cpp		
                        ) 

3.在有使用C++函数的文件中使用以下函数可以使C语言与C++语言无缝兼容

#ifdef __cplusplus
extern "C" {
#endif

// 在此处放置 C 语言的函数声明和其他代码

#ifdef __cplusplus
}  // 注意此处只有一个 '}'
#endif


或者 extern "C" xxxfunc(void){};

#ChartGPT解释:
在 C++ 代码中使用 #ifdef __cplusplus 和 extern "C" 的作用是为了支持 C 与 C++ 之间的交互和兼容性。
    
当你在 C++ 环境中使用 C 语言的代码时,通常需要考虑 C++ 的名称修饰(name mangling)规则以及函数的链接规范。这是因为 C++ 使用了名称修饰来支持函数重载和命名空间等特性,并且 C++ 和 C 语言有不同的链接规范。
    
#ifdef __cplusplus 是一个预处理指令,用于检查是否处于 C++ 编译环境中。如果是,就会执行指令块内的代码。

extern "C" 是一个语言链接规范的指令,用于指定包含在其中的代码应使用 C 链接规范,而不是 C++ 的名称修饰规范。这样可以确保 C++ 编译器按照 C 的链接规范处理函数名称,以便正确链接 C 语言的函数。

通过将 C 语言的函数声明和其他相关代码放置在 #ifdef __cplusplus 和 extern "C" 块中,你可以在 C++ 代码中使用 C 语言的函数,并保持链接规范的一致性。

生成Demo-----------*** hello_world_cxx ***

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqtianxingkeji

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值