----------GDAN7777 писал(а): 30 окт 2020, 07:00 Еще раз перечитал.Вопросы так и остались.Ладно.Будем Вас напрягать в ветке:)
Блоки меандры синхронизированы с тем же генератором, что диспетчер задач.GDAN7777 писал(а): 30 окт 2020, 07:00 1).ПБ меандры.Можно ли использовать его совместно с диспетчером задач?
2).На какой плате его лучше всего располагать?
По сути это дополнительные (сервисные) выходы диспетчера.
Следует аккуратно использовать меандры в задачах(платах) так как если меандр 50мс и периодичность задачи 50 мс могут быть "накладки" (задача будет все время получать "0" или "1"). Хорошо выходы меандра работают в свободных задачах (ведь их периодичность порядка сотен мкс. В оперативных, быстрых, фоновых и медленных задачах лучше использовать делитель входного значения.
У делителя входного значения два выхода MN (меандр) и EV(событие).GDAN7777 писал(а): 30 окт 2020, 07:00 3).Делитель входного значения. Какой сигнал по форме и длительности будет на ВЫХОДАХ?
Длительность меандра(полупериод)=ПЕРИОДИЧНОСТЬ ВЫЗЫВАЕМОЙ ЗАДАЧИ х ДЕЛИТЕЛЬ. Например на плате быстрой задачи (период =100мс) блок с делителем =5, будет генерить меандр(полупериод) длительностью 500мс.
EV=1 при каждом изменении значения меандра. При следующем входе в задачу 0 -> EV. Если этот сигнал подать на вход счетчика (ecoins), то его значение будет изменяться каждые 500мс.
Описанный блок автономный, не использует библиотек и состоит из одной строки кода:
EV=0; if(EN) {if(++cnt>num) {MN=!MN; cnt=1; EV=1;}};
В каждый момент времени только на одном из выходов появляется значение отличное от нуля (1-5 - оперативные,1-4 - быстрые, 1-5 фоновые, 1-4 медленные). Происходит это с учетом приоритета задач. Это значит, что если одновременно наступило время выполнение оперативной и быстрой задачи, то будет такая последовательность:GDAN7777 писал(а): 30 окт 2020, 07:00 4).И все-таки не понятна философия диспетчера задач.А это самое главное.Как проходит полный цикл диспетчера?Я понимаю так-каждые 10 мс на выходе quick меняется значение от 1 до 5(или от 0 до 4???)-итого 50 мс,далее на выходе fast каждые 25 мс меняется значение от 1 до 4,итого 100 мс,выход slow аналогично-1000 мс,выход back аналогично -400 мс.А как тогда на выходе frdm?
1.Диспетчер.
2.Вызов оперативной задачи.
3.Диспетчер.
4.Вызов быстрой задачи.
Задачи следует проектировать аккуратно и их длительность не должна превышать несколько мс (в редких случаях 10мс). В противном случае более приоритетные задачи не дадут вызывать другие задачи.
Например - в быстрой задачи есть блок, который выполняет delay(120) при каждом входе. Как следствие - будут выполняться только оперативные и быстрые задачи.
Свободные задачи. Последовательно вызываются (№№1-20), каждый раз когда номера остальных задач =0. Эти задачи проектируются так, чтобы они занимали минимальное процессорное время (каждый вход - микрооперация или микродействие).
В простых проектах все задачи могут оформляться как свободные.
-------------------------
Общий вывод: разработчик должен представлять сколько время выполняются используемые блоки.
Например, блок RemoteXY с большим кол-во параметров на UART 115200 может выполняться до 20мс - этот блок мы оформляем как быструю задачу.
Стандартный блок HC-SR04(ультразвуковой дальномер) (очень простой код) может в зависимости от расстояния выполняться от нескольких мс до 2 сек. Такой блок лучше не использовать - есть другие, работающие по прерываниям.
Опрос АЦП(Nano,Mega) занимает порядка 130 мкс --> это оперативная или быстрая задача.