В PIC вы не обязательно будете прыгать прямо от чего-то столь же простого, как петли ожидания ожидания, к чему-то сложному, как многопоточные библиотеки, как это предлагается в некоторых комментариях.
Предположим, что вы каждый день мигаете своим светодиодом в цикле. Это дает код в этом цикле (или вызван изнутри этого цикла) почти 1 секунду для выполнения чего-то другого. Если вы можете нарезать эти задачи на такие мелкие кусочки, которые они вписываются в интервал «когда вам нужно вернуться», чтобы мигать светодиод, это начало.
Очевидно, что если вы выполняете произвольный код в мигающем цикле, частота вашего мигания будет зависеть от того, когда будут использоваться другие компоненты кода, и вы больше не сможете использовать процессор в качестве временной базы. Вам нужно что-то другое чтобы проверить, должно ли мигать. У большинства микроконтроллеров есть таймер, который позволяет это сделать. Чтение таймера свободного времени, чтобы проверить, нужно ли «мигать», будет первым простым шагом. Ниже псевдокод:
while (1){
if (((time = readTimer()) - oldTime) > INTERVAL){
/* Timer run-around ignored for reasons of simplicity */
oldTime = time;
blink();
}
else
doSomethingElse();
}
Обратите внимание на somethingElse()
должен быть закончен в минимально возможных сроках, как его во время выполнения влияет на точность вашего моргания.
Если вы все еще хотите, чтобы мигание выполнялось с точными интервалами, вы должны изучить процедуры обслуживания прерываний. Узнайте, как заставить таймер запускать прерывание с частотой вашего мигания и выполнять мигание в рутинной процедуре прерывания. Это освобождает ваш основной цикл от этого, и вы можете выполнять любые длительные задачи, которые вы хотите там. Таймер вызовет прерывание на требуемой частоте, и процедура обслуживания прерывания переключит свет.
Изучите интегрированную среду разработки (IDE). Возможно, Visual Studio уже будет иметь функцию, которая соответствует вашим потребностям (и у них также есть бесплатная версия). –
Знаете ли вы многопоточность? –
На какой ОС вы запускаете программу? – user3386109