gateway_mcu/CH32V303-FreeRTOS/App/application/Slave/Src/slaveQueueUart.c

431 lines
14 KiB
C
Raw Normal View History

#include "slaveQueueUart.h"
#include "uart_dev.h"
#include "slaveBusIdleDetection.h"
#include "FM_GPIO.h"
#include "semphr.h"
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ĵ<EFBFBD>С */
#define QUEUE_SIZE 4
/* 485<38><35><EFBFBD>еij<D0B5><C4B3><EFBFBD> */
#define rs485QueueLength 5
#define mcuUartQueueLength 10
/* <20><><EFBFBD><EFBFBD>ͨѶ<CDA8>ڵĶ<DAB5><C4B6><EFBFBD> */
QueueHandle_t J1_485_Queue = NULL;
QueueHandle_t J3_485_Queue = NULL;
QueueHandle_t J5_485_Queue = NULL;
QueueHandle_t J7_485_Queue = NULL;
QueueHandle_t J8_485_Queue = NULL;
QueueHandle_t J9_485_Queue = NULL;
QueueHandle_t mcu_uart_Queue = NULL;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD> */
static SemaphoreHandle_t J1_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t J3_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t J5_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t J7_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t J8_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t J9_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t slaveMcu_uart_FreeMemorySemaphore = NULL;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>
static QueueSetHandle_t slaveBinarySemaphoreSet = NULL;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD> */
static SemaphoreHandle_t J1_sendOverSemaphore = NULL;
static SemaphoreHandle_t J3_sendOverSemaphore = NULL;
static SemaphoreHandle_t J5_sendOverSemaphore = NULL;
static SemaphoreHandle_t J7_sendOverSemaphore = NULL;
static SemaphoreHandle_t J8_sendOverSemaphore = NULL;
static SemaphoreHandle_t J9_sendOverSemaphore = NULL;
static SemaphoreHandle_t slaveMcu_uart_sendOverSemaphore = NULL;
/* ͨ<><CDA8><EFBFBD>ýṹ<C3BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>ýṹ<C3BD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ڴ<EFBFBD> */
typedef struct _slaveQueueSendDataInfo {
slaveQueueUartSendInfo *J1_485_data;
slaveQueueUartSendInfo *J3_485_data;
slaveQueueUartSendInfo *J5_485_data;
slaveQueueUartSendInfo *J7_485_data;
slaveQueueUartSendInfo *J8_485_data;
slaveQueueUartSendInfo *J9_485_data;
slaveQueueUartSendInfo *mcu_uart_data;
} slaveQueueSendDataInfo;
static slaveQueueSendDataInfo slaveQueueSendData;
/**
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD>к<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
void slaveUartSendInit(void)
{
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
J1_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
J3_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
J5_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
J7_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
J8_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
J9_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
mcu_uart_Queue = xQueueCreate(mcuUartQueueLength, QUEUE_SIZE);
/* <20><>ʼ<EFBFBD><CABC><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD><DAB4><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
J1_FreeMemorySemaphore = xSemaphoreCreateBinary();
J3_FreeMemorySemaphore = xSemaphoreCreateBinary();
J5_FreeMemorySemaphore = xSemaphoreCreateBinary();
J7_FreeMemorySemaphore = xSemaphoreCreateBinary();
J8_FreeMemorySemaphore = xSemaphoreCreateBinary();
J9_FreeMemorySemaphore = xSemaphoreCreateBinary();
slaveMcu_uart_FreeMemorySemaphore = xSemaphoreCreateBinary();
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>
slaveBinarySemaphoreSet = xQueueCreateSet(7);
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
xQueueAddToSet(J1_FreeMemorySemaphore, slaveBinarySemaphoreSet);
xQueueAddToSet(J3_FreeMemorySemaphore, slaveBinarySemaphoreSet);
xQueueAddToSet(J5_FreeMemorySemaphore, slaveBinarySemaphoreSet);
xQueueAddToSet(J7_FreeMemorySemaphore, slaveBinarySemaphoreSet);
xQueueAddToSet(J8_FreeMemorySemaphore, slaveBinarySemaphoreSet);
xQueueAddToSet(J9_FreeMemorySemaphore, slaveBinarySemaphoreSet);
xQueueAddToSet(slaveMcu_uart_FreeMemorySemaphore, slaveBinarySemaphoreSet);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD> */
J1_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J1_sendOverSemaphore);
J3_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J3_sendOverSemaphore);
J5_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J5_sendOverSemaphore);
J7_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J7_sendOverSemaphore);
J8_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J8_sendOverSemaphore);
J9_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J9_sendOverSemaphore);
slaveMcu_uart_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(slaveMcu_uart_sendOverSemaphore);
}
/**
* @brief <EFBFBD><EFBFBD>J1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J1QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J1_485_Queue, slaveQueueSendData.J1_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J1_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J1_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
slaveUartInterruptSend(g_J1_handle, slaveQueueSendData.J1_485_data->data
, slaveQueueSendData.J1_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>J3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J3QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J3_485_Queue, slaveQueueSendData.J3_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J3_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J3_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
slaveUartInterruptSend(g_J3_handle, slaveQueueSendData.J3_485_data->data
, slaveQueueSendData.J3_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>J5<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J5QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J5_485_Queue, slaveQueueSendData.J5_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J5_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J5_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
slaveUartInterruptSend(g_J5_handle, slaveQueueSendData.J5_485_data->data
, slaveQueueSendData.J5_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>J7<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J7QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J7_485_Queue, slaveQueueSendData.J7_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J7_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J7_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
slaveUartInterruptSend(g_J7_handle, slaveQueueSendData.J7_485_data->data
, slaveQueueSendData.J7_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>J8<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J8QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J8_485_Queue, slaveQueueSendData.J8_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J8_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J8_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
slaveUartInterruptSend(g_J8_handle, slaveQueueSendData.J8_485_data->data
, slaveQueueSendData.J8_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>J9<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J9QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J9_485_Queue, slaveQueueSendData.J9_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J9_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J9_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
slaveUartInterruptSend(g_J9_handle, slaveQueueSendData.J9_485_data->data
, slaveQueueSendData.J9_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>slaveMcu<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void slaveMcuQueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(mcu_uart_Queue, slaveQueueSendData.mcu_uart_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(slaveMcu_uart_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
slaveUartInterruptSend(g_Mcu_handle, slaveQueueSendData.mcu_uart_data->data
, slaveQueueSendData.mcu_uart_data->length);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
* @param
* @retval
*/
void J1_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J1_FreeMemorySemaphore, 0);
}
void J3_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J3_FreeMemorySemaphore, 0);
}
void J5_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J5_FreeMemorySemaphore, 0);
}
void J7_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J7_FreeMemorySemaphore, 0);
}
void J8_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J8_FreeMemorySemaphore, 0);
}
void J9_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J9_FreeMemorySemaphore, 0);
}
void slaveMcu_uart_IN_TXE(void)
{
xSemaphoreGiveFromISR(slaveMcu_uart_FreeMemorySemaphore, 0);
}
/**
* @brief ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD>ڴ<EFBFBD>
* @param
* @retval
*/
void binarySemaphoreFreeMemory(void)
{
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>м<EFBFBD><D0BC>е<EFBFBD><D0B5>¼<EFBFBD>
QueueSetMemberHandle_t xActivatedMember = xQueueSelectFromSet(slaveBinarySemaphoreSet, portMAX_DELAY);
if (xActivatedMember == J1_FreeMemorySemaphore) {
vPortFree(slaveQueueSendData.J1_485_data);
vTaskDelay(1);
readJ1_485;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>¼<EFBFBD>
xSemaphoreTake(J1_FreeMemorySemaphore, 0);
xSemaphoreGive(J1_sendOverSemaphore);
}
else if (xActivatedMember == J3_FreeMemorySemaphore) {
vPortFree(slaveQueueSendData.J3_485_data);
vTaskDelay(1);
readJ3_485;
xSemaphoreTake(J3_FreeMemorySemaphore, 0);
xSemaphoreGive(J3_sendOverSemaphore);
}
else if (xActivatedMember == J5_FreeMemorySemaphore) {
vPortFree(slaveQueueSendData.J5_485_data);
vTaskDelay(1);
readJ5_485;
xSemaphoreTake(J5_FreeMemorySemaphore, 0);
xSemaphoreGive(J5_sendOverSemaphore);
}
else if (xActivatedMember == J7_FreeMemorySemaphore) {
vPortFree(slaveQueueSendData.J7_485_data);
vTaskDelay(1);
readJ7_485;
xSemaphoreTake(J7_FreeMemorySemaphore, 0);
xSemaphoreGive(J7_sendOverSemaphore);
}
else if (xActivatedMember == J8_FreeMemorySemaphore) {
vPortFree(slaveQueueSendData.J8_485_data);
vTaskDelay(1);
readJ8_485;
xSemaphoreTake(J8_FreeMemorySemaphore, 0);
xSemaphoreGive(J8_sendOverSemaphore);
}
else if (xActivatedMember == J9_FreeMemorySemaphore) {
vPortFree(slaveQueueSendData.J9_485_data);
vTaskDelay(1);
readJ9_485;
xSemaphoreTake(J9_FreeMemorySemaphore, 0);
xSemaphoreGive(J9_sendOverSemaphore);
}
else if (xActivatedMember == slaveMcu_uart_FreeMemorySemaphore) {
vPortFree(slaveQueueSendData.mcu_uart_data);
xSemaphoreTake(slaveMcu_uart_FreeMemorySemaphore, 0);
xSemaphoreGive(slaveMcu_uart_sendOverSemaphore);
}
}
/**
* @brief ͨ<EFBFBD><EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD>
* @param device <EFBFBD>
data ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><EFBFBD>
len <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
* @retval 0<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
1<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0xFF<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
uint8_t slaveUartInterruptSend(device_handle device,uint8_t *data, uint16_t len)
{
/* ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uart_device_info *dev = (uart_device_info *)device;
dev->uart_send_data.data = data;
dev->uart_send_data.count = 0;
dev->uart_send_data.len = len;
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> */
if (device == g_J1_handle) {
xSemaphoreTake(J1_sendOverSemaphore, 0);
writeJ1_485;
USART_ITConfig(J1_USART, USART_IT_TXE, ENABLE);
USART_SendData(J1_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_J3_handle) {
xSemaphoreTake(J3_sendOverSemaphore, 0);
writeJ3_485;
USART_ITConfig(J3_USART, USART_IT_TXE, ENABLE);
USART_SendData(J3_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_J5_handle) {
xSemaphoreTake(J5_sendOverSemaphore, 0);
writeJ5_485;
USART_ITConfig(J5_USART, USART_IT_TXE, ENABLE);
USART_SendData(J5_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_J7_handle) {
xSemaphoreTake(J7_sendOverSemaphore, 0);
writeJ7_485;
USART_ITConfig(J7_USART, USART_IT_TXE, ENABLE);
USART_SendData(J7_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_J8_handle) {
xSemaphoreTake(J8_sendOverSemaphore, 0);
writeJ8_485;
USART_ITConfig(J8_USART, USART_IT_TXE, ENABLE);
USART_SendData(J8_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_J9_handle) {
xSemaphoreTake(J9_sendOverSemaphore, 0);
writeJ9_485;
USART_ITConfig(J9_USART, USART_IT_TXE, ENABLE);
USART_SendData(J9_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_Mcu_handle) {
xSemaphoreTake(slaveMcu_uart_sendOverSemaphore, 0);
USART_ITConfig(Mcu_USART, USART_IT_TXE, ENABLE);
USART_SendData(Mcu_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
return 0;
}