首先感谢B站up主小智-学长提供的优质开源项目并且还有详细的视频、文档教学。视频教学包括硬件设计、软件设计和外壳结构的设计,视频的链接如下:
【有手就行系列】嵌入式单片机教程-桌面小屏幕实战教学 从设计、硬件、焊接到代码编写、调试 ESP32 持续更新2022【有手就行系列】嵌入式单片机教程-桌面小屏幕实战教学 从设计、硬件、焊接到代码编写、调试 ESP32 持续更新2022_哔哩哔哩_bilibili
其中freertos的一些内容参考了这篇文章:(45条消息) FreeRTOS系列第18篇---FreeRTOS队列API函数_研究是为了理解的博客-CSDN博客,博主关于freertos系列的文章都很棒,有兴趣的朋友可以学习下。
DesktopScreenDemoV4.0.0的源码可以在小智学长的线上文档中下载到Docs (feishu.cn)。
此文主要用于个人学习成果的检验,如果能帮助到像我一样的初学者那就更好了。如果有理解错的或者写得不够好的地方,希望各位大佬不吝赐教,小弟一定虚心学习!
DesktopScreenDemoV4.0.0 app_main.c文件中对桌面小屏幕的功能实现用到了三个函数,所以我计划把项目代码分成三篇文章来进行分享,主要分成三个部分,sleep_mode_init()函数、background_task(void* arg)函数和app_main函数。这一节与大家一起学习的是app_main函数的内容。
app_main函数是DesktopScreen的主函数,因为函数内容过多,我将分成多篇文章来分享。
本篇文章介绍的这部分代码是通过调用esp32官方的API函数获取板卡的相关信息并进行打印和一些系统数据的初始化,有兴趣的朋友可以自己阅读下API参考手册。
printf("----- app start! -----\n");
/* Print chip information */
esp_chip_info_t chip_info;
esp_chip_info(&chip_info);
printf("This is %s chip with %d CPU cores, WiFi%s%s, ",
CHIP_NAME,
chip_info.cores,
(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),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
1.系统数据的初始化。
1.1初始化结构体存储空间;
1.2初始化http首次数据请求标志位为真;
1.3初始化http刷新数据请求标志位为否;
1.4初始化http是否有数据信息标志位为否;
1.5初始化系统时间,小时为10;
1.6初始化系统时间,分钟为10;
void ds_system_data_init(){
memset(&g_system_data,0,sizeof(SYSTRM_DATA_T)); 1.1
g_system_data.first_time_httpdata_request = true; 1.2
g_system_data.update_httpdata_request = false; 1.3
g_system_data.has_wifi_info = false; 1.4
g_system_data.hour = 10; 1.5
g_system_data.minute = 10; 1.6
}
补充: ESP_ERROR_CHECK函数是一个调用_esp_error_check_failed函数的宏,用于检查代码是否有错误,并且在代码不是ESP_OK的情况下下终止程序。打印错误代码、错误位置和失败语句到串行输出。如果断言被禁用,则禁用。
#define ESP_ERROR_CHECK(x) do { \
esp_err_t err_rc_ = (x); \
if (unlikely(err_rc_ != ESP_OK)) { \
_esp_error_check_failed(err_rc_, __FILE__, __LINE__, \
__ASSERT_FUNC, #x); \
} \
} while(0)
2.初始化默认NVS分区。默认NVS分区是分区表中标记为“NVS”的分区。当menuconfig中的NVS_ENCRYPTION(NVS的加密模式)开启时,此API为默认NVS分区启用NVS加密,如下所示:1.从分区表中的第一个NVS密钥分区读取安全配置(NVS密钥分区是任何子类型设置为"NVS_keys"的“数据”类型分区)2.如果在上一步骤中获得的NVS密钥部分为空,生成并存储新密钥到NVS密钥分区。3.内部调用nvs_flash_secure_init()在先前步骤中获得或生成安全配置。函数原型如下,详细信息见nvs_flash.h中的函数说明和返回值说明。
esp_err_t nvs_flash_init(void);
3.初始化底层TCP/IP栈。在应用程序启动时,此函数必须至少在程序中调用一次。
![](https://img-blog.csdnimg.cn/img_convert/58c73bb4724271a831090779a934a9c1.png)
4.创建默认事件循环。
![](https://img-blog.csdnimg.cn/img_convert/7252f2c7b3854983fb90765559e05bc9.png)