Есть ли способ отложить некоторые задачи, оставив другие запущенными? C

#c #delay

Вопрос:

Я работаю над проектом, в котором мне нужно периодически менять значения с задержкой, но нужно постоянно обновлять другую информацию во время ожидания. Например, обновление 7-сегментного дисплея с мультиплексированием при установке задержки между считыванием кнопок для увеличения или уменьшения числа.

В этом примере я хочу сравнить значение датчика давления с моей таблицей настроек и в соответствии с этим включить соленоид или выключить его (время включения и время выключения), например, на 500 мс и 0ff на 500 мс, не прерывая другие обновления.

Моя цель-считывать давление, когда соленоид выключен, поэтому я считываю только давление в шине. Вот почему я хочу выключить соленоид для чтения и снова включить, чтобы надуть его в соответствии со значением считывания.

 onTime = 100; offTime = 0;
onTimeCheck = 200; offTimeCheck = 200;

if (adc < tableValue amp;amp; onTime == onTimeCheck)
{
   PORTB.B0 = 1;  // Turn on solenoid
   onTime = 0;    // Reset
   DisUpdate();   // Update 7-segment
}

else if (adc < tableValue amp;amp; offTime == offTimeCheck)
{
   PORTB.B0 = 0;  // Turn off solenoid
   offTime = 0;   // Reset
   readPressure();// Read the pressure sensor when solenoid is off
   DisUpdate():   // Update 7-segment
}

// Increment offTime to add up
if (offTime < offTimeCheck)
{
   offTime  ;
}
else if (offTime = offTimeCheck){}

// Increment onTime to add up         
if (onTime < onTimeCheck)
{
   onTime  ;
}
else if (onTime = onTimeCheck){}
 

Я сделал что-то подобное, чтобы считывать переключатели с более низкой скоростью, чем скорость мультиплексирования 7-сегментного, но, похоже, это не работает, как бы я ни пытался.

Комментарии:

1. Многопоточность?

2. Я работаю над довольно ограниченным микроконтроллером, как вы думаете, это может сработать?

3. Я совершенно не представляю. Может сработать. Может, и нет. Это было всего лишь предположение. Начните с проверки того, возможно ли вообще запустить два потока.

4. Если у вас нет операционной системы, вы можете реализовать свое собственное планирование, создав цикл, который выполняет задачи поочередно или через определенные промежутки времени. Реализуйте длительные задачи в виде функций, которые выполняют их шаг за шагом в течение нескольких вызовов с некоторым внутренним состоянием.

5. Узнайте о конечных автоматах, отдельных задачах и реализации отдельных функций в независимых модулях.