Ви не увійшли.
Вячеслав, давайте поезд и перрон оставим. Я понимаю что с аппаратной точки зрения МК система синхронная, тактовый генератор один для всей периферии процессора. А с точки зрения выполнения программы? Ведь мы же говорим о выполнении программы а не аппаратном функционировании системы. Синхронность это одновременность правильно? Вы хотите сказать что в МК одномоментно (одно и то же количество тактов) программно можно записать в два разные порты значение? Или все таки процесс записи будет последовательным сначала один порт потом другой? Так где же синхронность? Что касается мнимости многозадачности и параллельности согласен все зависит от дискретизации. Извините, я не имел ввиду конкретно Вас что это именно Вы сделали подмену понятий . Мне кажется что какой то "умник" внес термин и поехало, как с направлением эл. тока, чего только не сделаешь удобства ради .
Неактивний
Вячеслав, UART и USART Вами неудачно приведенный пример. Он как раз и демонстрирует то о чем я и говорю. И не удачный он тем что есть два параллельных независимых аппаратных канала Rx Tx со своими Interrupt. Мне уже страшно от этой терминологии а тем более простых вещей завернутых в двести обложек словоблудия ( ничего личного именно к Вам ).
Неактивний
goodspeedmen, опять слово пауза...Какая же это пауза если программа выполняется? Я так понял Вам нужны интервалы. Вот и напишите функцию интервалов на основе millis(). Это классика жанра, посмотрите пример мигания светодиодом . Для секундных и более интервалов вполне нормально.
Я бы сделал что то типа:
long oldtime, val; //первая переменная будет хранить предыдущее значение millis она должна быть глобальной
//и обнуляться только вначале кода, вторая переменная будет содержать нужный интервал.
boolean interval(val) {
long vartime = millis();
if ( val <= vartime-oldtime ) {
oldtime = vartime;
return true;
}
else {
return false;
}
}
Думаю идея понятна. В нужном месте программы делаете проверку прошел данный интервал или нет и выполняете по условию действие. Если нужно несколько разных интервалов надо несколько разных oldtime значений хранить. И несколько усложнить функцию передавая ей два значения нужный oldtime и val.
Честно сказать я не очень хорошо разбираюсь в этих "штуках", так "грызу" потихоньку
На сколько я смог понять эта функция возвращает булево значение true или false переменной interval, и принимает её параметр long val.
Я тут нацарапал так что бы было понятней, в цифрах. Переменная interval она работает как флаг, что функция отработала?
long oldtime (500), val (1000); //первая переменная будет хранить предыдущее значение millis она должна быть глобальной
//и обнуляться только вначале кода, вторая переменная будет содержать нужный интервал.
boolean interval(val)
{
long vartime = millis();
if(val(1000) <= vartime(1000...) - oldtime(500)) //
{
oldtime = vartime;
return true;
}
else
{
return false;
}
}
Неактивний
Нет она даст Вам возможность определить прошел ли интервал val после последнего true. И если Вы где то в коде напишите:
if interval(val){
"трали вали" ;
}
То это "трали вали" будет выполнятся только через val миллисекунд и не чаще, без остановки выполнения остального кода.
Остання редакція Nefreemen (2017-07-30 23:23:32)
Неактивний