feat(UML-1462): Добавлен фиктивный process для отладки

This commit is contained in:
algin 2023-06-21 19:25:27 +03:00
parent 9a96d327f6
commit 49ff1af977
4 changed files with 48 additions and 8 deletions

View File

@ -64,33 +64,41 @@ void EthEcatPdoFMMU::wait_op() {
}
void EthEcatPdoFMMU::process_write_queue(uint8_t* process_data, uint32_t len) {
//DebugP_log("write lock\r\n");
mutex_write_.lock();
auto queue = queue_write_; // Копия очереди
queue_write_.clear();
//DebugP_log("write unlock\r\n");
mutex_write_.unlock();
//DebugP_log("queue write dequeue first\r\n");
auto next = queue.dequeue();
while(next != nullptr) {
//DebugP_log("set value\r\n");
next->set_value(process_data, len);
//DebugP_log("queue write dequeue\r\n");
next = queue.dequeue();
}
}
void EthEcatPdoFMMU::process_read_queue(uint8_t* process_data, uint32_t len) {
//DebugP_log("read lock\r\n");
mutex_read_.lock();
auto queue = queue_read_; // Копия очереди
queue_read_.clear();
//DebugP_log("read unlock\r\n");
mutex_read_.unlock();
//DebugP_log("queue read dequeue first\r\n");
auto next = queue.dequeue();
while(next != nullptr) {
//DebugP_log("set value\r\n");
next->set_value(process_data, len);
//DebugP_log("queue read dequeue\r\n");
next = queue.dequeue();
}
}
@ -114,12 +122,7 @@ void EthEcatPdoFMMU::process() {
read_write(0, 0, process_data);
//read(0, process_data);
/*
for(uint8_t& byte : process_data) {
DebugP_log("0x%01x", byte);
}
DebugP_log("\r\n");
*/
process_read_queue(process_data.data(), process_data.size());
process_write_queue(process_data.data(), process_data.size());
@ -129,6 +132,36 @@ void EthEcatPdoFMMU::process() {
}
}
void EthEcatPdoFMMU::process_fake(uint32_t period_microsec = 250) {
std::vector<uint8_t> process_data(110);
free_rtos::Timer& ecat_timer = ecat_buffer_.get_ecat().get_ecat_timer();
Timer::Settings ecat_tmr_sett = {
.input_clk_Hz = 25000000, // 25MHz
.base_address = 0x2400000u, // memory mapping,
.clock_src_mux_addr = 0x430081B0u, // sysconfig
.int_num = 152u, // sysconfig
.int_priority = 4, // sysconfig
.period_us = period_microsec /// microsec
};
ecat_timer.Init(ecat_tmr_sett);
ecat_timer.Start();
while(1) {
ecat_timer.Wait();
//DebugP_log("Tick !\r\n");
process_read_queue(process_data.data(), process_data.size());
process_write_queue(process_data.data(), process_data.size());
pdo_counter_++;
}
DebugP_log("process_fake terminated\r\n");
vTaskDelete(NULL);
}
}
}

View File

@ -54,6 +54,7 @@ public:
void init();
void process();
void process_fake(uint32_t period_microsec);
uint32_t get_pdo_counter() {
return pdo_counter_;

View File

@ -72,6 +72,10 @@ void EthEcatApi::process() {
ecat_pdo_fmmu_.process();
}
void EthEcatApi::process_fake(uint32_t period_microsec = 250) {
ecat_pdo_fmmu_.process_fake(period_microsec);
}
std::vector<ecat_buffer::PDOMap>& EthEcatApi::get_ecat_pdo_map() {
return ecat_sdo_mailbox_.get_pdo_map();
}

View File

@ -9,6 +9,7 @@
#define FREE_RTOS_ETHERNET_INDUSTRY_ETH_ECAT_API_HPP_
#define COMX 1
#define PROCESS_FAKE 1
#include "ethernet/eth.hpp"
#include "ethernet_industry/eth_ecat.hpp"
@ -40,6 +41,7 @@ public:
bool config_init(TEthMacPorts port_id, uint16_t address_base, uint32_t period_microsec);
void process(); // Внутри бесконечный цикл. Запускать в отдельном потоке
void process_fake(uint32_t period_microsec);
std::vector<ecat_buffer::PDOMap>& get_ecat_pdo_map();
uint32_t get_pdo_counter() {