В качестве альтернативы вы могли бы рассмотреть возможность переписать это с помощью подхода, управляемого событиями. Это, конечно, будет зависеть от того, на что способно ваше оборудование, но, по крайней мере, вы сможете создавать некоторые события таймера.
Тогда код будет выглядеть примерно так:
static volatile bool sensor_1_ready;
static volatile bool sensor_2_ready;
for(;;)
{
switch(state_machine)
{
case READING_SENSOR_1:
if(sensor_2_ready)
{
state_machine = READING_SENSOR_2;
}
else if(sensor_1_ready)
{
process sensor 1
}
break;
case READING_SENSOR_2:
if(!sensor_2_ready && some_timeout_etc)
{
state_machine = READING_SENSOR_1;
}
else if(sensor_2_ready)
{
process sensor 2
}
break;
}
}
void callback_sensor_1 (void) // some sort of interrupt or callback function
{
sensor_1_ready = true;
}
void callback_sensor_2 (void) // some sort of interrupt or callback function
{
sensor_2_ready = true;
}
(Прежде чем комментировать переменные volatile, , пожалуйста обратите внимание, что volatile существует для предотвращения опасных оптимизаций компилятора, а not для защиты мьютекса / атомарного доступа / барьера памяти и т. Д. ) * +1010 *