From 12f93c8ddc4f5eb3001f982bb288a99d46873150 Mon Sep 17 00:00:00 2001 From: algin Date: Tue, 17 Oct 2023 17:08:48 +0300 Subject: [PATCH] =?UTF-8?q?fix(SF-60):=20=D0=9F=D0=BE=D0=BF=D1=8B=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B2=D1=8B=D1=81=D0=B8=D1=82=D1=8C?= =?UTF-8?q?=20=D1=81=D1=82=D0=B0=D0=B1=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=20=D1=81=D0=BE=D0=B5=D0=B4=D0=B8=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../free_rtos/ethernet/eth_task_settings.hpp | 2 +- .../ethernet_industry/eth_ecat_telegram.cpp | 2 +- .../ethernet_industry/eth_ecat_telegram.hpp | 2 +- .../free_rtos/ethernet_ip/eth_udp_client.cpp | 30 ++++++++++--------- .../free_rtos/ethernet_ip/eth_udp_client.hpp | 18 ++++++----- 5 files changed, 29 insertions(+), 25 deletions(-) diff --git a/components/free_rtos/ethernet/eth_task_settings.hpp b/components/free_rtos/ethernet/eth_task_settings.hpp index 9652861..8ff6a2d 100644 --- a/components/free_rtos/ethernet/eth_task_settings.hpp +++ b/components/free_rtos/ethernet/eth_task_settings.hpp @@ -13,7 +13,7 @@ #include "free_rtos/task/task.hpp" namespace free_rtos { - static constexpr uint32_t LINK_TASK_PRIORITY = tskIDLE_PRIORITY + 22; + static constexpr uint32_t LINK_TASK_PRIORITY = tskIDLE_PRIORITY + 2; static constexpr uint32_t LINK_TASK_STACK_SIZE = 0x2000 / sizeof(StackType_t); } diff --git a/components/free_rtos/ethernet_industry/eth_ecat_telegram.cpp b/components/free_rtos/ethernet_industry/eth_ecat_telegram.cpp index 17e620c..7f61cc7 100644 --- a/components/free_rtos/ethernet_industry/eth_ecat_telegram.cpp +++ b/components/free_rtos/ethernet_industry/eth_ecat_telegram.cpp @@ -155,7 +155,7 @@ bool EcatTelegram::transfer() { tick_counter_diff = diff(tick_counter_start, ecat_timer_.GetTickCounter()); - if((sts != SystemP_SUCCESS) && (tick_counter_diff < counter_timeout_ticks_)) { + if((sts != SystemP_SUCCESS) && (tick_counter_diff < counter_timeout_ticks_ - 1)) { //DebugP_log((char*)"rx_sem_ fake timeout detected !\r\n", ); continue; diff --git a/components/free_rtos/ethernet_industry/eth_ecat_telegram.hpp b/components/free_rtos/ethernet_industry/eth_ecat_telegram.hpp index 217b035..d52cb67 100644 --- a/components/free_rtos/ethernet_industry/eth_ecat_telegram.hpp +++ b/components/free_rtos/ethernet_industry/eth_ecat_telegram.hpp @@ -102,7 +102,7 @@ private: TEthMacPorts port_id_; uint32_t period_microsec_{250}; uint32_t counter_timeout_ticks_{8}; - uint32_t max_transfer_attempts_{6}; + uint32_t max_transfer_attempts_{4}; free_rtos::Semaphore rx_sem_; uint8_t idx_{0x00}; diff --git a/components/free_rtos/ethernet_ip/eth_udp_client.cpp b/components/free_rtos/ethernet_ip/eth_udp_client.cpp index 744693f..ba77b4f 100644 --- a/components/free_rtos/ethernet_ip/eth_udp_client.cpp +++ b/components/free_rtos/ethernet_ip/eth_udp_client.cpp @@ -23,8 +23,7 @@ free_rtos::EthUpdClient::EthUpdClient(EthIpIface& ip_iface, TEthMacPorts port_id use_checksum_{use_chksum}, ip_iface_{ip_iface}, port_id_{port_id} -{ -} +{ } void free_rtos::EthUpdClient::put_data(uint32_t src_ip, uint8_t * p_data, uint32_t len) { @@ -32,16 +31,18 @@ void free_rtos::EthUpdClient::put_data(uint32_t src_ip, uint8_t * p_data, uint32 return; } - /// �������� ������ � ����� { - LockGuard lock(rx_mut_); /// ��������� ������� + LockGuard lock(rx_mut_); - if(buff_.size() + len > max_buf_size) { + uint32_t new_size = buff_.size() + len; + + if(new_size > max_buf_size) { DebugP_log((char *)"Warning ! UDP client buffer overflow !\r\n"); return; } + buff_.reserve(new_size); buff_.insert(buff_.end(), p_data, p_data + len); } @@ -52,20 +53,21 @@ void free_rtos::EthUpdClient::put_data(uint32_t src_ip, uint8_t * p_data, uint32 int32_t free_rtos::EthUpdClient::get_data(uint8_t * p_data, uint32_t len) { - uint32_t size = buff_.size(); - - if (size > len) { - size = len; - } + uint32_t size; { - LockGuard lock(rx_mut_); /// ��������� ������� + LockGuard lock(rx_mut_); + + size = buff_.size(); + + if (size > len) { + size = len; + } + auto item_begin = buff_.begin(); auto item_end = item_begin + size; - /// ��������� ������ �� ������ � �������� � ����� ������������ std::copy(item_begin, item_end, p_data); - /// ������� ������������� ������ �� ������ buff_.erase(item_begin, item_end); } @@ -106,7 +108,7 @@ void free_rtos::EthUpdClient::clear() buff_.clear(); } -int32_t free_rtos::EthUpdClient::write(uint32_t ip_dst_be, uint8_t * p_data, uint32_t len) +bool free_rtos::EthUpdClient::write(uint32_t ip_dst_be, uint8_t * p_data, uint32_t len) { TUdpHeader * hdr = (TUdpHeader *)(eth_pkt_.data + sizeof(TIpHeader) + sizeof(TEthFrameHeader)); uint8_t * p_udp_data = (uint8_t *)(eth_pkt_.data + sizeof(TIpHeader) + sizeof(TEthFrameHeader) + sizeof(TUdpHeader)); diff --git a/components/free_rtos/ethernet_ip/eth_udp_client.hpp b/components/free_rtos/ethernet_ip/eth_udp_client.hpp index 9816a39..06ca36f 100644 --- a/components/free_rtos/ethernet_ip/eth_udp_client.hpp +++ b/components/free_rtos/ethernet_ip/eth_udp_client.hpp @@ -46,10 +46,10 @@ public: return get_data(data, len); } - int32_t write(uint32_t ip_dst_be, uint8_t * p_data, uint32_t len); + bool write(uint32_t ip_dst_be, uint8_t * p_data, uint32_t len); template - int32_t write(uint32_t ip_dst_be, std::vector& data) + bool write(uint32_t ip_dst_be, std::vector& data) { return write(ip_dst_be, data.data(), data.size() * sizeof(T)); } @@ -63,19 +63,21 @@ private: template int32_t get_data(std::vector& data, uint32_t len) { - uint32_t size = buff_.size(); - - if (size > len) { - size = len; - } + uint32_t size; { LockGuard lock(rx_mut_); + size = buff_.size(); + + if (size > len) { + size = len; + } + auto item_begin = buff_.begin(); auto item_end = item_begin + size; - std::copy(item_begin, item_end, std::back_inserter(data)); + data.insert(data.end(), item_begin, item_end); buff_.erase(item_begin, item_end); }