improve stability
This commit is contained in:
@ -20,6 +20,7 @@ onewire_addr_t uOneWireAddresses[MAX_DN18B20_SENSORS];
|
||||
float fDS18B20Temps[MAX_DN18B20_SENSORS];
|
||||
size_t sSensorCount = 0U;
|
||||
|
||||
static SemaphoreHandle_t xMutexAccessInputs = NULL;
|
||||
static eBurnerErrorState sBurnerErrorState;
|
||||
static float fChamperTemperature;
|
||||
static float fOutdoorTemperature;
|
||||
@ -41,6 +42,13 @@ void initInputs(void)
|
||||
|
||||
gpio_config(&ioConfBurnerFault);
|
||||
|
||||
xMutexAccessInputs = xSemaphoreCreateBinary();
|
||||
if (xMutexAccessInputs == NULL)
|
||||
{
|
||||
ESP_LOGE(TAG, "Unable to create mutex");
|
||||
}
|
||||
xSemaphoreGive(xMutexAccessInputs);
|
||||
|
||||
BaseType_t taskCreated = xTaskCreate(
|
||||
taskInput, // Function to implement the task
|
||||
"taskInput", // Task name
|
||||
@ -105,23 +113,27 @@ void taskInput(void *pvParameters)
|
||||
{
|
||||
float temp_c = fDS18B20Temps[j];
|
||||
ESP_LOGI(TAG, "Sensor: %08" PRIx64 " reports %.3f°C", (uint64_t)uOneWireAddresses[j], temp_c);
|
||||
|
||||
switch ((uint64_t)uOneWireAddresses[j])
|
||||
if (xSemaphoreTake(xMutexAccessInputs, portMAX_DELAY) == pdTRUE)
|
||||
{
|
||||
case ((uint64_t)uChamperTempSensorAddr):
|
||||
fChamperTemperature = temp_c;
|
||||
break;
|
||||
case ((uint64_t)uOutdoorTempSensorAddr):
|
||||
fOutdoorTemperature = temp_c;
|
||||
break;
|
||||
case ((uint64_t)uInletFlowTempSensorAddr):
|
||||
fInletFlowTemperature = temp_c;
|
||||
break;
|
||||
case ((uint64_t)uReturnFlowTempSensorAddr):
|
||||
fReturnFlowTemperature = temp_c;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
switch ((uint64_t)uOneWireAddresses[j])
|
||||
{
|
||||
case ((uint64_t)uChamperTempSensorAddr):
|
||||
fChamperTemperature = temp_c;
|
||||
break;
|
||||
case ((uint64_t)uOutdoorTempSensorAddr):
|
||||
fOutdoorTemperature = temp_c;
|
||||
break;
|
||||
case ((uint64_t)uInletFlowTempSensorAddr):
|
||||
fInletFlowTemperature = temp_c;
|
||||
break;
|
||||
case ((uint64_t)uReturnFlowTempSensorAddr):
|
||||
fReturnFlowTemperature = temp_c;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
xSemaphoreGive(xMutexAccessInputs);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -131,21 +143,51 @@ void taskInput(void *pvParameters)
|
||||
|
||||
float getChamberTemperature(void)
|
||||
{
|
||||
return fChamperTemperature;
|
||||
float ret = 0.0f;
|
||||
if (xSemaphoreTake(xMutexAccessInputs, portMAX_DELAY) == pdTRUE)
|
||||
{
|
||||
ret = fChamperTemperature;
|
||||
xSemaphoreGive(xMutexAccessInputs);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
float getOutdoorTemperature(void)
|
||||
{
|
||||
return fOutdoorTemperature;
|
||||
float ret = 0.0f;
|
||||
if (xSemaphoreTake(xMutexAccessInputs, portMAX_DELAY) == pdTRUE)
|
||||
{
|
||||
ret = fOutdoorTemperature;
|
||||
xSemaphoreGive(xMutexAccessInputs);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
float getInletFlowTemperature(void)
|
||||
{
|
||||
return fInletFlowTemperature;
|
||||
float ret = 0.0f;
|
||||
if (xSemaphoreTake(xMutexAccessInputs, portMAX_DELAY) == pdTRUE)
|
||||
{
|
||||
ret = fInletFlowTemperature;
|
||||
xSemaphoreGive(xMutexAccessInputs);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
float getReturnFlowTemperature(void)
|
||||
{
|
||||
return fReturnFlowTemperature;
|
||||
float ret = 0.0f;
|
||||
if (xSemaphoreTake(xMutexAccessInputs, portMAX_DELAY) == pdTRUE)
|
||||
{
|
||||
ret = fReturnFlowTemperature;
|
||||
xSemaphoreGive(xMutexAccessInputs);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
eBurnerErrorState getBurnerError(void)
|
||||
{
|
||||
return sBurnerErrorState;
|
||||
eBurnerErrorState ret = FAULT;
|
||||
if (xSemaphoreTake(xMutexAccessInputs, portMAX_DELAY) == pdTRUE)
|
||||
{
|
||||
ret = sBurnerErrorState;
|
||||
xSemaphoreGive(xMutexAccessInputs);
|
||||
}
|
||||
return ret;
|
||||
}
|
Reference in New Issue
Block a user