From 7d8ba5df7d883c86c24aa38449c4a6dd126e920f Mon Sep 17 00:00:00 2001
From: QuakeGod <quakegod@sina.com>
Date: 星期二, 06 八月 2024 14:41:31 +0800
Subject: [PATCH] Radio_LLCC68 1.15, Stable version

---
 ComLib/Src/ModbusRTU.c |   54 ++++++++++++++++++++++++------------------------------
 1 files changed, 24 insertions(+), 30 deletions(-)

diff --git a/ComLib/Src/ModbusRTU.c b/ComLib/Src/ModbusRTU.c
index cfcd848..89509c5 100644
--- a/ComLib/Src/ModbusRTU.c
+++ b/ComLib/Src/ModbusRTU.c
@@ -61,25 +61,7 @@
 	return(crc);
 }
 */ 
-const uint16_t crctalbeabs[] = { 
-	0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 
-	0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400 
-};
 
-uint16_t crc16tablefast(const uint8_t *ptr, uint16_t len) 
-{
-	uint16_t crc = 0xffff; 
-	uint16_t i;
-	uint8_t ch;
- 
-	for (i = 0; i < len; i++) {
-		ch = *ptr++;
-		crc = crctalbeabs[(ch ^ crc) & 15] ^ (crc >> 4);
-		crc = crctalbeabs[((ch >> 4) ^ crc) & 15] ^ (crc >> 4);
-	} 
-	
-	return crc;
-}
 
 //**********************************************************************
 //******************  Modbus slave  ************************************
@@ -168,11 +150,18 @@
 				bitmask=1;
 				for (int j=0;j<8&&i*8+j<nCount;j++)
 				{
-					Addr1=(Addr&0xff0)>>4;
+					Addr1=(Addr&0xfff0)>>4;
 					bitAddr=Addr&0xf;
-					if (GetBitValue( KMem.WY[Addr1],bitAddr))
-					{
-						thisValue|=bitmask;
+					if (Addr < 2048) {
+						if (GetBitValue( KMem.WY[Addr1],bitAddr))
+						{
+							thisValue|=bitmask;
+						}
+					}else {
+						if (GetBitValue( KMem.WR[Addr1-128],bitAddr))
+						{
+							thisValue|=bitmask;
+						}
 					}
 					bitmask<<=1;
 					Addr++;
@@ -229,15 +218,17 @@
 		case WriteCoil:	//5  bit
 		//Store Datas;
 			//SetBitValue(&KMem.WR[Addr1],bitAddr,pPkg->nCount);	
+				Addr1=(Addr&0xfff0)>>4;
+				bitAddr=Addr&0xf;
 			if (nCount == 0)		// set to 0
 			{
-				ResetBit(&KMem.WY[Addr1],bitAddr);
+				if (Addr < 2048) { ResetBit(&KMem.WY[Addr1],bitAddr);}
+				else {ResetBit(&KMem.WR[Addr1-128],bitAddr);}				
 			}else if (nCount == 0xFF00)	// set to 1
 			{
-				SetAddrBit(&KMem.WY[Addr1],bitAddr);
-			}else
-			{
-				//error
+				if (Addr < 2048) { SetAddrBit(&KMem.WY[Addr1],bitAddr);}
+				else {SetAddrBit(&KMem.WR[Addr1-128],bitAddr);}
+				
 			}
 			memcpy(Pkgbuf,ptr,len);
 			needcrc=0;
@@ -260,10 +251,13 @@
 				bitmask=1;
 				for (int j=0;j<8&&i*8+j<nCount;j++)
 				{
-					Addr1=(Addr&0xff0)>>4;
+					Addr1=(Addr&0xfff0)>>4;
 					bitAddr=Addr&0xf;
-					
-					SetBitValue( &KMem.WY[Addr1],bitAddr,bitmask&thisValue);
+					if (Addr < 2048) { 
+						SetBitValue( &KMem.WY[Addr1],bitAddr,bitmask&thisValue);
+					} else {
+						SetBitValue( &KMem.WR[Addr1 - 128],bitAddr,bitmask&thisValue);						
+					}
 					bitmask<<=1;
 					Addr++;
 				}

--
Gitblit v1.9.1