diff --git a/release/src/system/RTU/makefile b/release/src/system/RTU/makefile index 0af6e1f..b37fcaf 100644 --- a/release/src/system/RTU/makefile +++ b/release/src/system/RTU/makefile @@ -10,36 +10,35 @@ INC_PATH := -I$(ROOT)/release/inc \ -I$(ROOT)/src/public/libcmd/inc \ -I$(ROOT)/src/public/libtask/inc \ -I$(ROOT)/src/public/libmy_xxhash/inc \ + -I$(ROOT)/src/public/libcJSON/inc \ -I$(ROOT)/src/protocol/libmodbus/inc LIBS := -L$(ROOT)/release/$(BUILD_TYPE)/lib \ - -lsystem -lmodbus_m -lmodbus -l60870 \ + -lmodbus_m -lmodbus -l60870 \ -ldatacenter -lxml -lcmd -ltask \ -llog -lfunc -lmy_xxhash -lcJSON -lmd5 -lcomm \ -lpthread -lstdc++ O := $(ROOT)/release/$(BUILD_TYPE)/exe/RTU S := $(ROOT)/src/system/RTU/src -B := $(CURDIR)/RTU/obj -SRCS := $(wildcard $(S)/*.c) -OBJS := $(patsubst $(S)/%.c, $(B)/%.o, $(SRCS)) -F := $(C_FLAGS) $(INC_PATH) -.PHONY: all -all: $(O) - @echo "[RTU] built -> $(O)" +C_OBJ := $(CURDIR)/RTU/obj/main.o +CXX_OBJ := $(CURDIR)/RTU/obj/app_sys.o -$(O): $(OBJS) +.PHONY: all; all: $(O) + +$(O): $(C_OBJ) $(CXX_OBJ) @mkdir -p $(dir $@) $(CXX) $^ $(LIBS) -o $@ + @echo "[RTU] built -> $(O)" -$(B)/%.o: $(S)/%.c +$(C_OBJ): $(S)/main.c @mkdir -p $(dir $@) - $(CC) $(F) -c $< -o $@ + $(CC) $(C_FLAGS) $(INC_PATH) -c $< -o $@ -.PHONY: clean -clean: - rm -rf $(B) $(O) +$(CXX_OBJ): $(S)/app_sys.cpp + @mkdir -p $(dir $@) + $(CXX) $(CXX_FLAGS) $(INC_PATH) -c $< -o $@ -.PHONY: rebuild -rebuild: clean all +.PHONY: clean; clean: + rm -rf $(CURDIR)/RTU/obj $(O) diff --git a/release/src/system/makefile b/release/src/system/makefile index 01462b6..17b7af9 100644 --- a/release/src/system/makefile +++ b/release/src/system/makefile @@ -1,36 +1,14 @@ include ./../../linux.mk -# 纠正 ROOT_DIR:release/src/system 只有三级深度,linux.mk 假设四级 -ORIG_ROOT := $(ROOT_DIR) -ROOT := $(realpath $(CURDIR)/../../..) -SYS_SRC := $(ROOT)/src/system -PUB_SRC := $(ROOT)/src/public - -LIB := $(ROOT)/release/$(BUILD_TYPE)/lib/libsystem.a -LIB_OBJ := $(CURDIR)/libsystem/obj/app_modules.o -LIB_FLAGS := $(C_FLAGS) -I$(SYS_SRC)/inc -I$(PUB_SRC)/liblog/inc -I$(PUB_SRC)/libtask/inc -I$(ROOT)/release/inc - -$(LIB): $(LIB_OBJ) - @mkdir -p $(dir $@) - $(AR) rcs $@ $^ - @echo "[libsystem] built" - -$(LIB_OBJ): $(SYS_SRC)/app_modules.c - @mkdir -p $(dir $@) - $(CC) $(LIB_FLAGS) -c $< -o $@ - -.PHONY: clean-sys -clean-sys: - rm -rf $(CURDIR)/libsystem/obj $(LIB) - +# app_sys.cpp 已合并到 RTU makefile 中,此处仅管理子模块 SUBDIRS := ./libmodbus_m ./RTU .PHONY: all clean rebuild -all: $(LIB) +all: @for d in $(SUBDIRS); do [ -f "$$d/makefile" ] && (cd "$$d" && $(MAKE) -f makefile all) || true; done -clean: clean-sys +clean: @for d in $(SUBDIRS); do [ -f "$$d/makefile" ] && (cd "$$d" && $(MAKE) -f makefile clean) || true; done rebuild: clean all diff --git a/src/system/RTU/src/main.c b/src/system/RTU/src/main.c index e6af2e3..1659374 100644 --- a/src/system/RTU/src/main.c +++ b/src/system/RTU/src/main.c @@ -1,8 +1,8 @@ /** * @file main.c * @brief RTU 主程序入口 - * @details 注册所有线程模块 → init1 → init2 → start → wait。 - * 每个模块在自己的独立线程中运行主循环。 + * @details app_sys_init() 自动启动所有 X-Macro 注册的模块。 + * 新增模块只需修改 src/system/inc/app_modules.h,无需改动本文件。 */ #include "mySystem.h" #include "myLog.h" @@ -16,20 +16,6 @@ #include #include -/* ================================================================ - * 外部模块声明(各模块在 system/ 子目录中实现,链接时解析) - * ================================================================ */ - -/* libmodbus_m — Modbus 主站管理 */ -extern int app_modbus_m_init1(void *arg); -extern int app_modbus_m_init2(void *arg); -extern void *app_modbus_m(void *arg); -extern void app_modbus_m_register(void); - -/* ================================================================ - * 信号处理 - * ================================================================ */ - static volatile int g_running = 1; static void sig_handler(int sig) @@ -39,15 +25,10 @@ static void sig_handler(int sig) LOG_I("signal received, shutting down..."); } -/* ================================================================ - * 内置命令 - * ================================================================ */ - static void cmd_version(int argc, char *argv[]) { (void)argc; (void)argv; - printf("RTU_ALL_AI v1.0\n"); printf(" libmodbus v%d.%d.%d\n", libmodbus_version_major, libmodbus_version_minor, @@ -58,17 +39,12 @@ static void cmd_uptime(int argc, char *argv[]) { (void)argc; (void)argv; - printf("RTU uptime: (running)\n"); } CMD_REGISTER("version", cmd_version, "show firmware version"); CMD_REGISTER("uptime", cmd_uptime, "show uptime"); -/* ================================================================ - * main - * ================================================================ */ - int main(int argc, char *argv[]) { (void)argc; @@ -76,57 +52,33 @@ int main(int argc, char *argv[]) printf("\n=== RTU_ALL_AI Starting ===\n\n"); - /* 信号处理 */ signal(SIGINT, sig_handler); signal(SIGTERM, sig_handler); + signal(SIGPIPE, SIG_IGN); - /* 初始化日志 */ log_init(NULL); - LOG_I("RTU booting..."); - /* 注册所有线程模块 */ - app_modbus_m_register(); - - /* 阶段 1: 模块初始化(信号注册前) */ - if (app_modules_init1() != 0) - { - LOG_E("app_modules_init1 failed, aborting"); - - return 1; - } - - /* 数据中心初始化 */ dc_init(NULL); - /* 阶段 2: 模块初始化(信号注册后) */ - if (app_modules_init2() != 0) + if (app_sys_init() != 0) { - LOG_E("app_modules_init2 failed, aborting"); - + LOG_E("app_sys_init failed, aborting"); return 1; } - /* 启动所有模块线程 */ - app_modules_start(); + LOG_I("RTU running"); - LOG_I("RTU running, %d worker threads", 1); - - /* 主循环: 处理命令输入 */ while (g_running) { char *line = linenoise("RTU> "); - if (!line) - { - break; /* Ctrl+D */ - } + if (!line) { break; } if (line[0] != '\0') { linenoiseHistoryAdd(line); - /* 解析为 argc/argv */ char *argv_buf[16]; uint8_t argc = 0; @@ -148,12 +100,7 @@ int main(int argc, char *argv[]) linenoiseFree(line); } - /* 停止所有模块 */ - LOG_I("stopping all modules..."); - app_modules_stop(); - app_modules_join(); - - /* 清理 */ + LOG_I("shutting down..."); dc_cleanup(); log_cleanup(); diff --git a/src/system/libmodbus_m/src/modbus_m.cpp b/src/system/libmodbus_m/src/modbus_m.cpp index 61bbcfa..ab56d0f 100644 --- a/src/system/libmodbus_m/src/modbus_m.cpp +++ b/src/system/libmodbus_m/src/modbus_m.cpp @@ -1018,18 +1018,4 @@ void *app_modbus_m(void *arg) return NULL; } -// ==================== 模块注册 ==================== - -static stru_app g_app_modbus_m; - -extern "C" void app_modbus_m_register(void) -{ - memset(&g_app_modbus_m, 0, sizeof(g_app_modbus_m)); - g_app_modbus_m.name = MODULE_MODBUS_M; - - app_module_register(MODULE_MODBUS_M, - app_modbus_m_init1, - app_modbus_m_init2, - app_modbus_m, - &g_app_modbus_m); -} +/* ==================== 模块注册(由 app_modules.h X-Macro 自动完成,无需手动 register) ==================== */