From 68bf8fd28f4918e93008d5682f9fe95b6a2d528d Mon Sep 17 00:00:00 2001
From: darya
Date: Tue, 23 Jun 2026 21:20:33 +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=2023.06.2026?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Inc/CanSerialPortFrame.h | 5 +++--
Src/CanSerialPortFrame.c | 17 ++++++++++-------
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/Inc/CanSerialPortFrame.h b/Inc/CanSerialPortFrame.h
index 329ba94..3b3acc3 100644
--- a/Inc/CanSerialPortFrame.h
+++ b/Inc/CanSerialPortFrame.h
@@ -39,6 +39,7 @@ typedef struct {
} can_rx_message_type;
+#define COUNT_TX_HANDLER 3
#define COUNT_QUEUE 4
typedef struct {
@@ -54,7 +55,7 @@ typedef struct {
uint8_t CAN_INDEX;
- osMessageQueueId_t txDataQueueCan;
+ osMessageQueueId_t txDataQueueCan[COUNT_TX_HANDLER];
uint32_t id;
uint32_t id1;
@@ -75,7 +76,7 @@ typedef struct {
osMessageQueueId_t rxDataQueue[COUNT_QUEUE];
osMessageQueueId_t rxDataSnifferQueue[COUNT_QUEUE];
- osMutexId_t access[2];
+ osMutexId_t access[COUNT_TX_HANDLER];
DMA_InitType dmaInitCfg_RX;
DMA_ChannelCfgType chnCfg_RX;
diff --git a/Src/CanSerialPortFrame.c b/Src/CanSerialPortFrame.c
index 653e13a..8328501 100644
--- a/Src/CanSerialPortFrame.c
+++ b/Src/CanSerialPortFrame.c
@@ -266,9 +266,10 @@ bool vCanSerialPortFrameDMAInit(
env->reInitOne = true;
- env->txDataQueueCan = osMessageQueueNew(1, 1, NULL);
- env->access[0] = osMutexNew(NULL);
- env->access[1] = osMutexNew(NULL);
+ for (uint8_t i = 0; i < COUNT_TX_HANDLER; ++i) {
+ env->access[i] = osMutexNew(NULL);
+ env->txDataQueueCan[i] = osMessageQueueNew(1, 1, NULL);
+ }
vCanSerialPortFrameInitStructure(env, 10, 0);
@@ -424,9 +425,11 @@ bool vCanSerialPortFrameMbInit(
if (!env->reInitOne) {
env->reInitOne = true;
- env->access[0] = osMutexNew(NULL);
- env->access[1] = osMutexNew(NULL);
- env->txDataQueueCan = osMessageQueueNew(1, 1, NULL);
+ for (uint8_t i = 0; i < COUNT_TX_HANDLER; ++i) {
+ env->access[i] = osMutexNew(NULL);
+ env->txDataQueueCan[i] = osMessageQueueNew(1, 1, NULL);
+ }
+
vCanSerialPortFrameInitStructure(env, 10, 0);
@@ -721,7 +724,7 @@ FLEXCAN_ErrorType TransmitCan(tCanSerialPortFrameFlagchip *env, FLEXCAN_TxMsgTyp
if (tTxMsg->bWaitTxCompleted) {
uint8_t u8TxHandler;
- if (osMessageQueueGet(env->txDataQueueCan, &u8TxHandler, NULL, tTxMsg->bWaitTxCompleted) == osOK) {
+ if (osMessageQueueGet(env->txDataQueueCan[tTxMsg->u8TxHandler], &u8TxHandler, NULL, tTxMsg->bWaitTxCompleted) == osOK) {
tRetval = FLEXCAN_ERROR_OK;
} else {
tRetval = FLEXCAN_ERROR_TIMEOUT;