ESP32开发之路(2)--- HelloWorld工程分析和优化

ESP32开发之路(2)— HelloWorld工程优化和分析

本次开发是在Ubuntu下的,使用的模块是ESP32,使用VSCode查看编辑项目。在上一个工程:ESP32开发之路(1)— 基于idf框架的HelloWorld工程 上进行使用VSCode编辑器进行开发的优化

一、安装Visual Studio Code

参考Visual Studio Code的使用即可

二、使用VSCode编辑项目

esp-idf下新建文件夹MyProject,把esp-idf里面的\examples\get-started的整个文件夹hello_world拷贝到MyProject里面;
在这里插入图片描述
打开VSCode,选择文件,打开文件夹
在这里插入图片描述
选择esp-idf的目录,点击OK确定
在这里插入图片描述
然后打开MyProject/hello_world下的hello_world_main.c,可以看到:
在这里插入图片描述
然后点击hello_world文件夹,右击,在终端中打开
在这里插入图片描述
然后再终端中执行make all,编译成功
在这里插入图片描述
然后使用make flash下载,记住下载时按住BOOT
在这里插入图片描述
然后可以用make monitor命令监听串口
在这里插入图片描述
然后点击【文件】->【将工作区另存为…】
在这里插入图片描述
保存再hello_world文件夹下
在这里插入图片描述

三、工程分析

1、Makefile

我们打开hello_world文件夹下的Makeflie,可以看到,很简单的两行:
在这里插入图片描述
其中PROJECT_NAME变量是项目名称,最终输出的二进制文件也使用该名称,比如这个工程,我们在build目录下可以看到hello-world.binhello-world.elf这两个文件
在这里插入图片描述
然后是include $(IDF_PATH)/make/project.mk,他会导入核心 Makefile 文件,由它负责实现 ESP-IDF 构建系统的剩余部分。

2、hello_world_main.c

hello_world_main.c中的app_mian()函数就是RTOS的主任务,如果 app_main 函数返回,那么主任务将会被删除。主任务的堆栈大小和优先级可以在 menuconfig 中进行配置。应用程序可以用此任务来完成用户程序相关的初始化设置,比如启动其他的任务。应用程序还可以将主任务用于事件循环和其他通用活动。

void app_main(void)
{
    /* 打印Hello world! */
    printf("Hello world!\n");

    /* Print chip information  打印芯片信息*/
    esp_chip_info_t chip_info;  /* 芯片信息 结构体*/
    esp_chip_info(&chip_info);  /* 获取芯片信息,存储在chip_info结构体内*/
    printf("This is %s chip with %d CPU cores, WiFi%s%s, ",             /* 打印芯片信息*/
            CONFIG_IDF_TARGET,                                          /* 芯片型号*/
            chip_info.cores,                                            /* CPU核心数*/
            (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",        /* 是否具有蓝牙功能*/
            (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");     /* 是否具有低功耗蓝牙功能*/

    printf("silicon revision %d, ", chip_info.revision);                /* 芯片版本号*/

    printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),/* flash容量 */
            (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external"); /* 是否是内部flash*/

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);          /* 延时1000ms,即1s*/
    }
    printf("Restarting now.\n");
    fflush(stdout);         /* 清空输出缓冲区,就会立刻输出所有在缓冲区的内容 */
    esp_restart();          /* 芯片复位 */               
}

我们可以看到提示头文件找不到,
在这里插入图片描述
我们打开.vscode下的c_cpp_properties.json,在"includePath"下添加交叉编译工具链的include文件夹
在这里插入图片描述
这样报错就没有了
在这里插入图片描述

三、工具链警告

我们在编译的时候,在开始会看到,工具链不适配的提示:
在这里插入图片描述
我在乐鑫的论坛上看到是说,工具链的更新走在了源码更新的前面,虽然好像编译也没什么问题,但为了怕以后出现什么意想不到的情况,我们把工具链换成提示的版本esp-2019r2,下载地址:
https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz
替换之后再重新编译,警告已经没有了
在这里插入图片描述

发布了62 篇原创文章 · 获赞 13 · 访问量 5572

猜你喜欢

转载自blog.csdn.net/qq_38113006/article/details/105422684
今日推荐