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;