From 4a41a57e084645e955cf9570d155c80cec862e2b Mon Sep 17 00:00:00 2001
From: darya
Date: Tue, 23 Jun 2026 17:43:19 +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 | 4 ++--
Src/CanSerialPortFrame.c | 20 +++++++++++---------
2 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/Inc/CanSerialPortFrame.h b/Inc/CanSerialPortFrame.h
index 398ba1e..329ba94 100644
--- a/Inc/CanSerialPortFrame.h
+++ b/Inc/CanSerialPortFrame.h
@@ -75,7 +75,7 @@ typedef struct {
osMessageQueueId_t rxDataQueue[COUNT_QUEUE];
osMessageQueueId_t rxDataSnifferQueue[COUNT_QUEUE];
- osMutexId_t access;
+ osMutexId_t access[2];
DMA_InitType dmaInitCfg_RX;
DMA_ChannelCfgType chnCfg_RX;
@@ -157,7 +157,7 @@ bool vCanSerialPortFrameMbInit(
);
- void CAN_RxInterrupt_CallBack_Handler(tCanSerialPortFrameFlagchip *env, uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg);
+void CAN_RxInterrupt_CallBack_Handler(tCanSerialPortFrameFlagchip *env, uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg);
void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_t *pBuf);
diff --git a/Src/CanSerialPortFrame.c b/Src/CanSerialPortFrame.c
index 3d8ee96..653e13a 100644
--- a/Src/CanSerialPortFrame.c
+++ b/Src/CanSerialPortFrame.c
@@ -267,7 +267,8 @@ bool vCanSerialPortFrameDMAInit(
env->reInitOne = true;
env->txDataQueueCan = osMessageQueueNew(1, 1, NULL);
- env->access = osMutexNew(NULL);
+ env->access[0] = osMutexNew(NULL);
+ env->access[1] = osMutexNew(NULL);
vCanSerialPortFrameInitStructure(env, 10, 0);
@@ -423,7 +424,8 @@ bool vCanSerialPortFrameMbInit(
if (!env->reInitOne) {
env->reInitOne = true;
- env->access = osMutexNew(NULL);
+ env->access[0] = osMutexNew(NULL);
+ env->access[1] = osMutexNew(NULL);
env->txDataQueueCan = osMessageQueueNew(1, 1, NULL);
vCanSerialPortFrameInitStructure(env, 10, 0);
@@ -715,7 +717,7 @@ FLEXCAN_ErrorType TransmitCan(tCanSerialPortFrameFlagchip *env, FLEXCAN_TxMsgTyp
if (tRetval != FLEXCAN_ERROR_OK) {
FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg->u8TxHandler);
} else {
-
+/*
if (tTxMsg->bWaitTxCompleted) {
uint8_t u8TxHandler;
@@ -726,7 +728,7 @@ FLEXCAN_ErrorType TransmitCan(tCanSerialPortFrameFlagchip *env, FLEXCAN_TxMsgTyp
}
}
-
+*/
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg->u8TxHandler);
}
@@ -735,11 +737,11 @@ FLEXCAN_ErrorType TransmitCan(tCanSerialPortFrameFlagchip *env, FLEXCAN_TxMsgTyp
uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t *data, uint16_t size, uint32_t adr,
- uint8_t canType, uint32_t timeout) {
+ uint8_t canType, uint32_t timeout, uint8_t u8TxHandler) {
uint16_t sent = 0;
- if (osMutexAcquire(env->access, 1000) == osOK) {
+ if (osMutexAcquire(env->access[u8TxHandler], 1000) == osOK) {
env->id = adr;
env->canTypeFrame = canType;
@@ -751,7 +753,7 @@ uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t *
FLEXCAN_ErrorType tRetval;
tTxMsg.u32CanId = env->id;
- tTxMsg.u8TxHandler = 0U;
+ tTxMsg.u8TxHandler = u8TxHandler; //0U;
tTxMsg.bEnFd = FALSE;
tTxMsg.bEnBrs = FALSE;
@@ -760,7 +762,7 @@ uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t *
tTxMsg.eDataType = FLEXCAN_FRAME_DATA;
tTxMsg.eFrameType = (FLEXCAN_IdType) env->canTypeFrame;
tTxMsg.bWaitTxCompleted = 1U;
- tTxMsg.u16WaitTxTimeout = 50;
+ tTxMsg.u16WaitTxTimeout = 50000;
uint16_t len = 0;
@@ -786,7 +788,7 @@ uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t *
size -= tailSize;
}
- osMutexRelease(env->access);
+ osMutexRelease(env->access[u8TxHandler]);
}
return sent;