feat(UML-1462): Добавлена настройка потоков

This commit is contained in:
algin 2023-06-26 11:11:19 +03:00
parent 49ff1af977
commit 3027a88a4f
5 changed files with 56 additions and 33 deletions

View File

@ -291,7 +291,7 @@ bool free_rtos::Eth::Open()
EnetAppUtils_print("%s: Create link tracking tasks\r\n", name_.c_str());
if (!task_[e_taskLink].Create("LinkTask", e_linkTaskPriority, eth_taskLinkTracking, (void*)this, (10U * 1024U)))
if (!task_[e_taskLink].Create("LinkTask", LINK_TASK_PRIORITY, eth_taskLinkTracking, (void*)this, LINK_TASK_STACK_SIZE))
{
EnetAppUtils_print("%s: Failed to create link task\r\n", name_.c_str());
return false;

View File

@ -1,13 +1,14 @@
/*
* eth.hpp
*
* Created on: 6 мар. 2023 г.
* Created on: 6 <EFBFBD><EFBFBD><EFBFBD>. 2023 <EFBFBD>.
* Author: sychev
*/
#ifndef FREE_RTOS_ETHERNET_ETH_HPP_
#define FREE_RTOS_ETHERNET_ETH_HPP_
#include "ethernet/eth_task_settings.hpp"
#include "ethernet/eth_rx_flow.hpp"
#include "ethernet/eth_tx_flow.hpp"
@ -30,13 +31,13 @@ namespace free_rtos {
class Eth {
public:
typedef enum {
e_ethInstSwitch = 1, /// Поддерживается
e_ethInstDualMac_1, /// Не поддерживается
e_ethInstDualMac_2 /// Не поддерживается
e_ethInstSwitch = 1, /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
e_ethInstDualMac_1, /// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
e_ethInstDualMac_2 /// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}TEthInstId;
struct Settings {
uint32_t id; /// Идентификатор порта
uint32_t id; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
/* Peripheral type */
Enet_Type enetType;
@ -84,7 +85,7 @@ private:
private:
enum SignalsId {
e_signalIoctl, /// Завершение передачи по ioctl
e_signalIoctl, /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ioctl
e_signalTotal
};
@ -93,30 +94,30 @@ private:
e_taskTotal
};
uint32_t id_; /// Идентификатор порта
std::string name_; /// Имя порта
uint32_t id_; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
std::string name_; /// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
uint32_t core_id_; /// Идентификатор ядра
uint32_t core_id_; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Enet_Type enetType_; /// Тип порта
Enet_Type enetType_; /// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
/// Идентификатор периферии mac: 1 - для режима SWITCH, 2 и 3 для режима DUAL MAC ( для mac1 и mac2 соответственно)
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mac: 1 - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SWITCH, 2 <20> 3 <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DUAL MAC ( <20><><EFBFBD> mac1 <20> mac2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
uint32_t instId_;
/// Идентификаторы mac портов
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mac <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Enet_MacPort macPort_[e_ethMacTotal];
/// Количество MAC портов
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MAC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t macPortNum_;
/// Основная информация о подключении для периферийного устройства ????
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ????
EnetPer_AttachCoreOutArgs attachInfo_;
/// Enet и Udma обработчик информации для периферийного устройства.
/// Enet <EFBFBD> Udma <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
EnetApp_HandleInfo handleInfo_;
EthTxFlow tx_flow_; ///
EthRxFlow rx_flow_[e_ethMacTotal]; /// Два потока приема в режиме SWITCH
EthRxFlow rx_flow_[e_ethMacTotal]; /// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SWITCH
Semaphore sem_[e_signalTotal];
@ -126,11 +127,11 @@ private:
bool host_ready_;
TEthFrameMacAddr hostMacAddr_; /// собственный мак адрес
TEthFrameMacAddr hostMacAddr_; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
uint32_t vlan_id_;
EthStack eth_stack_; /// Стек логических протоколов
EthStack eth_stack_; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
}

View File

@ -23,8 +23,6 @@
using namespace free_rtos;
#define RX_TASK_STACK_SIZE (10U * 1024U) /// 10<31><30>
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
@ -172,7 +170,7 @@ bool free_rtos::EthRxFlow::open(uint32_t id, int32_t enetDmaRxChId)
return true;
}
if (!rx_task.Create("rx_task", Task::TaskPriorityHiest - 2, rxTaskHandler, this, RX_TASK_STACK_SIZE))
if (!rx_task.Create("rx_task", RX_TASK_PRIORITY, rxTaskHandler, this, RX_TASK_STACK_SIZE))
{
EnetAppUtils_print("rx_flow %u: failed to create rx task.\r\n", id_);
return false;

View File

@ -1,7 +1,7 @@
/*
* eth_rx_dma.hpp
*
* Created on: 6 мар. 2023 г.
* Created on: 6 <EFBFBD><EFBFBD><EFBFBD>. 2023 <EFBFBD>.
* Author: sychev
*/
@ -15,6 +15,7 @@
#include "semaphore/semaphore.hpp"
#include "task/task.hpp"
#include "ethernet/eth_task_settings.hpp"
#include "ethernet/eth_frame.h"
#include "ethernet_ip/eth_stack_iface.hpp"
@ -32,26 +33,26 @@ public:
private:
friend void rxIsrHandler(void *appData); /// Обработчик прерывания по приему
friend void rxIsrHandler(void *appData); /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
friend void rxTaskHandler(void *appData); ///Задача обработки принятых пакетов
friend void rxTaskHandler(void *appData); ///<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void rxProcessPktTask(); ///Функция обработки принятых пакетов
void rxProcessPktTask(); ///<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private:
enum SignalsId {
e_signalRxPkt, /// Прием пакета
e_signalRxPkt, /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
e_signalTotal
};
uint32_t id_; /// Идентификатор канала
bool open_; /// Флаг того, что dma канал уже открыт
uint32_t id_; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool open_; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> dma <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Semaphore sem_[e_signalTotal]; /// Семафоры событий
Semaphore sem_[e_signalTotal]; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Task rx_task; /// Задача приема
Task rx_task; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TEthFrameMacAddr& mac_addr_; /// mac адрес
TEthFrameMacAddr& mac_addr_; /// mac <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t rx_pkt_counter_;
@ -62,7 +63,7 @@ private:
uint32_t rx_flow_idx_;
EnetDma_RxChHandle dma_handle_;
bool passive_mode_; /// Пассивный режим, пакеты принимаются, но не передаются в стек обработки
bool passive_mode_; /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};

View File

@ -0,0 +1,23 @@
/*
* eth_task_settings.hpp
*
* Created on: Jun 26, 2023
* Author: algin
*/
#ifndef FREE_RTOS_ETHERNET_ETH_TASK_SETTINGS_HPP_
#define FREE_RTOS_ETHERNET_ETH_TASK_SETTINGS_HPP_
#include <cstdint>
#include "task/task.hpp"
namespace free_rtos {
static constexpr uint32_t RX_TASK_PRIORITY = Task::TaskPriorityHiest - 2;
static constexpr uint32_t RX_TASK_STACK_SIZE = (10U * 1024U);
static constexpr uint32_t LINK_TASK_PRIORITY = 2;
static constexpr uint32_t LINK_TASK_STACK_SIZE = (10U * 1024U);
}
#endif /* FREE_RTOS_ETHERNET_ETH_TASK_SETTINGS_HPP_ */