From c3ca4b1e327de96ac8eb7abe5e258bbe93be97a5 Mon Sep 17 00:00:00 2001 From: algin Date: Wed, 18 Oct 2023 15:29:31 +0300 Subject: [PATCH] =?UTF-8?q?fix(SF-60):=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=B5=D0=BC=D0=B0=20=D0=B4=D1=80=D0=B0=D0=B9=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=20ethernet.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BB=D0=BE=D0=B3=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/free_rtos/ethernet/eth_rx_flow.cpp | 123 ++++-------------- components/free_rtos/ethernet/eth_rx_flow.hpp | 1 - .../ethernet_industry/eth_ecat_telegram.cpp | 2 +- .../free_rtos/ethernet_ip/eth_udp_server.cpp | 2 + .../free_rtos/ethernet_ip/eth_udp_server.hpp | 5 +- 5 files changed, 34 insertions(+), 99 deletions(-) diff --git a/components/free_rtos/ethernet/eth_rx_flow.cpp b/components/free_rtos/ethernet/eth_rx_flow.cpp index 4be4c97..69d5f34 100644 --- a/components/free_rtos/ethernet/eth_rx_flow.cpp +++ b/components/free_rtos/ethernet/eth_rx_flow.cpp @@ -29,66 +29,12 @@ using namespace free_rtos; void free_rtos::rxIsrHandler(void *appData) { EthRxFlow * rx_flow = (EthRxFlow *)appData; - EnetDma_Pkt* rxPktInfo; - EnetDma_PktQ rxReadyQ; - uint32_t readyQCount; - int32_t status; if(rx_flow == nullptr) { return; } - if(rx_flow->id_ == 1) { - //STOP_PROFILER_STATIC_ITEM(Test_static, 128, 0); - } - - //status = EnetDma_retrieveRxPktQ(rx_flow->dma_handle_, &rxReadyQ); - //EnetAppUtils_assert(status == ENET_SOK); - - // Shortcut. Requires access to private header enet_udma_priv.h - EnetQueue_initQ(&rxReadyQ); - EnetQueue_append(&rxReadyQ, &rx_flow->dma_handle_->cqIsrQ); - EnetQueue_initQ(&rx_flow->dma_handle_->cqIsrQ); - - readyQCount = EnetQueue_getQCount(&rxReadyQ); - - // Reload DMA with a new rx free queue as fast as possible - rx_flow->submitFreeRxPkts(readyQCount); - - EnetQueue_append(&rx_flow->rx_ready_pktq_, &rxReadyQ); - rx_flow->sem_[EthRxFlow::e_signalRxPkt].post(); -/* - rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ); - - while(rxPktInfo != nullptr) - { - /// � ��������� ������ �������� ������ �� ������������ - if (!rx_flow->passive_mode_) - { - /// � ����� ������ ����� ���� ��������� ��������� - for (int j = 0 ; j < rxPktInfo->sgList.numScatterSegments; ++j) - { - rx_flow->eth_stack_.rx_handler(rxPktInfo->sgList.list[j].bufPtr, rxPktInfo->sgList.list[j].segmentFilledLen); - } - } - - /// �������� ��������� ������ �� ��������. ����� ����������� � ������������� ����� ��������. - EnetDma_checkPktState(&rxPktInfo->pktState, - ENET_PKTSTATE_MODULE_APP, - ENET_PKTSTATE_APP_WITH_DRIVER, - ENET_PKTSTATE_APP_WITH_FREEQ); - - /// ������ ����� � ������� ��������� ������� - EnetQueue_enq(&rx_flow->rx_free_pktq_, &rxPktInfo->node); - - /// ��������� ��������� ���� �� ������� - rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ); - - /// ����������� ������� �������� ������� - ++rx_flow->rx_pkt_counter_; - } -*/ } void free_rtos::rxTaskHandler(void *appData) @@ -105,7 +51,6 @@ free_rtos::EthRxFlow::EthRxFlow(TEthFrameMacAddr& mac_addr, EthStackIface& eth_s passive_mode_{false} { EnetQueue_initQ(&rx_free_pktq_); - EnetQueue_initQ(&rx_ready_pktq_); } void free_rtos::EthRxFlow::initRxFreePktQ(uint32_t qCount, void * appPriv) @@ -188,58 +133,44 @@ void free_rtos::EthRxFlow::rxProcessPktTask() status = sem_[e_signalRxPkt].pend(); if(status != SystemP_SUCCESS) { - //EnetAppUtils_print("rx_flow %u: Warning ! No rx packets timeout.\r\n", id_); - - continue; - } -/* - status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ); - EnetAppUtils_assert(status == ENET_SOK); - - readyQCount = EnetQueue_getQCount(&rxReadyQ); - - if(readyQCount == 0) { continue; } - // Reload DMA with a new rx free queue as fast as possible - submitFreeRxPkts(readyQCount); + do { + status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ); + EnetAppUtils_assert(status == ENET_SOK); - EnetQueue_append(&rx_ready_pktq_, &rxReadyQ); -*/ - rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rx_ready_pktq_); + readyQCount = EnetQueue_getQCount(&rxReadyQ); - while(rxPktInfo != nullptr) - { - /// � ��������� ������ �������� ������ �� ������������ - if (!passive_mode_) - { - /// � ����� ������ ����� ���� ��������� ��������� - for (int j = 0 ; j < rxPktInfo->sgList.numScatterSegments; ++j) - { - eth_stack_.rx_handler(rxPktInfo->sgList.list[j].bufPtr, rxPktInfo->sgList.list[j].segmentFilledLen); - } + if(readyQCount == 0) { + break; } - /// �������� ��������� ������ �� ��������. ����� ����������� � ������������� ����� ��������. - EnetDma_checkPktState(&rxPktInfo->pktState, - ENET_PKTSTATE_MODULE_APP, - ENET_PKTSTATE_APP_WITH_DRIVER, - ENET_PKTSTATE_APP_WITH_FREEQ); + // Reload DMA with a new rx free queue as fast as possible + submitFreeRxPkts(readyQCount); - /// ������ ����� � ������� ��������� ������� - EnetQueue_enq(&rx_free_pktq_, &rxPktInfo->node); + rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ); - /// ��������� ��������� ���� �� ������� - rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rx_ready_pktq_); + while(rxPktInfo != nullptr) { + //if (!passive_mode_) { + for (int j = 0 ; j < rxPktInfo->sgList.numScatterSegments; ++j) + { + eth_stack_.rx_handler(rxPktInfo->sgList.list[j].bufPtr, rxPktInfo->sgList.list[j].segmentFilledLen); + } + //} - /// ����������� ������� �������� ������� - ++rx_pkt_counter_; - } + EnetDma_checkPktState(&rxPktInfo->pktState, + ENET_PKTSTATE_MODULE_APP, + ENET_PKTSTATE_APP_WITH_DRIVER, + ENET_PKTSTATE_APP_WITH_FREEQ); - if(id_ == 1) { - //TRY_DUMP_PROFILER(Test_static); - } + EnetQueue_enq(&rx_free_pktq_, &rxPktInfo->node); + + rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ); + + ++rx_pkt_counter_; + } + } while(readyQCount > 0); } } diff --git a/components/free_rtos/ethernet/eth_rx_flow.hpp b/components/free_rtos/ethernet/eth_rx_flow.hpp index 63b7220..1959302 100644 --- a/components/free_rtos/ethernet/eth_rx_flow.hpp +++ b/components/free_rtos/ethernet/eth_rx_flow.hpp @@ -69,7 +69,6 @@ private: uint32_t rx_flow_idx_; EnetDma_RxChHandle dma_handle_; EnetDma_PktQ rx_free_pktq_; - EnetDma_PktQ rx_ready_pktq_; bool passive_mode_; /// ��������� �����, ������ �����������, �� �� ���������� � ���� ��������� }; diff --git a/components/free_rtos/ethernet_industry/eth_ecat_telegram.cpp b/components/free_rtos/ethernet_industry/eth_ecat_telegram.cpp index 7f61cc7..dc928b8 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_ - 1)) { + 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_ip/eth_udp_server.cpp b/components/free_rtos/ethernet_ip/eth_udp_server.cpp index 25c7037..3646f69 100644 --- a/components/free_rtos/ethernet_ip/eth_udp_server.cpp +++ b/components/free_rtos/ethernet_ip/eth_udp_server.cpp @@ -54,6 +54,8 @@ int32_t free_rtos::EthUdpServer::Process(uint8_t * p_data, uint32_t len) /// ����� ���� �� ��������������� if (item == connections_.end()) { + EnetAppUtils_print("EthUdpServer::Process(): Port not found %d\r\n", port); + return 0; } diff --git a/components/free_rtos/ethernet_ip/eth_udp_server.hpp b/components/free_rtos/ethernet_ip/eth_udp_server.hpp index 18f42b8..5155c7c 100644 --- a/components/free_rtos/ethernet_ip/eth_udp_server.hpp +++ b/components/free_rtos/ethernet_ip/eth_udp_server.hpp @@ -8,11 +8,14 @@ #ifndef FREE_RTOS_ETHERNET_IP_ETH_UDP_SERVER_HPP_ #define FREE_RTOS_ETHERNET_IP_ETH_UDP_SERVER_HPP_ +#include + +#include + #include "free_rtos/handler_store/handler_store.hpp" #include "free_rtos/ethernet_ip/eth_udp_server_iface.hpp" #include "free_rtos/ethernet_ip/eth_ip_iface.hpp" #include "free_rtos/ethernet/eth_types.h" -#include namespace free_rtos {