启动顺序管理

This commit is contained in:
2026-08-29 11:10:08 +08:00
parent 7bc616cf9b
commit 26c9098630
13 changed files with 351 additions and 84 deletions
+30 -1
View File
@@ -37,6 +37,7 @@
#include "../test/ch395f_test_task.h"
#include "../test/ch395f_test.h" /* ENABLE_NET_LAYER_TESTS:netTask 条件创建 */
#include "time_sync.h"
#include "sys_events.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -96,6 +97,11 @@ osMessageQueueId_t netMsgQueueHandle;
const osMessageQueueAttr_t netMsgQueue_attributes = {
.name = "netMsgQueue"
};
/* Definitions for sys_evt */
osEventFlagsId_t sys_evtHandle;
const osEventFlagsAttr_t sys_evt_attributes = {
.name = "sys_evt"
};
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
@@ -162,6 +168,10 @@ void MX_FREERTOS_Init(void) {
timeSyncTaskHandle = osThreadNew(timeSyncTask, NULL, &timeSyncTask_attributes);
/* USER CODE END RTOS_THREADS */
/* Create the event(s) */
/* creation of sys_evt */
sys_evtHandle = osEventFlagsNew(&sys_evt_attributes);
/* USER CODE BEGIN RTOS_EVENTS */
/* add events, ... */
/* USER CODE END RTOS_EVENTS */
@@ -201,6 +211,10 @@ void StartDefaultTask(void *argument)
}
if (fr == FR_OK) {
DBG_INFO("[FS] FATFS mounted");
/* 广播"存储就绪",唤醒依赖文件系统的任务 */
if (sys_evtHandle != NULL) {
osEventFlagsSet(sys_evtHandle, SYS_EVT_STORAGE_READY);
}
} else {
DBG_ERROR("[FS] f_mount failed (fr=%d)", (int)fr);
}
@@ -235,9 +249,24 @@ void StartNetTask(void *argument)
__weak void StartFtpTask(void *argument)
{
/* USER CODE BEGIN StartFtpTask */
osDelay(7000);
/* 等网络 + 存储都真正就绪后再 listen,取代拍脑袋的 7s 魔法延时 */
/*
sys_evtHandle:等待哪个事件组
SYS_EVT_NET_READY | SYS_EVT_STORAGE_READY:要等哪几位(1u<<0 网络、1u<<1 存储)
osFlagsWaitAll:请求的位全部置位才唤醒(即"网络且存储都就绪")
osWaitForever:无限期等待,不设超时——任务会挂起(让出 CPU,零占用),直到生产者置位对应位才被唤醒
*/
if (sys_evtHandle != NULL) {
(void)osEventFlagsWait(sys_evtHandle,
SYS_EVT_NET_READY | SYS_EVT_STORAGE_READY,
osFlagsWaitAll, osWaitForever);
}
lftpd_t ftp;
lftpd_start("/", 21, &ftp);
/* 广播"FTP 服务就绪"(预留给依赖 FTP 的后续功能) */
if (sys_evtHandle != NULL) {
osEventFlagsSet(sys_evtHandle, SYS_EVT_FTP_READY);
}
/* USER CODE END StartFtpTask */
}
+1 -1
View File
@@ -114,7 +114,7 @@ int main(void)
/* USER CODE BEGIN 2 */
HAL_Delay(100);
/* 应用层初始化(时间子系统优先,详见 app_main_init) */
/* 应用层初始化(时间子系统优先,详见 app_main_init) */
app_main_init();
/* USER CODE END 2 */