From a4d1600de795b98d660e3332119716b0cb45cf7b Mon Sep 17 00:00:00 2001 From: zhangzhaopeng Date: Mon, 29 Dec 2025 17:45:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E8=AE=A2=E9=98=85=E8=A1=A8?= =?UTF-8?q?=E8=A2=AB=E5=88=A0=E9=99=A4=E4=BD=86=E4=BB=8D=E7=84=B6=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=B6=88=E6=81=AF=E7=9A=84=E5=BC=82=E5=B8=B8=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mw/has_task_msg_manager/has_task_msg.h | 3 +- .../has_task_msg_mamanger.c | 48 ++++++++++++------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/mw/has_task_msg_manager/has_task_msg.h b/mw/has_task_msg_manager/has_task_msg.h index d149092..2f6fe3b 100644 --- a/mw/has_task_msg_manager/has_task_msg.h +++ b/mw/has_task_msg_manager/has_task_msg.h @@ -15,8 +15,7 @@ typedef enum { MODULE_MAX } has_module_ID_e; -/* 模块 订阅数量 订阅模块 */ -/* 模块 和 订阅数量一定要写,完全不加入表中的模块,或订阅数量为0的模块无法接收消息 */ +/* 格式:模块 订阅数量 订阅模块 */ #define SUBSCIBE_INFO \ { \ {GUI, 4, {ACM, SENSOR, WIFI, VOICE}}, \ diff --git a/mw/has_task_msg_manager/has_task_msg_mamanger.c b/mw/has_task_msg_manager/has_task_msg_mamanger.c index 2e9b624..c8a7c28 100644 --- a/mw/has_task_msg_manager/has_task_msg_mamanger.c +++ b/mw/has_task_msg_manager/has_task_msg_mamanger.c @@ -77,15 +77,22 @@ static has_static_sub_list_t g_sub_list[] = SUBSCIBE_INFO; static unsigned char g_sub_list_index[MODULE_MAX] = {0}; // 订阅表id索引 -/* 检查ID是否合法,id:检查的ID,ret:不合法时return的结果 */ +/* 检查ID是否合法,id:检查的ID,ret:不合法时return的值 */ #define MSG_CHECK_MODULE_ID(id, ret) \ if (((id) >= MODULE_MAX) || ((id) == INVALID_ID)) { \ msg_printf("%s ID wrong:%d\n", __func__, (id)); return (ret); } +/* 检查ID和索引是否合法,id:检查的ID,ret:不合法时return的值 */ +#define MSG_CHECK_ID_AND_INDEX(id, ret) \ +if (((id) >= MODULE_MAX) || ((id) == INVALID_ID)) { \ + msg_printf("%s ID wrong:%d\n", __func__, (id)); return (ret); } \ +if (g_sub_list_index[(id)] == MODULE_MAX) { \ + return (ret);} + int has_msg_init() { int j; - memset(g_sub_list_index, 0, sizeof(g_sub_list_index)); + memset(g_sub_list_index, MODULE_MAX, sizeof(g_sub_list_index)); #ifdef MSG_OPT_PUB_LIST memset(g_pub_list, 0, sizeof(g_pub_list)); #endif @@ -131,6 +138,11 @@ int has_msg_init() INIT_LIST_HEAD(&g_sub_list[i].msg_list); // 初始化订阅链表 } #ifdef MSG_OPT_DEBUG + // msg_printf("show index:\n"); + // for (int i = 0; i < MODULE_MAX; i++) + // { + // msg_printf("sub id:%d, index:%d\n", i, g_sub_list_index[i]); + // } // for (int i = 0; i < (sizeof(g_sub_list) / sizeof(g_sub_list[0])); i++) { // msg_printf("module:%d subscribes to:\n", g_sub_list[i].module_id); // for (int x = 0; x < g_sub_list[i].sub_module_cnt; x++) { @@ -260,7 +272,7 @@ int has_msg_handle(has_module_ID_e module_id, has_msg_handle_cb cb) { has_msg_node_t *node; has_static_sub_list_t *sub_list; - MSG_CHECK_MODULE_ID(module_id, -1); + MSG_CHECK_ID_AND_INDEX(module_id, -1); sub_list = &g_sub_list[g_sub_list_index[module_id]]; @@ -297,7 +309,7 @@ int has_msg_handle_by_module(has_module_ID_e module_id, has_msg_handle_cb cb, ha { has_msg_node_t *node, *temp; has_static_sub_list_t *sub_list; - MSG_CHECK_MODULE_ID(module_id, -1); + MSG_CHECK_ID_AND_INDEX(module_id, -1); MSG_CHECK_MODULE_ID(pub_module_id, -1); sub_list = &g_sub_list[g_sub_list_index[module_id]]; @@ -343,7 +355,7 @@ int has_msg_handle_latest(has_module_ID_e module_id, has_msg_handle_cb cb) { has_msg_node_t *node; has_static_sub_list_t *sub_list; - MSG_CHECK_MODULE_ID(module_id, -1); + MSG_CHECK_ID_AND_INDEX(module_id, -1); sub_list = &g_sub_list[g_sub_list_index[module_id]]; @@ -383,10 +395,11 @@ unsigned int has_msg_receive(has_module_ID_e module_id, unsigned char *pub_modul has_msg_node_t *node; has_static_sub_list_t *sub_list; unsigned int len = 0; - if ((module_id >= MODULE_MAX) || (module_id == INVALID_ID) || (buf_out == NULL)) { - msg_printf("%s id of buff wrong:%d\n", __func__, module_id); + if (buf_out == NULL) { + msg_printf("%s buff is NULL\n", __func__); return 0; } + MSG_CHECK_ID_AND_INDEX(module_id, 0); sub_list = &g_sub_list[g_sub_list_index[module_id]]; @@ -427,10 +440,11 @@ unsigned int has_msg_receive_latest(has_module_ID_e module_id, unsigned char *pu has_msg_node_t *node; has_static_sub_list_t *sub_list; unsigned int len = 0; - if ((module_id >= MODULE_MAX) || (module_id == INVALID_ID) || (buf_out == NULL)) { - msg_printf("%s id of buff wrong:%d\n", __func__, module_id); + if (buf_out == NULL) { + msg_printf("%s buff is NULL\n", __func__); return 0; } + MSG_CHECK_ID_AND_INDEX(module_id, 0); sub_list = &g_sub_list[g_sub_list_index[module_id]]; @@ -472,7 +486,7 @@ unsigned int has_msg_is_message_empty(has_module_ID_e module_id) has_msg_node_t *node, *temp; has_static_sub_list_t *sub_list; unsigned int num = 0; - MSG_CHECK_MODULE_ID(module_id, -1); + MSG_CHECK_ID_AND_INDEX(module_id, -1); sub_list = &g_sub_list[g_sub_list_index[module_id]]; @@ -491,7 +505,7 @@ unsigned int has_msg_get_message_number(has_module_ID_e module_id) has_msg_node_t *node, *temp; has_static_sub_list_t *sub_list; unsigned int num = 0; - MSG_CHECK_MODULE_ID(module_id, 0); + MSG_CHECK_ID_AND_INDEX(module_id, 0); sub_list = &g_sub_list[g_sub_list_index[module_id]]; @@ -506,7 +520,7 @@ unsigned int has_msg_get_message_number(has_module_ID_e module_id) int has_msg_printf_subscribe(has_module_ID_e module_id) { has_static_sub_list_t *sub_list; - MSG_CHECK_MODULE_ID(module_id, -1); + MSG_CHECK_ID_AND_INDEX(module_id, -1); sub_list = &g_sub_list[g_sub_list_index[module_id]]; @@ -528,7 +542,7 @@ int has_msg_delete_all_message(has_module_ID_e module_id) unsigned char id; INIT_LIST_HEAD(&free_list); #endif - MSG_CHECK_MODULE_ID(module_id, -1); + MSG_CHECK_ID_AND_INDEX(module_id, -1); sub_list = &g_sub_list[g_sub_list_index[module_id]]; @@ -572,10 +586,10 @@ int has_msg_subscribe(has_module_ID_e module_id, has_module_ID_e sub_id) { has_static_sub_list_t *sub_list; int j; - if ((module_id >= MODULE_MAX) || (sub_id >= MODULE_MAX) - || (module_id == INVALID_ID) || (sub_id == INVALID_ID)) { + if ((sub_id >= MODULE_MAX) || (sub_id == INVALID_ID)) { return -1; } + MSG_CHECK_ID_AND_INDEX(module_id, -1); sub_list = &g_sub_list[g_sub_list_index[module_id]]; msg_mutex_lock(&sub_list->msg_mutex); @@ -604,10 +618,10 @@ int has_msg_subscribe(has_module_ID_e module_id, has_module_ID_e sub_id) int has_msg_unsubscribe(has_module_ID_e module_id, has_module_ID_e sub_id) { has_static_sub_list_t *sub_list; - if ((module_id >= MODULE_MAX) || (sub_id >= MODULE_MAX) - || (module_id == INVALID_ID) || (sub_id == INVALID_ID)) { + if ((sub_id >= MODULE_MAX) || (sub_id == INVALID_ID)) { return -1; } + MSG_CHECK_ID_AND_INDEX(module_id, -1); sub_list = &g_sub_list[g_sub_list_index[module_id]]; msg_mutex_lock(&sub_list->msg_mutex);