一、关闭文件系统,加入SD卡文件
先把文件系统关掉,把CMakeList里和app_main里注释掉
#spiffs_create_partition_image(storage ../spiffs_image FLASH_IN_PROJECT)
把sd卡驱动和配套的cmd驱动放进自己的工程的component里
上述文件添加过后,在main.c文件里,包含cmd和sd卡的头文件,并初始化
void app_main(void)
{
init_Sdcard();
cmd_esp32_init();
}
编译后
出现这个报错是没有添加console配置,没有定义 CONFIG_CONSOLE_MAX_COMMAND_LINE_LENGTH;
二、添加console配置
在idf环境路径下可以找到
C:\Espressif\frameworks\esp-idf-v4.4.4\examples\system\console\basic\main
把 Kconfig.projbuild 文件放进自己工程的main文件夹里,用来保存cmd的历史命令
已经更新到工程里了,再次编译下载
可以运行
三、导入测试代码
static int sys_stack_cmd(int argc, char **argv)//获取任务栈
{
char *CPU_RunInfo;
CPU_RunInfo = malloc(512);
if( CPU_RunInfo == NULL )
{
ESP_LOGE( "SYS", "内存申请失败" );
}
memset(CPU_RunInfo,0,512); //信息缓冲区清零
cmd_printf("---------------获取系统堆信息----------------\r\n");
cmd_printf("current size of free heap memory: %u\n", esp_get_free_heap_size());
cmd_printf("min heap size : %u\n", heap_caps_get_minimum_free_size(MALLOC_CAP_DEFAULT));
vTaskList((char *)CPU_RunInfo); //获取任务运行时间信息
// cmd_printf("---------------------------------------------\r\n");
// cmd_printf("X:running B:blocked R:ready D:deleted S:suspended\r\n");
cmd_printf("---------------------------------------------\r\n");
cmd_printf("任务名 任务状态 优先级 剩余栈 任务序号\r\n");
cmd_printf("%s", CPU_RunInfo);
cmd_printf("---------------------------------------------\r\n");
free( CPU_RunInfo );
return 0;
}
static int sys_used_cmd(int argc, char **argv)//获取任务使用率
{
char *CPU_RunInfo;
CPU_RunInfo = malloc(512);
if( CPU_RunInfo == NULL )
{
ESP_LOGE( "SYS", "内存申请失败" );
}
memset(CPU_RunInfo,0,512); //信息缓冲区清零
vTaskGetRunTimeStats((char *)CPU_RunInfo);
cmd_printf("任务名 运行计数 利用率\r\n");
cmd_printf("%s", CPU_RunInfo);
cmd_printf("---------------------------------------------\r\n\n");
free( CPU_RunInfo );
return 0;
}
void app_main(void)
{
init_Sdcard();
cmd_esp32_init();
CONSOLE_REGISTER( "sys_stack","获取各任务的栈使用率" ,NULL, sys_stack_cmd);
CONSOLE_REGISTER( "sys_used" ,"获取各任务的cpu使用率",NULL, sys_used_cmd);
// esp_vfs_spiffs_conf_t conf = {
// .base_path = "/spiffs",
// .partition_label = NULL,
// .max_files = 5,
// .format_if_mount_failed = false
// };
// // Use settings defined above to initialize and mount SPIFFS filesystem.
// // Note: esp_vfs_spiffs_register is an all-in-one convenience function.
// esp_err_t ret = esp_vfs_spiffs_register(&conf);
// if (ret != ESP_OK) {
// if (ret == ESP_FAIL) {
// ESP_LOGE(TAG, "Failed to mount or format filesystem");
// } else if (ret == ESP_ERR_NOT_FOUND) {
// ESP_LOGE(TAG, "Failed to find SPIFFS partition");
// } else {
// ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));
// }
// return;
// }
// size_t total = 0, used = 0;
// ret = esp_spiffs_info(NULL, &total, &used);
// if (ret != ESP_OK) {
// ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret));
// } else {
// ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);
// }
// xTaskCreate(&lv_task, "lv_task", 1024*8, NULL, 5, NULL);
}
同时,需要配置FreeRTOS,进入menuconfig,勾选上下列配置
编译下载成功