11.12_1:解决了接收信号量的bug,优化了网关控制节点执行器的延迟。
This commit is contained in:
@@ -117,7 +117,7 @@ eLoRaMsgRecStatus xLoRaMessageReceived(uint8_t *pucData)
|
|||||||
return statusExeOff;
|
return statusExeOff;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return statusNode1;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,6 +190,6 @@ eLoRaMsgRecStatus xLoRaMsgProcess(uint8_t ucDataRecNodeId, uint8_t ucDataRecExeI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return statusNode1;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,8 @@ typedef enum {
|
|||||||
statusBuzzerOn,
|
statusBuzzerOn,
|
||||||
statusBuzzerOff,
|
statusBuzzerOff,
|
||||||
statusServoOn,
|
statusServoOn,
|
||||||
statusServoOff
|
statusServoOff,
|
||||||
|
null
|
||||||
}eLoRaMsgRecStatus;
|
}eLoRaMsgRecStatus;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -130,7 +130,7 @@ void USART3_IRQHandler(void)
|
|||||||
/* code */
|
/* code */
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||||
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART3);
|
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART3);
|
||||||
xQueueSendFromISR(xQueueUsart3ReHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
||||||
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
|
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
|
||||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||||
|
|||||||
@@ -8,13 +8,15 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define vLoRaIrqHandler USART3_IRQHandler
|
||||||
|
|
||||||
#define USART3_GPIO_PIN_TX GPIO_Pin_10
|
#define USART3_GPIO_PIN_TX GPIO_Pin_10
|
||||||
#define USART3_GPIO_PIN_RX GPIO_Pin_11
|
#define USART3_GPIO_PIN_RX GPIO_Pin_11
|
||||||
#define USART3_GPIO_PIN_ATK_AUX GPIO_Pin_4 // PA4
|
#define USART3_GPIO_PIN_ATK_AUX GPIO_Pin_4 // PA4
|
||||||
#define USART3_GPIO_PIN_ATK_MD0 GPIO_Pin_3 // PB3
|
#define USART3_GPIO_PIN_ATK_MD0 GPIO_Pin_3 // PB3
|
||||||
#define USART3_QUEUE_LENGTH 256
|
#define USART3_QUEUE_LENGTH 256
|
||||||
|
|
||||||
extern QueueHandle_t xQueueUsart3ReHdlr;
|
extern QueueHandle_t xQueueUsart3IrqHdlr;
|
||||||
|
|
||||||
void vUsart3Init(uint32_t ulUsart3Baudrate);
|
void vUsart3Init(uint32_t ulUsart3Baudrate);
|
||||||
void vUsart3SendByte(uint8_t ucByte);
|
void vUsart3SendByte(uint8_t ucByte);
|
||||||
|
|||||||
@@ -11,29 +11,57 @@
|
|||||||
|
|
||||||
/* <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һһ<D2BB><D2BB>Ӧ<EFBFBD><D3A6> */
|
/* <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һһ<D2BB><D2BB>Ӧ<EFBFBD><D3A6> */
|
||||||
TaskHandle_t xStateLedTaskHdlr;
|
TaskHandle_t xStateLedTaskHdlr;
|
||||||
|
TaskHandle_t xFanCtrlTaskHdlr;
|
||||||
TaskHandle_t xDht11TaskHdlr;
|
TaskHandle_t xDht11TaskHdlr;
|
||||||
TaskHandle_t xRelayCtrlTaskHdlr;
|
|
||||||
TaskHandle_t xLoRaToGateTskHdlr;
|
TaskHandle_t xLoRaToGateTskHdlr;
|
||||||
TaskHandle_t xLoRaMsgRecTskHdlr;
|
TaskHandle_t xLoRaMsgRecTskHdlr;
|
||||||
|
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD> */
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD> */
|
||||||
QueueHandle_t xQueueTempHdlr;
|
QueueHandle_t xQueueTempHdlr;
|
||||||
QueueHandle_t xQueueHumiHdlr;
|
QueueHandle_t xQueueHumiHdlr;
|
||||||
QueueHandle_t xQueueUsart3ReHdlr;
|
QueueHandle_t xQueueUsart3IrqHdlr;
|
||||||
|
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||||
SemaphoreHandle_t xSemLedOnHandler;
|
SemaphoreHandle_t xSemLedOnHandler;
|
||||||
SemaphoreHandle_t xSemLedOffHandler;
|
SemaphoreHandle_t xSemLedOffHandler;
|
||||||
|
SemaphoreHandle_t xSemFanOnHdlr;
|
||||||
|
SemaphoreHandle_t xSemFanOffHdlr;
|
||||||
|
|
||||||
/* <20><>˸LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>NULL<4C><4C> */
|
/* <20><>˸LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>NULL<4C><4C> */
|
||||||
void vStateLedTask(void *pvParameters)
|
void vStateLedTask(void *pvParameters)
|
||||||
{
|
{
|
||||||
while(1)
|
while(1)
|
||||||
|
{
|
||||||
|
// vPc13LedOn();
|
||||||
|
// vTaskDelay(1000);
|
||||||
|
// vPc13LedOff();
|
||||||
|
// vTaskDelay(1000);
|
||||||
|
if (xSemaphoreTake(xSemLedOnHandler, pdMS_TO_TICKS(10)) == pdTRUE)
|
||||||
{
|
{
|
||||||
vPc13LedOn();
|
vPc13LedOn();
|
||||||
vTaskDelay(1000);
|
xSemaphoreGive(xSemLedOnHandler);
|
||||||
|
} else if (xSemaphoreTake(xSemLedOffHandler, pdMS_TO_TICKS(10)) == pdTRUE)
|
||||||
|
{
|
||||||
|
/* code */
|
||||||
vPc13LedOff();
|
vPc13LedOff();
|
||||||
vTaskDelay(1000);
|
xSemaphoreGive(xSemLedOffHandler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void vFanControlTask(void *pvParameters)
|
||||||
|
{
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
/* code */
|
||||||
|
if (xSemaphoreTake(xSemFanOnHdlr, pdMS_TO_TICKS(10)) == pdTRUE)
|
||||||
|
{
|
||||||
|
vFanOn();
|
||||||
|
} else if (xSemaphoreTake(xSemFanOffHdlr, pdMS_TO_TICKS(10)) == pdTRUE)
|
||||||
|
{
|
||||||
|
/* code */
|
||||||
|
vFanOff();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,21 +122,16 @@ void vLoRaToGatePktTask(void *pvParameters)
|
|||||||
/* code */
|
/* code */
|
||||||
vUsart3SendArray(&ucRecTempData, 1);
|
vUsart3SendArray(&ucRecTempData, 1);
|
||||||
vUsart3SendArray(&ucRecHumiData, 1);
|
vUsart3SendArray(&ucRecHumiData, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (xSemaphoreTake(xSemLedOnHandler, pdMS_TO_TICKS(10)) == pdTRUE)
|
if (xSemaphoreTake(xSemLedOnHandler, pdMS_TO_TICKS(10)) == pdTRUE)
|
||||||
{
|
{
|
||||||
/* code */
|
/* code */
|
||||||
vUsart3SendArray(&testData, 1);
|
vUsart3SendArray(&testData, 1);
|
||||||
vPc13LedOn();
|
} else if (xSemaphoreTake(xSemLedOffHandler, pdMS_TO_TICKS(10)) == pdTRUE)
|
||||||
}
|
|
||||||
else if (xSemaphoreTake(xSemLedOffHandler, pdMS_TO_TICKS(10)) == pdTRUE)
|
|
||||||
{
|
{
|
||||||
/* code */
|
/* code */
|
||||||
vUsart3SendArray(&ledOff, 1);
|
vUsart3SendArray(&ledOff, 1);
|
||||||
vPc13LedOff();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vTaskDelay(1000);
|
vTaskDelay(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -119,9 +142,9 @@ void vLoRaMsgRecTask(void *pvParameters)
|
|||||||
uint8_t ucRetvalQueueNodeId = 0, ucRetvalQueueExeId = 0, ucRetvalQueueExeSta = 0;
|
uint8_t ucRetvalQueueNodeId = 0, ucRetvalQueueExeId = 0, ucRetvalQueueExeSta = 0;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
ucRetvalQueueNodeId = xQueueReceive(xQueueUsart3ReHdlr, &ucDataRecNodeId, portMAX_DELAY);
|
ucRetvalQueueNodeId = xQueueReceive(xQueueUsart3IrqHdlr, &ucDataRecNodeId, portMAX_DELAY);
|
||||||
ucRetvalQueueExeId = xQueueReceive(xQueueUsart3ReHdlr, &ucDataRecExeId, portMAX_DELAY);
|
ucRetvalQueueExeId = xQueueReceive(xQueueUsart3IrqHdlr, &ucDataRecExeId, portMAX_DELAY);
|
||||||
ucRetvalQueueExeSta = xQueueReceive(xQueueUsart3ReHdlr, &ucDataRecExeSta, portMAX_DELAY);
|
ucRetvalQueueExeSta = xQueueReceive(xQueueUsart3IrqHdlr, &ucDataRecExeSta, portMAX_DELAY);
|
||||||
while (ucRetvalQueueNodeId == pdTRUE && ucRetvalQueueExeId == pdTRUE && ucRetvalQueueExeSta == pdTRUE)
|
while (ucRetvalQueueNodeId == pdTRUE && ucRetvalQueueExeId == pdTRUE && ucRetvalQueueExeSta == pdTRUE)
|
||||||
{
|
{
|
||||||
/* code */
|
/* code */
|
||||||
@@ -133,6 +156,14 @@ void vLoRaMsgRecTask(void *pvParameters)
|
|||||||
{
|
{
|
||||||
/* code */
|
/* code */
|
||||||
xSemaphoreGive(xSemLedOffHandler);
|
xSemaphoreGive(xSemLedOffHandler);
|
||||||
|
} else if (xLoRaMsgProcess(ucDataRecNodeId, ucDataRecExeId, ucDataRecExeSta) == statusFanOn)
|
||||||
|
{
|
||||||
|
/* code */
|
||||||
|
xSemaphoreGive(xSemFanOnHdlr);
|
||||||
|
} else if (xLoRaMsgProcess(ucDataRecNodeId, ucDataRecExeId, ucDataRecExeSta) == statusFanOn)
|
||||||
|
{
|
||||||
|
/* code */
|
||||||
|
xSemaphoreGive(xSemFanOffHdlr);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -141,16 +172,21 @@ void vLoRaMsgRecTask(void *pvParameters)
|
|||||||
|
|
||||||
void vCreateTasksList(void)
|
void vCreateTasksList(void)
|
||||||
{
|
{
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD> */
|
|
||||||
// taskENTER_CRITICAL();
|
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F1A3ACB2><EFBFBD><EFBFBD>ֱ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD><C6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>ջ<EFBFBD><D5BB>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F1A3ACB2><EFBFBD><EFBFBD>ֱ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD><C6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>ջ<EFBFBD><D5BB>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||||
// xTaskCreate(
|
xTaskCreate(
|
||||||
// (TaskFunction_t ) vStateLedTask,
|
(TaskFunction_t ) vStateLedTask,
|
||||||
// (char * ) "TaskName_StateLed",
|
(char * ) "TaskName_StateLed",
|
||||||
// (configSTACK_DEPTH_TYPE) 512,
|
(configSTACK_DEPTH_TYPE) 512,
|
||||||
// (void * ) NULL,
|
(void * ) NULL,
|
||||||
// (UBaseType_t ) 2,
|
(UBaseType_t ) 2,
|
||||||
// (TaskHandle_t * ) &xStateLedTaskHdlr);
|
(TaskHandle_t * ) &xStateLedTaskHdlr);
|
||||||
|
xTaskCreate(
|
||||||
|
(TaskFunction_t ) vFanControlTask,
|
||||||
|
(char * ) "TaskName_FanControl",
|
||||||
|
(configSTACK_DEPTH_TYPE) 256,
|
||||||
|
(void * ) NULL,
|
||||||
|
(UBaseType_t ) 2,
|
||||||
|
(TaskHandle_t * ) &xFanCtrlTaskHdlr);
|
||||||
xTaskCreate(
|
xTaskCreate(
|
||||||
(TaskFunction_t ) vDht11Task,
|
(TaskFunction_t ) vDht11Task,
|
||||||
(char * ) "TaskName_DHT11",
|
(char * ) "TaskName_DHT11",
|
||||||
@@ -172,8 +208,6 @@ void vCreateTasksList(void)
|
|||||||
(void * ) NULL,
|
(void * ) NULL,
|
||||||
(UBaseType_t ) 2,
|
(UBaseType_t ) 2,
|
||||||
(TaskHandle_t * ) &xLoRaMsgRecTskHdlr);
|
(TaskHandle_t * ) &xLoRaMsgRecTskHdlr);
|
||||||
/* <20>˳<EFBFBD><CBB3>ٽ<EFBFBD><D9BD><EFBFBD> */
|
|
||||||
// taskEXIT_CRITICAL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void vCreateQueuesList(void)
|
void vCreateQueuesList(void)
|
||||||
@@ -187,10 +221,10 @@ void vCreateQueuesList(void)
|
|||||||
xQueueHumiHdlr = xQueueCreate(
|
xQueueHumiHdlr = xQueueCreate(
|
||||||
(UBaseType_t) 5,
|
(UBaseType_t) 5,
|
||||||
(UBaseType_t) sizeof(uint8_t));
|
(UBaseType_t) sizeof(uint8_t));
|
||||||
xQueueUsart3ReHdlr = xQueueCreate(
|
xQueueUsart3IrqHdlr = xQueueCreate(
|
||||||
(UBaseType_t) 64,
|
(UBaseType_t) 64,
|
||||||
(UBaseType_t) sizeof(uint8_t *));
|
(UBaseType_t) sizeof(uint8_t *));
|
||||||
if (xQueueTempHdlr == NULL || xQueueHumiHdlr == NULL || xQueueUsart3ReHdlr == NULL)
|
if (xQueueTempHdlr == NULL || xQueueHumiHdlr == NULL || xQueueUsart3IrqHdlr == NULL)
|
||||||
{
|
{
|
||||||
/* code */
|
/* code */
|
||||||
vUsart3Printf("Queue Init Failed.\r\n");
|
vUsart3Printf("Queue Init Failed.\r\n");
|
||||||
@@ -201,6 +235,8 @@ void vCreateSemaphoreList(void)
|
|||||||
{
|
{
|
||||||
xSemLedOnHandler = xSemaphoreCreateBinary();
|
xSemLedOnHandler = xSemaphoreCreateBinary();
|
||||||
xSemLedOffHandler = xSemaphoreCreateBinary();
|
xSemLedOffHandler = xSemaphoreCreateBinary();
|
||||||
|
xSemFanOnHdlr = xSemaphoreCreateBinary();
|
||||||
|
xSemFanOffHdlr = xSemaphoreCreateBinary();
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
|||||||
Reference in New Issue
Block a user