启动顺序管理
This commit is contained in:
+30
-1
@@ -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
@@ -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 */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user