From f3205e1cf70541b412b79dfb0ffc297be087413a Mon Sep 17 00:00:00 2001 From: YuanHongbin <975559679@qq.com> Date: Mon, 11 May 2026 18:23:00 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81Algorithm=E6=96=87=E4=BB=B6=E7=9A=84i?= =?UTF-8?q?sAllZero=E5=87=BD=E6=95=B0=E6=94=B9=E4=B8=BA=E5=8F=AF=E6=94=B9?= =?UTF-8?q?=E5=AF=B9=E6=AF=94=E5=8F=82=E6=95=B0=E7=9A=84is=5Fall=5Fbyte=20?= =?UTF-8?q?2=E3=80=81=E9=92=88=E5=AF=B9=E6=97=A7=E7=89=88=E6=9C=ACboot?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E7=9A=84=E5=8D=87=E7=BA=A7=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MDK/hc32l17x.uvoptx | 8 ++++---- source/inc/Algorithm.h | 2 +- source/src/Algorithm.c | 26 +++++++++++++------------- source/src/SGCP.c | 6 +++--- source/src/main.c | 28 +++++++++++++++++++++++++++- 5 files changed, 48 insertions(+), 22 deletions(-) diff --git a/MDK/hc32l17x.uvoptx b/MDK/hc32l17x.uvoptx index 8c07dba..0b38e73 100644 --- a/MDK/hc32l17x.uvoptx +++ b/MDK/hc32l17x.uvoptx @@ -157,18 +157,18 @@ 0 0 - 43 + 60 1 -
41708
+
15478
0 0 0 0 0 1 - ..\source\src\Update.c + ..\source\Src\main.c - \\hc32l17x\../source/src/Update.c\43 + \\hc32l17x\../source/Src/main.c\60
diff --git a/source/inc/Algorithm.h b/source/inc/Algorithm.h index dd97796..096a690 100644 --- a/source/inc/Algorithm.h +++ b/source/inc/Algorithm.h @@ -48,7 +48,7 @@ bool count_greater(int32_t *arr, uint8_t size, int32_t target); bool count_smaller(int32_t *arr, uint8_t size, int32_t target); uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length); uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen); -bool isAllZero(uint8_t *arr, int size); +bool is_all_byte(const uint8_t *data, size_t len, uint8_t val); #endif diff --git a/source/src/Algorithm.c b/source/src/Algorithm.c index c28bba9..01ac291 100644 --- a/source/src/Algorithm.c +++ b/source/src/Algorithm.c @@ -729,23 +729,23 @@ uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen) return cmd_sum; } -/***************************************************************************************** -* 函数名称: isAllZero -* 功能描述: 判断一个数组的值是否全部为0 -* 参 数: arr,数组 - size,长度 -* 返 回 值: true或false -*****************************************************************************************/ -bool isAllZero(uint8_t *arr, int size) +/** + * @brief 检查缓冲区是否全部等于指定字节值 + * @param data : 待检查的数据指针 + * @param len : 数据长度(字节数) + * @param val : 期望的字节值 (0x00 ~ 0xFF) + * @return true : 全部等于 val + * false: 存在不等于 val 的字节 + */ +bool is_all_byte(const uint8_t *data, size_t len, uint8_t val) { - for (int i = 0; i < size; i++) { - if (arr[i] != 0) { - return false; // 如果数组中有一个元素不为0,则返回false + for (size_t i = 0; i < len; i++) { + if (data[i] != val) { + return false; } } - return true; // 遍历完数组后,若所有元素都为0,则返回true + return true; } - /***************************************************************************************** * 函数名称: HexToAscii * 功能描述: 16进制转ASCII码 diff --git a/source/src/SGCP.c b/source/src/SGCP.c index c47421e..a100259 100644 --- a/source/src/SGCP.c +++ b/source/src/SGCP.c @@ -881,7 +881,7 @@ static void GWRevHandler(void) if(memcmp(GFHeader->MDAddr, LocalMAC, sizeof(GFHeader->MDAddr)) != false) { - if(isAllZero(GFHeader->MDAddr, sizeof(GFHeader->MDAddr)) != true) + if(is_all_byte(GFHeader->MDAddr, sizeof(GFHeader->MDAddr), 0x00) != true) { DBG_LOG("Gateway Master Device MAC Err...\r\n"); return; @@ -1725,7 +1725,7 @@ void GwRevLoopHandler(void) memcpy(&SGCP.DeviceData[SGCP.DeviceDataLen], &SGCP.DevData.LaserTracing.MasterDev, sizeof(SGCP.DevData.LaserTracing.MasterDev)); SGCP.DeviceDataLen += sizeof(SGCP.DevData.LaserTracing.MasterDev); - if(isAllZero(LocalDataPack, LocalDataLen) == false) + if(is_all_byte(LocalDataPack, LocalDataLen, 0x00) == false) { memcpy(&SGCP.DeviceData[SGCP.DeviceDataLen], LocalDataPack, sizeof(LocalDataPack)); SGCP.DeviceDataLen = SGCP.DeviceDataLen + DevGetDataMess(LocalType, LocalDataPack);; @@ -1778,7 +1778,7 @@ void GwRevLoopHandler(void) SGCP.DeviceMAC[SGCP.ReadDataAdd][0],SGCP.DeviceMAC[SGCP.ReadDataAdd][1],SGCP.DeviceMAC[SGCP.ReadDataAdd][2], SGCP.DeviceMAC[SGCP.ReadDataAdd][3],SGCP.DeviceMAC[SGCP.ReadDataAdd][4],SGCP.DeviceMAC[SGCP.ReadDataAdd][5]); - if(isAllZero(LocalDataPack, LocalDataLen) == false) + if(is_all_byte(LocalDataPack, LocalDataLen, 0x00) == false) { memcpy(&SGCP.DeviceData[SGCP.DeviceDataLen], LocalDataPack, sizeof(LocalDataPack)); SGCP.DeviceDataLen = DevGetDataMess(LocalType, LocalDataPack); diff --git a/source/src/main.c b/source/src/main.c index c84835d..a95f44b 100644 --- a/source/src/main.c +++ b/source/src/main.c @@ -57,6 +57,33 @@ static void AppInit(void) CommWay = BLPara.DevMac[2]; //鏈満閫氳鏂瑰紡 DeviceSign = BLPara.DevMac[3] & 0x80; //鏈満璁惧鏍囧織 AddNumber = ((BLPara.DevMac[3] << 16)+ (BLPara.DevMac[4] << 8) + BLPara.DevMac[5]) - 0x800000; //鏈満鍦板潃缂栧彿锛屾暟瀛楅儴鍒嗗搴斿敮涓鍦板潃缂栧彿 + if(is_all_byte(LocalMAC, 6, 0xFF) == true)/*閽堝鏃х増鏈琤oot绋嬪簭鐨勫崌绾у吋瀹*/ + { + LocalType = LASER_TRACING; //鏈満璁惧绫诲瀷 + CommWay = LORA; //鏈満閫氳鏂瑰紡 + DeviceSign = MASTER; //鏈満璁惧鏍囧織 + AddNumber = 0x000022 + DeviceSign;//鏈満鍦板潃缂栧彿锛屾暟瀛楅儴鍒嗗搴斿敮涓鍦板潃缂栧彿 + + LocalMAC[0] = LocalType & 0xFF; //鏈満MAC鍦板潃 + LocalMAC[1] = (LocalType >> 8) & 0xFF; + LocalMAC[2] = CommWay; + LocalMAC[3] = (AddNumber >> 16) & 0xFF; + LocalMAC[4] = (AddNumber >> 8) & 0xFF; + LocalMAC[5] = AddNumber & 0xFF; + + if(AddNumber <= 0x14) + { + SX1276LoRaSetFreqHz(CH1); //Lora棰戠巼:433100000ul + 200000*N + BLPara.LoraFreq = CH1; + memcpy(&BLPara.DevMac[0], LocalMAC, 6); + } + else if(AddNumber > 0x14 && AddNumber < 0x23) + { + SX1276LoRaSetFreqHz(CH2); //Lora棰戠巼:433100000ul + 200000*N + BLPara.LoraFreq = CH2; + memcpy(&BLPara.DevMac[0], LocalMAC, 6); + } + } if(App.Para.FactoryFlag != 0x00) { App.Para.FactoryFlag = 0x00; @@ -64,7 +91,6 @@ static void AppInit(void) App.Para.CaliPara.PitchZero = 0; App.Para.CaliPara.RollZero = 0; App.Para.CaliPara.YawZero = 0; - SAVE_APP_PARA((uint32_t *)&App.Para); } #elif LocalType = LASER_TRACING; //鏈満璁惧绫诲瀷