improve stability

This commit is contained in:
2024-12-09 22:09:34 +01:00
parent 88aef600c8
commit 0fb6e34958
5 changed files with 119 additions and 54 deletions

View File

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