ESP32原生开发——小智AI解析1(main.cc)
#include <esp_log.h> #include <esp_err.h> #include <nvs.h> //nvs储存区 #include <nvs_flash.h> #include <driver/gpio.h> #include <esp_event.h> //关于ESPIDF框架内ESP32的event库 #include "application.h" //application库 #include "system_info.h" #define TAG "main" //TAG,但是找不到应用方式
extern "C" void app_main(void) { // 初始化默认事件循环 ESP_ERROR_CHECK(esp_event_loop_create_default());
extern "C":这是C++中的链接指示符,用于告诉编译器按照C语言的方式处理函数名。因为ESP-IDF(ESP32的官方开发框架)是用C语言编写的,所以需要使用 extern "C" 来确保C++编译器不会对函数名进行名称修饰(name mangling)。
app_main:这是ESP-IDF应用程序的入口函数,类似于C语言中的 main 函数。当系统启动时,app_main 会被自动调用。
// Initialize the default event loop ESP_ERROR_CHECK(esp_event_loop_create_default());
ESP_ERROR_CHECK:这是一个宏,用于检查函数返回值是否为ESP_OK。如果返回值不是ESP_OK,则会打印错误信息并终止程序。- 类似assert
esp_event_loop_create_default后面的文章中会重新写明
// Initialize NVS flash for WiFi configuration esp_err_t ret = nvs_flash_init(); //初始化NVS(Non-Volatile Storage)闪存。NVS用于存储持久化数据,如WiFi配置、设备配置等。 if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { //这两个错误码表示NVS闪存可能已损坏或版本不兼容。在这种情况下,代码会擦除NVS闪存并重新初始化。 ESP_LOGW(TAG, "Erasing NVS flash to fix corruption"); //打印日志 ESP_ERROR_CHECK(nvs_flash_erase()); //和上面一样 ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); //再次检查NVS闪存初始化是否成功
再次使用到了ESP_ERROR_CHECK
这部分代码似乎可以移植到其它项目中使用
// Launch the application Application::GetInstance().Start(); }
Application::GetInstance().Start():这行代码调用了一个单例类Application的Start方法,启动应用程序的主要逻辑。GetInstance()是单例模式的常见实现方式,确保只有一个Application实例。
这部分代码也会在后面的文章中继续解析
在某些文章中还有
while (true) { vTaskDelay(10000 / portTICK_PERIOD_MS); // SystemInfo::PrintRealTimeStats(pdMS_TO_TICKS(1000)); int free_sram = heap_caps_get_free_size(MALLOC_CAP_INTERNAL); int min_free_sram = heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL); ESP_LOGI(TAG, "Free internal: %u minimal internal: %u", free_sram, min_free_sram); }
while (true):这是一个无限循环,用于定期执行某些任务。
vTaskDelay(10000 / portTICK_PERIOD_MS):让当前任务(Task)延迟10秒。portTICK_PERIOD_MS 是FreeRTOS中表示每个tick的毫秒数。
heap_caps_get_free_size(MALLOC_CAP_INTERNAL):获取当前内部SRAM(静态随机存取存储器)的可用内存大小。
heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL):获取内部SRAM的最小可用内存大小(即系统运行过程中内存使用的最低点)。
ESP_LOGI(TAG, "Free internal: %u minimal internal: %u", free_sram, min_free_sram):打印日志,显示当前和最小可用内存大小。
浙公网安备 33010602011771号