From 782d77531c3c3ab1cf8065185358507cafdb7e56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?= <13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com> Date: Fri, 7 Feb 2025 08:46:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=81=94=E7=BD=91=E7=AD=96?= =?UTF-8?q?=E7=95=A5=EF=BC=8C=E6=94=B9=E4=B8=BA=E5=9B=BA=E5=AE=9A10s?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=EF=BC=8C=E6=89=80=E6=9C=89=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E9=83=BD=E9=87=8D=E6=96=B0=E5=8F=91=E8=B5=B7?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .mrs/launch.json | 6 ++--- bsp/src/bsp_nt26k.c | 66 +++++++++++++++++++++++++-------------------- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/.mrs/launch.json b/.mrs/launch.json index 25a7cbf..be75f06 100644 --- a/.mrs/launch.json +++ b/.mrs/launch.json @@ -5,7 +5,7 @@ "type": "mrs-debugger", "request": "launch", "name": "JT-DT-YD4N02A_RTT_MRS-4G", - "cwd": "c:\\Users\\张喆1223\\Desktop\\NT26K\\JT-DT-YD4N02A_4G_RTT_MRS", + "cwd": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K", "openOCDCfg": { "useLocalOpenOCD": true, "executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe", @@ -39,8 +39,8 @@ "additionalCommands": [] }, "loadedFiles": { - "executableFile": "c:\\Users\\张喆1223\\Desktop\\NT26K\\JT-DT-YD4N02A_4G_RTT_MRS\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", - "symbolFile": "c:\\Users\\张喆1223\\Desktop\\NT26K\\JT-DT-YD4N02A_4G_RTT_MRS\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", + "executableFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", + "symbolFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", "executableFileOffset": 0, "symbolFileOffset": 0 }, diff --git a/bsp/src/bsp_nt26k.c b/bsp/src/bsp_nt26k.c index d3aab78..310b9ec 100644 --- a/bsp/src/bsp_nt26k.c +++ b/bsp/src/bsp_nt26k.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-10-09 08:42:14 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-02-06 09:27:48 + * @LastEditTime: 2025-02-07 08:44:58 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c * @Description: * @@ -346,7 +346,7 @@ int Nt26k_Send_Data(struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, return RT_ERROR; } rt_memset(ops->body, 0, sizeof(struct DataBody)); - + ret = nt26k_ops.update_data(ops, device_type, event_type); if (ret == RT_EOK) { @@ -361,7 +361,7 @@ int Nt26k_Send_Data(struct Nt26k_Ops *ops, rt_uint8_t data_num, rt_uint8_t cmd, ret = -ret; } } - + return ret; } @@ -795,13 +795,13 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, if (event) // 处理该事件 { - LOG_D("%s上报\n", event->event_name);// 打印事件的名称 - + LOG_D("%s上报\n", event->event_name); // 打印事件的名称 + for (size_t i = 0; i < max_retry_count; i++) { if (nt26k_conncet_tcp_flag) { - if (event->send_func)// 如果事件有关联的发送函数,则调用该发送函数 + if (event->send_func) // 如果事件有关联的发送函数,则调用该发送函数 { #ifdef TEST_ENABLE RTC_ShowTime(); // 每次发送打印下时间,容易定位问题 @@ -811,7 +811,9 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, if (result != RT_EOK) { LOG_E("nt26k send failed\n"); - nt26k_connect_sever_flag = 1; + nt26k_connect_sever_flag = 0; + nt26k_conncet_tcp_flag = 0; + rt_sem_release(nt26k_disconnect_sem); ret = RT_ERROR; continue; } @@ -828,19 +830,21 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, { // 收不到说明在平台未注册或者信号不行,此时nt26k_connect_sever_flag 为0,但nt26k_conncet_tcp_flag = 1;此时不发起重连,等待事件触发就行 nt26k_connect_sever_flag = 0; - ret = RT_ERROR; + nt26k_conncet_tcp_flag = 0; + rt_sem_release(nt26k_disconnect_sem); + ret = RT_ERROR; } } } } else { - if (!nt26k_disconnect_retry_flag) - { - LOG_D("断网,启动重连\n"); - rt_sem_release(nt26k_disconnect_sem); - } - LOG_D("断网,等待连接中......\n"); + // if (!nt26k_disconnect_retry_flag) + // { + LOG_D("断网,启动重连\n"); + rt_sem_release(nt26k_disconnect_sem); + // } + // LOG_D("断网,等待连接中......\n"); ret = RT_ERROR; } rt_thread_mdelay(5000); @@ -1452,7 +1456,7 @@ static void Nt26k_Life_Thread_Entry(void *parameter) struct at_device *device = at_device_get_by_name(AT_DEVICE_NAMETYPE_NETDEV, nt26k->device_name); RT_ASSERT(device); rt_err_t result = RT_EOK; - rt_uint32_t delay_n = 1; + rt_uint32_t delay_n = 0; LOG_D("nt26k_life_thread entry\n"); @@ -1465,7 +1469,7 @@ static void Nt26k_Life_Thread_Entry(void *parameter) { LOG_D("重连网络中...\n"); nt26k_connect_sever_flag = 0; - at_response_t resp = at_create_resp(64, 0, 5000); + at_response_t resp = at_create_resp(128, 0, 5000); if (resp == RT_NULL) { LOG_E("No memory for response structure!"); @@ -1475,6 +1479,7 @@ static void Nt26k_Life_Thread_Entry(void *parameter) if (device->class->device_ops->control(device, AT_DEVICE_CTRL_POWER_ON, RT_NULL) == RT_EOK) { LOG_D("AT device power on success"); + rt_thread_mdelay(RT_TICK_PER_SECOND / 2); /* disable echo */ at_client_obj_wait_connect(device->client, 5000); /* disable echo */ @@ -1531,6 +1536,7 @@ static void Nt26k_Life_Thread_Entry(void *parameter) goto __exit; } } + rt_thread_mdelay(1); at_delete_resp(resp); } } @@ -1542,19 +1548,21 @@ static void Nt26k_Life_Thread_Entry(void *parameter) __exit: if (result != RT_EOK) { - nt26k_disconnect_retry_flag = 1; - LOG_D("重连网络失败,等待%d s后重连\n", delay_n * 5); - rt_thread_mdelay(5000); + // nt26k_disconnect_retry_flag = 1; + // LOG_D("重连网络失败,等待%d s后重连\n", delay_n * 5); + LOG_D("重连网络失败,等待10s后重连\n"); + // rt_thread_mdelay(delay_n * 5000); - - // delay_n++; - // if (delay_n >= 66) // 大于3小时的重连都不行,则重启设备 - // { - // Flash_Set_WorkDuration(work_duration); - // delay_n = 0; - // reboot(); - // } - nt26k_conncet_tcp_flag = 0; + + delay_n++; + if (delay_n >= 360) // 连续重连大于1小时都不行,则重启设备 + { + Flash_Set_WorkDuration(work_duration); + rt_thread_mdelay(100); + reboot(); + } + rt_thread_mdelay(10000); + // nt26k_conncet_tcp_flag = 0; rt_sem_release(nt26k_disconnect_sem); } } @@ -1582,7 +1590,7 @@ int BSP_Nt26k_Thread_Init(void) else { timeout = iot_upload_time * 60 * RT_TICK_PER_SECOND; - if (timeout >= RT_TICK_MAX / 2)//超了就直接默认值 + if (timeout >= RT_TICK_MAX / 2) // 超了就直接默认值 { timeout = 60 * 60 * RT_TICK_PER_SECOND; }