就绪屏障与配置引擎重构,新增串口助手、V0.0网表分析报告及芯片手册,同步更新文档
This commit is contained in:
+40
-7
@@ -39,6 +39,8 @@
|
||||
#include "time_sync.h"
|
||||
#include "sys_events.h"
|
||||
#include "sys_log.h"
|
||||
#include "net_cfg.h"
|
||||
#include "cfg_file.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@@ -114,6 +116,7 @@ const osEventFlagsAttr_t sys_evt_attributes = {
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN FunctionPrototypes */
|
||||
void ui_task_func(void *argument);
|
||||
static void default_task_net_cfg_save_notify(void);
|
||||
/* USER CODE END FunctionPrototypes */
|
||||
|
||||
void StartDefaultTask(void *argument);
|
||||
@@ -171,10 +174,10 @@ void MX_FREERTOS_Init(void) {
|
||||
uiTaskHandle = osThreadNew(StartUiTask, NULL, &uiTask_attributes);
|
||||
|
||||
/* USER CODE BEGIN RTOS_THREADS */
|
||||
#ifdef ENABLE_NET_LAYER_TESTS
|
||||
/* NET 层测试模式(阶段 6~10):完整网络栈,netTask 负责轮询与消息处理 */
|
||||
netTaskHandle = osThreadNew(StartNetTask, NULL, &netTask_attributes);
|
||||
#endif
|
||||
/* netTask = 基础线程:上方生成区的实例是全构建唯一实例(P1-6:旧
|
||||
* #ifdef ENABLE_NET_LAYER_TESTS 的重复创建已删除)。
|
||||
* - 产品 / NET 层测试模式:正常运行 bring_up + net_poll
|
||||
* - CH395F 硬件层测试模式:net_task_func 入口自挂起(testTask 独占 CH395F) */
|
||||
|
||||
/* 本地时间同步任务(PC 推送 TCP):依赖 netTask 处理消息队列 */
|
||||
timeSyncTaskHandle = osThreadNew(time_sync_task, NULL, &timeSyncTask_attributes);
|
||||
@@ -225,7 +228,11 @@ void StartDefaultTask(void *argument)
|
||||
DBG_INFO("[FS] FATFS mounted");
|
||||
/* 日志引擎挂载后处理:建 /log 目录 + 写"上电/重启"分类记录(唯一写者) */
|
||||
syslog_mcu_mounted();
|
||||
/* 广播"存储就绪",唤醒依赖文件系统的任务 */
|
||||
/* 加载网络配置进 RAM 副本(配置引擎属主 = 本任务;首启含旧档迁移;
|
||||
* 文件缺失/损坏 = 工厂默认,不阻塞组网)。须在置位 STORAGE_READY 前,
|
||||
* 使"存储就绪"屏障蕴含"配置已就绪",netTask 组网时配置恒有效 */
|
||||
(void)net_cfg_load();
|
||||
/* 广播"存储就绪"(= 卷挂载 + 配置加载完成),唤醒依赖文件系统的任务 */
|
||||
if (sys_evtHandle != NULL) {
|
||||
osEventFlagsSet(sys_evtHandle, SYS_EVT_STORAGE_READY);
|
||||
}
|
||||
@@ -235,13 +242,30 @@ void StartDefaultTask(void *argument)
|
||||
syslog_post(SYSLOG_SELFTEST, "文件系统异常");
|
||||
}
|
||||
|
||||
/* 注册"保存网络配置"请求通知:UI(uiTask)投递 → 置事件 → 本任务立即执行写盘
|
||||
* (配置引擎属主 = 本任务;UI 保存不再直接触碰配置文件引擎,P1-3) */
|
||||
net_cfg_set_save_req_cb(default_task_net_cfg_save_notify);
|
||||
|
||||
/* 配置 poll 周期计数(每 4 次循环 = 2s 轮询一次,与引擎文档/模拟器一致) */
|
||||
uint32_t cfg_poll_cnt = 0u;
|
||||
|
||||
for (;;) {
|
||||
/* 等待"保存网络配置"请求:有请求立即唤醒;无请求 500ms 后返回
|
||||
* (取代原 osDelay(500):循环节奏不变,保存响应零空转) */
|
||||
if (sys_evtHandle != NULL) {
|
||||
(void)osEventFlagsWait(sys_evtHandle, SYS_EVT_CFG_SAVE, osFlagsWaitAny, 500u);
|
||||
}
|
||||
/* 执行待处理保存(配置引擎属主:写盘 + 成功后立即应用);无请求 = 空操作 */
|
||||
net_cfg_save_run();
|
||||
/* 配置文件变更轮询(2s 周期;沉降去抖在引擎内) */
|
||||
if ((cfg_poll_cnt++ & 3u) == 0u) {
|
||||
cfg_file_poll();
|
||||
}
|
||||
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
|
||||
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
|
||||
HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin);
|
||||
/* 排空运行期日志(上电/重启分类与自检故障落盘) */
|
||||
syslog_drain();
|
||||
osDelay(500);
|
||||
}
|
||||
/* USER CODE END StartDefaultTask */
|
||||
}
|
||||
@@ -325,5 +349,14 @@ void StartUiTask(void *argument)
|
||||
|
||||
/* Private application code --------------------------------------------------*/
|
||||
/* USER CODE BEGIN Application */
|
||||
|
||||
/*
|
||||
* "保存网络配置"请求通知(注册给 net_cfg 的保存交接):
|
||||
* uiTask 投递保存请求 → 置 SYS_EVT_CFG_SAVE → defaultTask 循环立即唤醒执行写盘
|
||||
*/
|
||||
static void default_task_net_cfg_save_notify(void)
|
||||
{
|
||||
if (sys_evtHandle != NULL) {
|
||||
(void)osEventFlagsSet(sys_evtHandle, SYS_EVT_CFG_SAVE);
|
||||
}
|
||||
}
|
||||
/* USER CODE END Application */
|
||||
|
||||
Reference in New Issue
Block a user