2024-03-28 12:19:52 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @file soc_shell_base.c
|
|
|
|
|
|
* @author LokLiang
|
|
|
|
|
|
* @brief 仅被 soc_shell.c 所包含,完成子命令列表及功能
|
|
|
|
|
|
* @version 0.1
|
|
|
|
|
|
* @date 2023-09-15
|
|
|
|
|
|
*
|
|
|
|
|
|
* @copyright Copyright (c) 2023
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __SOC_SHELL_BASE_C__
|
|
|
|
|
|
#define __SOC_SHELL_BASE_C__
|
|
|
|
|
|
|
|
|
|
|
|
#include "shell/sh.h"
|
|
|
|
|
|
#include "esp_heap_caps.h"
|
|
|
|
|
|
#include "spi_flash_mmap.h"
|
|
|
|
|
|
#include "esp_flash.h"
|
|
|
|
|
|
#include "esp_chip_info.h"
|
|
|
|
|
|
#include "task.h"
|
|
|
|
|
|
|
|
|
|
|
|
/* Unsigned integers. */
|
2025-02-26 14:23:57 +08:00
|
|
|
|
#ifndef PRIu8
|
2024-03-28 12:19:52 +08:00
|
|
|
|
#define PRIu8 "u"
|
2025-02-26 14:23:57 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef PRIu16
|
2024-03-28 12:19:52 +08:00
|
|
|
|
#define PRIu16 "u"
|
2025-02-26 14:23:57 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef PRIu32
|
2024-03-28 12:19:52 +08:00
|
|
|
|
#define PRIu32 "u"
|
2025-02-26 14:23:57 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef PRIu64
|
2024-03-28 12:19:52 +08:00
|
|
|
|
#define PRIu64 __PRI64_PREFIX "u"
|
2025-02-26 14:23:57 +08:00
|
|
|
|
#endif
|
2024-03-28 12:19:52 +08:00
|
|
|
|
|
|
|
|
|
|
SH_CMD_FN(_base_free);
|
|
|
|
|
|
SH_CMD_FN(_base_heap);
|
|
|
|
|
|
SH_CMD_FN(_base_version);
|
|
|
|
|
|
SH_CMD_FN(_base_tasks);
|
|
|
|
|
|
SH_CMD_FN(_base_restart);
|
|
|
|
|
|
|
|
|
|
|
|
SH_DEF_SUB_CMD(
|
|
|
|
|
|
sub_soc_base,
|
|
|
|
|
|
#ifdef CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
|
|
|
|
|
|
SH_SETUP_CMD("tasks", "Get information about running tasks", _base_tasks, NULL), //
|
|
|
|
|
|
#endif
|
|
|
|
|
|
SH_SETUP_CMD("free", "Get the current size of free heap memory", _base_free, NULL), //
|
|
|
|
|
|
SH_SETUP_CMD("heap", "Get minimum size of free heap memory that was available during program execution", _base_heap, NULL), //
|
|
|
|
|
|
SH_SETUP_CMD("version", "Get version of chip and SDK", _base_version, NULL), //
|
|
|
|
|
|
SH_SETUP_CMD("restart", "Software reset of the chip", _base_restart, NULL), //
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
SH_CMD_FN(_base_free)
|
|
|
|
|
|
{
|
|
|
|
|
|
sh_echo(sh_hdl, "当前堆内存空闲大小: %d bytes\r\n", esp_get_free_heap_size());
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SH_CMD_FN(_base_heap)
|
|
|
|
|
|
{
|
|
|
|
|
|
sh_echo(sh_hdl, "当前堆内存最少剩余: %d bytes\r\n", heap_caps_get_minimum_free_size(MALLOC_CAP_DEFAULT));
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SH_CMD_FN(_base_version)
|
|
|
|
|
|
{
|
|
|
|
|
|
const char *model;
|
|
|
|
|
|
esp_chip_info_t info;
|
|
|
|
|
|
uint32_t flash_size;
|
|
|
|
|
|
esp_chip_info(&info);
|
|
|
|
|
|
|
|
|
|
|
|
switch (info.model)
|
|
|
|
|
|
{
|
|
|
|
|
|
case CHIP_ESP32:
|
|
|
|
|
|
model = "ESP32";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case CHIP_ESP32S2:
|
|
|
|
|
|
model = "ESP32-S2";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case CHIP_ESP32S3:
|
|
|
|
|
|
model = "ESP32-S3";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case CHIP_ESP32C3:
|
|
|
|
|
|
model = "ESP32-C3";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case CHIP_ESP32H2:
|
|
|
|
|
|
model = "ESP32-H2";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case CHIP_ESP32C2:
|
|
|
|
|
|
model = "ESP32-C2";
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
model = "Unknown";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (esp_flash_get_size(NULL, &flash_size) != ESP_OK)
|
|
|
|
|
|
{
|
|
|
|
|
|
sh_echo(sh_hdl, "Get flash size failed");
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
sh_echo(sh_hdl, "IDF Version:%s\r\n", esp_get_idf_version());
|
|
|
|
|
|
sh_echo(sh_hdl, "Chip info:\r\n");
|
|
|
|
|
|
sh_echo(sh_hdl, "\tmodel:%s\r\n", model);
|
|
|
|
|
|
sh_echo(sh_hdl, "\tcores:%d\r\n", info.cores);
|
|
|
|
|
|
sh_echo(sh_hdl, "\tfeature:%s%s%s%s%" PRIu32 "%s\r\n",
|
|
|
|
|
|
info.features & CHIP_FEATURE_WIFI_BGN ? "/802.11bgn" : "",
|
|
|
|
|
|
info.features & CHIP_FEATURE_BLE ? "/BLE" : "",
|
|
|
|
|
|
info.features & CHIP_FEATURE_BT ? "/BT" : "",
|
|
|
|
|
|
info.features & CHIP_FEATURE_EMB_FLASH ? "/Embedded-Flash:" : "/External-Flash:",
|
|
|
|
|
|
flash_size / (1024 * 1024), " MB");
|
|
|
|
|
|
sh_echo(sh_hdl, "\trevision number:%d\r\n", info.revision);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SH_CMD_FN(_base_tasks)
|
|
|
|
|
|
{
|
|
|
|
|
|
#ifdef CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
|
|
|
|
|
|
const size_t bytes_per_task = 40; /* see vTaskList description */
|
|
|
|
|
|
char *task_list_buffer = malloc(uxTaskGetNumberOfTasks() * bytes_per_task);
|
|
|
|
|
|
if (task_list_buffer == NULL)
|
|
|
|
|
|
{
|
|
|
|
|
|
sh_echo(sh_hdl, "failed to allocate buffer for vTaskList output\r\n");
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
sh_echo(sh_hdl, "Task Name\tStatus\tPrio\tHWM\tTask#", stdout);
|
|
|
|
|
|
#ifdef CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID
|
|
|
|
|
|
sh_echo(sh_hdl, "\tAffinity", stdout);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
sh_echo(sh_hdl, "\r\n", stdout);
|
|
|
|
|
|
vTaskList(task_list_buffer);
|
|
|
|
|
|
sh_echo(sh_hdl, task_list_buffer, stdout);
|
|
|
|
|
|
|
|
|
|
|
|
sh_echo(sh_hdl, "Task_Name\tRun_Cnt\t\tUsage_Rate\r\n", stdout);
|
|
|
|
|
|
vTaskGetRunTimeStats(task_list_buffer);
|
|
|
|
|
|
sh_echo(sh_hdl, task_list_buffer, stdout);
|
|
|
|
|
|
|
|
|
|
|
|
free(task_list_buffer);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SH_CMD_FN(_base_restart)
|
|
|
|
|
|
{
|
|
|
|
|
|
esp_restart();
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|