#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"

void app_main(void)
{
    printf("Hello world!\n");

    /* Print chip information */
    esp_chip_info_t chip_info;
    esp_chip_info(&chip_info);

定义变量 chip_info并调用 esp_chip_info得到芯片信息。其中包括芯片版本,CPU内核的数量以及芯片中启用的功能的位掩码。

esp_chip_info定义在 esp_system.h中。

    printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",
            CONFIG_IDF_TARGET,
            chip_info.cores,
            (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
            (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");

    printf("silicon revision %d, ", chip_info.revision);

打印在IDF中设置的目标芯片名称、内核数、是否支持BT或BLE以及芯片版本。

需要将 features与对应的常量按位与才能知道对应的特性;通过三目运算符判断是否输出BT/BLE。

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

打印menuconfig中设置的 flash 芯片容量(以字节为单位),并指明flash为内置的还是外置的。

spi_flash_get_chip_size()定义在 esp_spi_flash.h中。

    printf("Minimum free heap size: %d bytes\n", esp_get_minimum_free_heap_size());

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("Restarting now.\n");
    fflush(stdout);
    esp_restart();
}

esp_get_minimum_free_heap_size()用于查询整个过程中可用的最小堆内存大小(例如应用程序生命周期内可用的最小堆内存大小)。定义在 esp_system.h

for循环11次,每次打印一次信息、执行一次 vTaskDelay

vTaskDelay延时给定数量的时间片,portTICK_PERIOD_MS表示一个时间片对应的毫秒数,默认为1ms。即这个语句延时1s。定义在 freertos/task.h

fflush(stdout)表示立即将缓存的中的数据输出。

esp_restart();:用于执行芯片的软件复位。调用此函数时,程序停止执行,两个 CPU 复位,应用程序由 bootloader 加载并重启。esp_restart()在 esp_system.h 中定义

最后修改:2023 年 05 月 07 日
如果觉得我的文章对你有用,请随意赞赏