From 72d6add914fe365ae3dbe6c83091cea201cea0d7 Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 6 Apr 2026 12:59:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/SerialPortVirt.h | 1 + Src/SerialPortVirt.c | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Inc/SerialPortVirt.h b/Inc/SerialPortVirt.h index 927e723..33d803f 100644 --- a/Inc/SerialPortVirt.h +++ b/Inc/SerialPortVirt.h @@ -11,6 +11,7 @@ typedef struct { osMessageQueueId_t queue; + osMutexId_t access; } tSerialPortVirt; void SerialPortVirt_Init(tSerialPortVirt *env, uint16_t queueBufferLen); diff --git a/Src/SerialPortVirt.c b/Src/SerialPortVirt.c index f7c6381..d8c7d74 100644 --- a/Src/SerialPortVirt.c +++ b/Src/SerialPortVirt.c @@ -5,6 +5,7 @@ void SerialPortVirt_Init(tSerialPortVirt *env, uint16_t queueBufferLen) { env->queue = osMessageQueueNew(queueBufferLen, 1, NULL); + env->access = osMutexNew(NULL); } static uint16_t vSerialPortReceiveQueue(uint8_t *data, uint16_t size, uint32_t timeout, osMessageQueueId_t queueId) { @@ -34,7 +35,16 @@ static uint16_t vSerialPortReceiveQueue(uint8_t *data, uint16_t size, uint32_t t } static uint16_t vSerialPortReceive(tSerialPortVirt *env, uint8_t *data, uint16_t size, uint32_t timeout) { - return vSerialPortReceiveQueue(data, size, timeout, env->queue); + + uint16_t result = 0; + +// if (osMutexAcquire(env->access, 1000) == osOK) { + result = vSerialPortReceiveQueue(data, size, timeout, env->queue); +// osMutexRelease(env->access); +// } + + return result; + } static uint16_t vSerialPortTransmitQueue(uint8_t *data, uint16_t size, uint32_t timeout, osMessageQueueId_t queueId) { @@ -70,7 +80,15 @@ static uint16_t vSerialPortTransmitQueue(uint8_t *data, uint16_t size, uint32_t static uint16_t vSerialPortTransmit(tSerialPortVirt *env, uint8_t *data, uint16_t size, uint32_t timeout) { - return vSerialPortTransmitQueue(data, size, timeout, env->queue); + + uint16_t result = 0; + +// if (osMutexAcquire(env->access, 1000) == osOK) { + result = vSerialPortTransmitQueue(data, size, timeout, env->queue); +// osMutexRelease(env->access); +// } + + return result; } tSerialPortIO SerialPortVirt_GetIo(tSerialPortVirt *env) {