fix: stop network tasks cleanly on restart

This commit is contained in:
2026-04-29 04:36:01 +08:00
parent ac0c464910
commit 60d2af0a27
4 changed files with 214 additions and 12 deletions
+69
View File
@@ -37,6 +37,8 @@ static TaskHandle_t xTcpCliTaskC1Handle = NULL;
static TaskHandle_t xTcpCliTaskC2Handle = NULL;
static TaskHandle_t xDefaultTaskHandle = NULL;
static BaseType_t xNetworkTasksStarted = pdFALSE;
static volatile BaseType_t xNetworkTaskStopRequested = pdFALSE;
static volatile BaseType_t xNetworkRestartRequested = pdFALSE;
void app_start_network_tasks(void)
{
@@ -49,6 +51,11 @@ void app_start_network_tasks(void)
return;
}
if (xNetworkTaskStopRequested != pdFALSE) {
debug_log_write("[NET] start-network-tasks stop-pending\r\n");
return;
}
cfg = config_get();
debug_log_printf("[NET] start-network-tasks enter free=%lu min=%lu\r\n",
@@ -107,6 +114,68 @@ void app_start_network_tasks(void)
#endif
}
void app_request_network_task_stop(void)
{
xNetworkTaskStopRequested = pdTRUE;
}
void app_clear_network_task_stop(void)
{
xNetworkTaskStopRequested = pdFALSE;
}
BaseType_t app_network_task_stop_requested(void)
{
return xNetworkTaskStopRequested;
}
BaseType_t app_network_tasks_are_stopped(void)
{
return (xTcpSrvTaskS1Handle == NULL &&
xTcpSrvTaskS2Handle == NULL &&
xTcpCliTaskC1Handle == NULL &&
xTcpCliTaskC2Handle == NULL) ? pdTRUE : pdFALSE;
}
void app_on_network_task_exit(TaskHandle_t task_handle)
{
taskENTER_CRITICAL();
if (task_handle == xTcpSrvTaskS1Handle) {
xTcpSrvTaskS1Handle = NULL;
} else if (task_handle == xTcpSrvTaskS2Handle) {
xTcpSrvTaskS2Handle = NULL;
} else if (task_handle == xTcpCliTaskC1Handle) {
xTcpCliTaskC1Handle = NULL;
} else if (task_handle == xTcpCliTaskC2Handle) {
xTcpCliTaskC2Handle = NULL;
}
if (xTcpSrvTaskS1Handle == NULL &&
xTcpSrvTaskS2Handle == NULL &&
xTcpCliTaskC1Handle == NULL &&
xTcpCliTaskC2Handle == NULL) {
xNetworkTasksStarted = pdFALSE;
}
taskEXIT_CRITICAL();
}
void app_request_network_restart(void)
{
xNetworkRestartRequested = pdTRUE;
}
void app_clear_network_restart_request(void)
{
xNetworkRestartRequested = pdFALSE;
}
BaseType_t app_network_restart_requested(void)
{
return xNetworkRestartRequested;
}
static void StartDefaultTask(void *argument)
{
BaseType_t iwdg_ready = pdFALSE;