From 3dd654bdda57da63444a2d88ea0ed0b1d3840ca1 Mon Sep 17 00:00:00 2001 From: algin Date: Mon, 29 Jul 2024 17:21:34 +0300 Subject: [PATCH] =?UTF-8?q?dev():=20=D0=A1=D0=BD=D0=BE=D0=B2=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=B2=D1=8B=D1=87=D0=B8=D1=81=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=81=D1=83=D0=BC=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/free_rtos/base/swap.h | 8 +- .../free_rtos/ethernet_ip/eth_checksum.c | 88 +++++++++---------- 2 files changed, 44 insertions(+), 52 deletions(-) diff --git a/components/free_rtos/base/swap.h b/components/free_rtos/base/swap.h index 1827509..153ee80 100644 --- a/components/free_rtos/base/swap.h +++ b/components/free_rtos/base/swap.h @@ -10,10 +10,10 @@ #include -//#define BASE_SWAP32(value) __builtin_bswap32(value) -#define BASE_SWAP32(value) __rev(value) +#define BASE_SWAP32(value) __builtin_bswap32(value) +//#define BASE_SWAP32(value) __rev(value) -//#define BASE_SWAP16(value) (uint16_t)__builtin_bswap16(value) -#define BASE_SWAP16(value) (uint16_t)__rev16(value) +#define BASE_SWAP16(value) (uint16_t)__builtin_bswap16(value) +//#define BASE_SWAP16(value) (uint16_t)__rev16(value) #endif /* FREE_RTOS_BASE_SWAP_H_ */ diff --git a/components/free_rtos/ethernet_ip/eth_checksum.c b/components/free_rtos/ethernet_ip/eth_checksum.c index 1feb666..a6307cd 100644 --- a/components/free_rtos/ethernet_ip/eth_checksum.c +++ b/components/free_rtos/ethernet_ip/eth_checksum.c @@ -8,6 +8,7 @@ #include "free_rtos/base/swap.h" #include +#include uint16_t eth_calcChksum(uint32_t sum, uint8_t * const data, uint16_t len) { @@ -56,69 +57,60 @@ uint16_t eth_calcChksum2(uint32_t sum, uint8_t * const hdata, uint16_t hlen, uin return ~sum; } -union PointerConverter -{ - void * unknown; - uint64_t * octet; - uint32_t * quartet; - uint16_t * duet; - uint8_t * solo; -}; - -struct Array { - uint16_t duet0; - uint16_t duet1; - uint16_t duet2; - uint16_t duet3; -}; - -union ValueConverter -{ - uint64_t octet; - uint32_t quartet; - uint16_t duet; - uint8_t solo; - struct Array array; -}; - uint32_t calcSum(void * const buffer, uint32_t sum, void * const data, uint16_t len) { - union PointerConverter buffer_start; - union PointerConverter data_start; - union ValueConverter value; + uint8_t* buffer_start; + uint8_t* data_start; + uint32_t value; - buffer_start.unknown = buffer; - data_start.unknown = data; + buffer_start = (uint8_t*)buffer; + data_start = (uint8_t*)data; + value = 0x00000000; - while(len >= sizeof(uint32_t)) { - len -= sizeof(uint32_t); + #define SIZE sizeof(uint32_t) + while(len >= SIZE) { + len -= SIZE; - value.quartet = *data_start.quartet++; - *buffer_start.quartet++ = value.quartet; + memcpy(&value, data_start, SIZE); + data_start += SIZE; - value.quartet = __rev16(value.quartet); - sum += value.array.duet0 + value.array.duet1; + memcpy(buffer_start, &value, SIZE); + buffer_start += SIZE; + + value = __rev16(value); + sum += (value&0xFFFF) + (value>>16); } + #undef SIZE - if(len >= sizeof(uint16_t)) { - len -= sizeof(uint16_t); + #define SIZE sizeof(uint16_t) + if(len >= SIZE) { + len -= SIZE; + value = 0x00000000; - value.duet = *data_start.duet++; - *buffer_start.duet++ = value.duet; + memcpy(&value, data_start, SIZE); + data_start += SIZE; - value.quartet = __rev16(value.quartet); - sum += value.duet; + memcpy(buffer_start, &value, SIZE); + buffer_start += SIZE; + + sum += __rev16(value); } + #undef SIZE - if(len >= sizeof(uint8_t)) { - len -= sizeof(uint8_t); + #define SIZE sizeof(uint8_t) + if(len >= SIZE) { + len -= SIZE; + value = 0x00000000; - value.solo = *data_start.solo++; - *buffer_start.solo++ = value.solo; + memcpy(&value, data_start, SIZE); + data_start += SIZE; - value.quartet = __rev16(value.quartet); - sum += value.solo; + memcpy(buffer_start, &value, SIZE); + buffer_start += SIZE; + + sum += __rev16(value); } + #undef SIZE return sum; }