fix: 多项修复优化

1. 24h周期注册改为系统定时重启(SystemReset),移除RepeLoginCount
2. ADC连续采样改为单次采样,每次读完后重新触发Adc_SGL_Start
3. GWRevHandler/InRevHandler memcmp返回值修正 != false → != 0
4. APP_STATUS_WAIT_UPLOAD上传成功后UploadOk清零
5. UartDebug: DEBUG_CMD_CNT 16→17
This commit is contained in:
2026-07-31 10:52:40 +08:00
parent cfcdb1c722
commit 0f8bed829e
6 changed files with 25 additions and 27 deletions
+1 -1
View File
@@ -12,7 +12,7 @@
#if (USE_DEBUG != 0)
#define DEBUG_CMD_CNT 16
#define DEBUG_CMD_CNT 17
const DBGFunType DebugFun[DEBUG_CMD_CNT];
volatile DebugChannel_e gDebugChannel = DBG_CH_RS485_1;//上电默认调试口
+2 -3
View File
@@ -1,4 +1,4 @@
#ifndef __MAIN_H
#ifndef __MAIN_H
#define __MAIN_H
#include "bsp.h"
#include "UartDebug.h"
@@ -17,7 +17,7 @@
#define Z 2
#define XYZ 3
#define SYSTEM_TIMING_LOGIN (86400 / 30) //系统定时注册时间(一天86400秒)
#define SYSTEM_TIMING_RESET (86400 / 30) //系统定时重启时间(一天86400秒)
#define ERR_TIMING_LOGIN (1800 / 30) //注册错误重新注册时间(半个小时1800秒)
#define TEST_TIME (60*60*1000)
@@ -77,7 +77,6 @@ typedef struct {
AHRSData_T AHRSData;
ConvertedData_T ConvertedData;
uint32_t RepeLoginCount; //24h重复注册计数
uint8_t Login30MinCount; //注册30分定时计数
uint8_t Login2Min30SCount; //注册100ms~2分+30s定时计数
bool Login_RTC; //注册30分定时器启动标志位
+1 -1
View File
@@ -1,4 +1,4 @@
#include "bsp.h"
#include "bsp.h"
#include "Algorithm.h"
#include "UartDebug.h"
+3 -3
View File
@@ -1,4 +1,4 @@
#include "SGCP.h"
#include "SGCP.h"
#include "main.h"
#include "UartDebug.h"
#include "Update.h"
@@ -916,7 +916,7 @@ static void GWRevHandler(void)
return;
}
if(memcmp(GFHeader->MDAddr, LocalMAC, sizeof(GFHeader->MDAddr)) != false)
if(memcmp(GFHeader->MDAddr, LocalMAC, sizeof(GFHeader->MDAddr)) != 0)
{
if(is_all_byte(GFHeader->MDAddr, sizeof(GFHeader->MDAddr), 0x00) != true)
{
@@ -1138,7 +1138,7 @@ static void InRevHandler(void)
return;
}
if(memcmp(IFHeader->MAC, LocalMAC, sizeof(IFHeader->MAC)) != false)
if(memcmp(IFHeader->MAC, LocalMAC, sizeof(IFHeader->MAC)) != 0)
{
DBG_LOG("Inside MAC Err...\r\n");
return;
+3 -2
View File
@@ -236,7 +236,7 @@ static void AdcInit(void)
Adc_Init(&stcAdcCfg);
Adc_CfgSglChannel(VBAT_ADC_PORTx); // 配置单次采样通道
Adc_SGL_Always_Start(); // 启动单次一直采样
Adc_SGL_Start(); // 启动单次采样
}
/*****************************************************************************************
* 函数名称: Battery_Level_Percent_Table
@@ -278,6 +278,7 @@ void ADCLoopHandler(void)
VBAT_Percentage = Percentage(VBAT_12V);//获取百分比
//DBG_LOG("VBAT_Percentage:%d\n",VBAT_Percentage);
Adc_ClrIrqStatus(AdcMskIrqSgl);//清除ADC中断状态
Adc_SGL_Start(); // 启动单次采样
}
}
void RTCInit(uint8_t sec)
@@ -390,7 +391,7 @@ static void GPIOInit(void)
Gpio_Init(LASER1_ON_OFF_PORTx,LASER1_ON_OFF_PINx,&GpioInitStruct);
Gpio_Init(LASER2_ON_OFF_PORTx,LASER2_ON_OFF_PINx,&GpioInitStruct);
Gpio_Init(LASER3_ON_OFF_PORTx,LASER3_ON_OFF_PINx,&GpioInitStruct);
//< ADC???????
//< ADC控制引脚
Gpio_Init(AD_ON_OFF_PORTx,AD_ON_OFF_PINx,&GpioInitStruct);
GpioInitStruct.bOutputVal = true; ///< 端口默认输出配置->高电平
+14 -16
View File
@@ -192,9 +192,9 @@ static void AppInit(void)
SGCP.DeviceReadDataOk = false;
SGCP.TimingAcquisition = false;
App.SysResetTimeCnt = 0;
App.Login2Min30SCount = 0;
App.Login30MinCount = 0;
App.RepeLoginCount = 0;
App.LoginFlag = false;
App.Login_RTC = false;
App.Login_LPTimer0 = true;
@@ -457,6 +457,7 @@ static void AppLoopHandler(void)
}
else if(SGCP.UploadOk == true)
{
SGCP.UploadOk = false;
App.Upload45S10SCount = 0;
}
SGCP.UploadMess = false;
@@ -489,7 +490,7 @@ void FeedDogHandler(void)
void SystemResetHandler(void)
{
//系统定时重启
if(App.SysResetTimeCnt > SYSTEM_TIMING_LOGIN) {
if(App.SysResetTimeCnt > SYSTEM_TIMING_RESET) {
delay_ms(5);
SystemReset();
while(1);
@@ -574,22 +575,19 @@ void SysTick_CallBack(void)
void RtcIRQHander(void)
{
//SGCP.TimingAcquisition = true; //30S更新一次数据
//系统定时重启
App.SysResetTimeCnt++;
if(App.SysResetTimeCnt >= SYSTEM_TIMING_RESET) {
App.SysResetTimeCnt = 0;
delay_ms(5);
SystemReset();
while(1);
}
if(SGCP.LoginOk == true)
{
App.RepeLoginCount++;
if(App.RepeLoginCount >= SYSTEM_TIMING_LOGIN){
MAIN_DBG_LOG("24h Repetition Login\r\n");
App.RepeLoginCount = 0;
SGCP.LoginOk = false;//24h重复注册
App.Login2Min30SCount = 0;
App.Login30MinCount = 0;
App.Login_RTC = false;//关闭30分注册定时器
App.Login_LPTimer0 = true;
LPTimer0_ON((App.Nonce % 1200) + 300);//定时30s+随机2分钟,最小间隙100ms
MAIN_DBG_LOG("Login LPTimer0 Open\r\n");
}
App.Coll_N++;
if(App.Coll_N >= App.Para.Layout.CollectTime)
{