#26 2017-07-28 00:27:08

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Генерация пауз.

Вячеслав, давайте поезд и перрон оставим. Я понимаю что с аппаратной точки зрения МК система синхронная, тактовый генератор один для всей периферии процессора. А с точки зрения выполнения программы? Ведь мы же говорим о выполнении программы а не аппаратном функционировании системы. Синхронность это одновременность правильно? Вы хотите сказать что в МК  одномоментно (одно и то же количество тактов) программно можно записать в два разные порты значение? Или все таки процесс записи будет последовательным сначала один порт потом другой? Так где же синхронность? Что касается мнимости многозадачности и параллельности согласен все зависит от дискретизации. Извините, я не имел ввиду конкретно Вас что это именно Вы сделали подмену понятий  smile . Мне кажется что какой то "умник" внес термин и поехало, как с направлением эл. тока, чего только не сделаешь удобства ради  big_smile .

Неактивний

#27 2017-07-29 23:35:30

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Генерация пауз.

Вячеслав, UART и USART Вами неудачно приведенный пример. Он как раз и демонстрирует то о чем я и говорю. И не удачный он тем что есть два параллельных независимых аппаратных канала Rx Tx со своими Interrupt. Мне уже страшно от этой терминологии а тем более простых вещей завернутых в двести обложек словоблудия ( ничего личного именно к Вам smile ).

Неактивний

#28 2017-07-30 12:48:33

goodspeedmen
Учасник
З https://discord.gg/6hbs98y
Зареєстрований: 2016-10-02
Повідомлень: 81

Re: Генерация пауз.

Nefreemen пише:

goodspeedmen, опять слово пауза...Какая же это пауза если  программа выполняется? Я так понял Вам нужны интервалы. Вот и напишите функцию интервалов на основе millis(). Это классика жанра, посмотрите пример мигания светодиодом smile . Для секундных и более интервалов вполне нормально.

Я бы сделал что то типа:

long oldtime, val; //первая переменная будет хранить предыдущее значение millis она должна быть глобальной
                          //и обнуляться только вначале кода, вторая переменная будет содержать нужный интервал.
                       
boolean interval(val) {
    long vartime = millis();
    if ( val <= vartime-oldtime ) {
       oldtime = vartime;
       return true;
       }
    else {
      return false;
      }

Думаю идея понятна. В нужном месте программы делаете проверку прошел данный интервал или нет и выполняете по условию действие. Если нужно несколько разных интервалов надо несколько разных oldtime значений хранить. И несколько усложнить функцию передавая ей два значения нужный oldtime и val.

Честно сказать я не очень хорошо разбираюсь в этих "штуках", так "грызу" потихоньку roll
На сколько я смог понять эта функция возвращает булево значение 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;
                          }
                       } 

Неактивний

#29 2017-07-30 23:22:14

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Генерация пауз.

Нет она даст Вам возможность определить прошел ли интервал val после последнего  true. И если Вы где то в коде напишите:
if interval(val){
"трали вали" smile ;
}
То это "трали вали" будет выполнятся только через val миллисекунд и не чаще, без остановки выполнения остального кода.

Остання редакція Nefreemen (2017-07-30 23:23:32)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму