}\r
}\r
\r
+static void pm_print_active_veto_info(void)\r
+{\r
+ uint8_t i = 0;\r
+ uint8_t active_count = 0;\r
+ pm_veto_t *pm_veto_ptr = pm_veto_get_info();\r
+ \r
+ wstp_print("========== PM Active Veto Info ==========\r\n");\r
+ wstp_print("Total votes: %d\r\n", pm_veto_ptr->veto_counts.total_counts);\r
+ \r
+ if (pm_veto_ptr->veto_counts.total_counts == 0) {\r
+ wstp_print("No active votes.\r\n");\r
+ } else {\r
+ wstp_print("Active votes:\r\n");\r
+ for (i = 0; i < PM_ID_MAX; i++) {\r
+ if (pm_veto_ptr->veto_counts.sub_counts[i] > 0) {\r
+ wstp_print(" [%d] %s: %d vote(s)\r\n", \r
+ i, \r
+ get_pm_id_name(i), \r
+ pm_veto_ptr->veto_counts.sub_counts[i]);\r
+ active_count++;\r
+ }\r
+ }\r
+ wstp_print("Total active modules: %d\r\n", active_count);\r
+ }\r
+ \r
+ if (pm_veto_ptr->veto_timeout_timestamp > 0) {\r
+ wstp_print("Veto timeout timestamp: %llu ms\r\n", pm_veto_ptr->veto_timeout_timestamp);\r
+ }\r
+ \r
+ wstp_print("========================================\r\n");\r
+}\r
+\r
static void lpc_print_veto_info(void)\r
{\r
uint8_t i = 0;\r
return ERRCODE_SUCC;\r
}\r
\r
+uint32_t mcu_pm_veto_get(uint8_t *para, uint32_t para_len)\r
+{\r
+ unused(para);\r
+ unused(para_len);\r
+\r
+ pm_print_active_veto_info();\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+uint32_t mcu_task_switch_print_ctrl(uint8_t *para, uint32_t para_len)\r
+{\r
+ unused(para_len);\r
+ \r
+ if (para == NULL) {\r
+ wstp_print("Usage: AT^TASKSWITCHPRINT=<0|1>\r\n");\r
+ wstp_print(" 0: Disable task switch print\r\n");\r
+ wstp_print(" 1: Enable task switch print\r\n");\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ uint32_t enable = atoi((char*)para);\r
+ \r
+ extern void OsTaskSwitchPrintSetEnable(uint32_t enable);\r
+ OsTaskSwitchPrintSetEnable(enable);\r
+ \r
+ wstp_print("Task switch print %s\r\n", enable ? "enabled" : "disabled");\r
+ \r
+ return ERRCODE_SUCC;\r
+}\r
+\r
uint32_t mcu_pm_cldo1_power_down(uint8_t *para, uint32_t para_len)\r
{\r
unused(para);\r
{ PMMODESET, mcu_pm_req_mode },\r
{ PMMODEUSR, mcu_set_pm_req_mode_usr},\r
{ PMMODEGET, mcu_pm_dfx_mode },\r
+ { PMVETOGET, mcu_pm_veto_get },\r
+ { TASKSWITCHPRINT, mcu_task_switch_print_ctrl },\r
{ GETCURSEC, mcu_dfx_get_cur_second},\r
{ LCDFILL, lcd_fill },\r
{ GETIDS, get_ids },\r
return ERRCODE_SUCC;\r
}\r
\r
+static uint32_t app_test_pm_veto_get(uint8_t *para, uint32_t para_len, char *str_cmd)\r
+{\r
+ unused(str_cmd);\r
+ if (para == NULL) {\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ app_pkg_msg_send(PMVETOGET, DIAG_CONTROL_FALSE, para, para_len);\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+static uint32_t app_test_task_switch_print(uint8_t *para, uint32_t para_len, char *str_cmd)\r
+{\r
+ unused(str_cmd);\r
+ if (para == NULL) {\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ app_pkg_msg_send(TASKSWITCHPRINT, DIAG_CONTROL_FALSE, para, para_len);\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
static uint32_t app_test_pm_lcd_off(uint8_t *para, uint32_t para_len, char *str_cmd)\r
{\r
unused(str_cmd);\r
{ "AT^PMMODE", app_test_pm_req_mode, "" },\r
{ "AT^PMMODESETUSR", app_test_set_pm_req_mode, "" },\r
{ "AT^PMMODEGET", app_test_pm_dfx_mode, "" },\r
+ { "AT^PMVETOGET", app_test_pm_veto_get, "" },\r
+ { "AT^TASKSWITCHPRINT", app_test_task_switch_print, "" },\r
{ "AT^GETCURSEC", app_get_cur_second, "" },\r
{ "AT^LCDFILL", app_test_lcd_fill, "" },\r
{ "AT^LCDLIGHT", app_test_lcd_light, "" },\r
SCHEDSTART = 0x56,\r
SCHEDSTOP = 0x57,\r
SDIOTEST = 0x58,\r
+ PMVETOGET = 0x59, // 新增:获取PM投票信息\r
+ TASKSWITCHPRINT = 0x5A, // 新增:控制任务切换打印\r
MSG_ID_MAX_BUTT,\r
} app_msg_id;\r
\r
#define OS_ALL_TASK_MASK 0xFFFFFFFF
extern UINT32 OsDbgTskInfoGet(UINT32 taskId);
extern UINT32 OsGetIdleTaskId(VOID);
+
+/* Task switch print control */
+extern UINT32 OsTaskSwitchPrintIsEnabled(VOID);
+extern VOID OsTaskSwitchPrintSetEnable(UINT32 enable);
extern CHAR *OsCurTaskNameGet(VOID);
extern VOID OsTaskAdd2TimerList(LosTaskCB *taskCB, UINT32 timeout);
extern VOID OsTimerListDelete(LosTaskCB *taskCB);
#include "los_perf_pri.h"
#endif
+/* 全局变量:控制任务切换打印开关(默认关闭)*/
+static volatile UINT32 g_taskSwitchPrintEnable = 0;
+
+/* 获取任务切换打印开关状态 */
+UINT32 OsTaskSwitchPrintIsEnabled(VOID)
+{
+ return g_taskSwitchPrintEnable;
+}
+
+/* 设置任务切换打印开关 */
+VOID OsTaskSwitchPrintSetEnable(UINT32 enable)
+{
+ g_taskSwitchPrintEnable = enable ? 1 : 0;
+ if (enable) {
+ printf("[TASK_SWITCH] Task switch print enabled\n");
+ } else {
+ printf("[TASK_SWITCH] Task switch print disabled\n");
+ }
+}
+
VOID OsSchedResched(VOID)
{
LosTaskCB *runTask = NULL;
newTask->currCpu = ArchCurrCpuid();
#endif
+ /* 任务切换打印(由全局开关控制)*/
+ if (g_taskSwitchPrintEnable) {
+ const char *runTaskName = (runTask->taskName != NULL) ? runTask->taskName : "NULL";
+ const char *newTaskName = (newTask->taskName != NULL) ? newTask->taskName : "NULL";
+ printf("[TASK_SWITCH] %s(ID:%u) -> %s(ID:%u)\n",
+ runTaskName, runTask->taskId,
+ newTaskName, newTask->taskId);
+ }
+
OsTaskTimeUpdateHook(runTask->taskId);
#ifdef LOSCFG_KERNEL_CPUP