feat(UML-1622): Добавлены статические очереди чтения записи PDO

This commit is contained in:
algin 2023-07-27 13:55:26 +03:00
parent b8eaf8066f
commit dd6c6de255
3 changed files with 49 additions and 11 deletions

View File

@ -69,15 +69,24 @@ 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_; // Копия очереди
auto static_queue = static_queue_write_;
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 static_next = static_queue.dequeue();
while(static_next != nullptr) {
//DebugP_log("set value\r\n");
static_next->set_value(process_data, len);
//DebugP_log("queue read dequeue\r\n");
static_next = static_queue.dequeue();
}
auto next = queue.dequeue();
while(next != nullptr) {
@ -92,12 +101,22 @@ 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_; // Копия очереди
auto static_queue = static_queue_read_;
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 static_next = static_queue.dequeue();
while(static_next != nullptr) {
//DebugP_log("set value\r\n");
static_next->set_value(process_data, len);
//DebugP_log("queue read dequeue\r\n");
static_next = static_queue.dequeue();
}
auto next = queue.dequeue();
while(next != nullptr) {

View File

@ -95,19 +95,27 @@ public:
}
void pdo_write_async_static(custom_promise::IPromise& promise) {
mutex_write_.lock();
static_queue_write_ + promise;
mutex_write_.unlock();
}
void pdo_read_async_static(custom_promise::IPromise& promise) {
mutex_read_.lock();
static_queue_read_ + promise;
mutex_read_.unlock();
}
void pdo_write_async(custom_promise::IPromise& promise) {
mutex_write_.lock();
queue_write_ + promise;
mutex_write_.unlock();
}
void pdo_read_async(custom_promise::IPromise& promise) {
mutex_read_.lock();
queue_read_ + promise;
mutex_read_.unlock();
}
@ -119,6 +127,9 @@ private:
Mutex mutex_write_;
Mutex mutex_read_;
queue::Queue<custom_promise::IPromise> static_queue_write_;
queue::Queue<custom_promise::IPromise> static_queue_read_;
queue::Queue<custom_promise::IPromise> queue_write_;
queue::Queue<custom_promise::IPromise> queue_read_;

View File

@ -57,6 +57,14 @@ public:
return ecat_pdo_fmmu_.pdo_read<DataTypes...>(timeout_ticks, offset, data...);
}
void pdo_write_async_static(custom_promise::IPromise& promise) {
ecat_pdo_fmmu_.pdo_write_async_static(promise);
}
void pdo_read_async_static(custom_promise::IPromise& promise) {
ecat_pdo_fmmu_.pdo_read_async_static(promise);
}
void pdo_write_async(custom_promise::IPromise& promise) {
ecat_pdo_fmmu_.pdo_write_async(promise);
}