11.12_1:解决了接收信号量的bug,优化了网关控制节点执行器的延迟。

This commit is contained in:
2025-11-12 17:55:29 +08:00
parent bfc15aaa18
commit 5c4ba1b3c6
6 changed files with 207 additions and 150 deletions

View File

@@ -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;
} }
} }

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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(); // vPc13LedOn();
vTaskDelay(1000); // vTaskDelay(1000);
vPc13LedOff(); // vPc13LedOff();
vTaskDelay(1000); // vTaskDelay(1000);
if (xSemaphoreTake(xSemLedOnHandler, pdMS_TO_TICKS(10)) == pdTRUE)
{
vPc13LedOn();
xSemaphoreGive(xSemLedOnHandler);
} else if (xSemaphoreTake(xSemLedOffHandler, pdMS_TO_TICKS(10)) == pdTRUE)
{
/* code */
vPc13LedOff();
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();
}
} }
} }
@@ -72,8 +100,8 @@ void vLoRaToGatePktTask(void *pvParameters)
{ {
uint8_t ucRecTempData = 0; uint8_t ucRecTempData = 0;
uint8_t ucRecHumiData = 0; uint8_t ucRecHumiData = 0;
uint8_t testData = 0xAC; uint8_t testData = 0xAC;
uint8_t ledOff = 0xAD; uint8_t ledOff = 0xAD;
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ճɹ<D5B3> */ /* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ճɹ<D5B3> */
BaseType_t xQueueTempRetval, xQueueHumiRetval; BaseType_t xQueueTempRetval, xQueueHumiRetval;
while (1) while (1)
@@ -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)
@@ -181,16 +215,16 @@ void vCreateQueuesList(void)
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ƕ<EFBFBD><C7B6>еij<D0B5><C4B3><EFBFBD><><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD><DCB4>Ŷ<EFBFBD><C5B6>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD>ݣ<EFBFBD> /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ƕ<EFBFBD><C7B6>еij<D0B5><C4B3><EFBFBD><><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD><DCB4>Ŷ<EFBFBD><C5B6>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD>ݣ<EFBFBD>
* <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ݵĴ<DDB5>С<EFBFBD><D0A1><EFBFBD><EFBFBD>λΪ<CEBB>ֽڣ<D6BD><DAA3><EFBFBD>stm32<33><32>uint8_tָ<74><D6B8><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>4<EFBFBD>ֽڡ<D6BD> * <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ݵĴ<DDB5>С<EFBFBD><D0A1><EFBFBD><EFBFBD>λΪ<CEBB>ֽڣ<D6BD><DAA3><EFBFBD>stm32<33><32>uint8_tָ<74><D6B8><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>4<EFBFBD>ֽڡ<D6BD>
* ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ƕ<EFBFBD><C7B6>о<EFBFBD><D0BE><EFBFBD><EFBFBD>Ľṹ<C4BD><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B6A8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> */ * ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ƕ<EFBFBD><C7B6>о<EFBFBD><D0BE><EFBFBD><EFBFBD>Ľṹ<C4BD><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B6A8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> */
xQueueTempHdlr = xQueueCreate( xQueueTempHdlr = xQueueCreate(
(UBaseType_t) 5, (UBaseType_t) 5,
(UBaseType_t) sizeof(uint8_t)); (UBaseType_t) sizeof(uint8_t));
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");
@@ -199,8 +233,10 @@ void vCreateQueuesList(void)
void vCreateSemaphoreList(void) void vCreateSemaphoreList(void)
{ {
xSemLedOnHandler = xSemaphoreCreateBinary(); xSemLedOnHandler = xSemaphoreCreateBinary();
xSemLedOffHandler = xSemaphoreCreateBinary(); xSemLedOffHandler = xSemaphoreCreateBinary();
xSemFanOnHdlr = xSemaphoreCreateBinary();
xSemFanOffHdlr = xSemaphoreCreateBinary();
} }
int main(void) int main(void)