AVI-crak 0 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 3 hours ago, Aldec said: Переключение задач таймером это не вариант Просто есть несколько типов ос: с приоритетами в задачах, и с переключением по таймеру, и смешанное управление. Они разные, и время реакции у них разное, и способ применения, и даже области использования разные. Если вам пока ещё не надо, это не означает что инструмент плохой. Просто у вас нет задачи для этого инструмента. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 4 minutes ago, AVI-crak said: Просто у вас нет задачи для этого инструмента. Спецы выбирают инструмент под задачу, а не наоборот. Но если быть настырным, то даже нарочно сложно придумать задачу под подобный "инструмент". Есть варианты? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 33 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 35 минут назад, Forger сказал: сложно придумать задачу под подобный "инструмент". Ну не знаю, по мне частенько бывает нужно как-раз такой функционал, с переключением контекста равными промежутками времени, это в интервале от 100микросекунд до 1 мсек. без всяких очередей, стеков, нитей семафоров и пр. Так сказать имитация нескольких ядер проца и только. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба Есть два основных подхода решения почти всех задач: по важности (когда уже жопа горит), и к моменту актуальности готового решения. Вот когда нужно прямо сейчас: начинается запрещение прерываний, кастование приоритетами, и даже разгон частоты мк. Девайсы с таким подходом обычно тормозят в самых неожиданных местах, непредсказуемо. Наличие и тип ос не влияет на конечный результат. В любом случае получится дёрганный уродец, без шанса понравится пользователю. Второй вариант когда все активные задачи выполняются с равным приоритетом запуска но разным временем работы. Нормированная по времени задержка получается почти автоматически (если не делать глупостей). А тройной буфер спасает любую безвыходную ситуацию. Я говорю про активные задачи, которым есть чего делать - все остальные либо отправляются в сон, либо замораживаются, либо отдают своё время чтобы не отсвечивать. Всё это есть в вытесняющей ос, но не столь гибко как у меня. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 2 minutes ago, mantech said: от 100микросекунд до 1 мсек. без всяких очередей, стеков, нитей семафоров и пр. Насколько я понимаю, можно взять любую ОС, создать N задач с равными приоритетами. И они будут переключаться по очереди. А сервисы ОС просто не использовать. Умные компилятор и линковщик не подключат этот неискользуемый код в проект.На счёт времени переключения не помню. Но для scmRTOS есть сравнительная таблица времени переключения контекста. Я думаю и FreeRTOS тоже справится с этим. Вот времянки scmRTOS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 33 10 ноября, 2020 Опубликовано 10 ноября, 2020 (изменено) · Жалоба 3 минуты назад, haker_fox сказал: А сервисы ОС просто не использовать. Тогда зачем использовать монстра, да еще и плюсы тут вкорячивать (scmRTOS), когда можно все упростить до предела и потом, когда придется возвратиться к старым проектам, не вспоминать мучительно что и как... Вообще имею слабость к простым решениям сложных задач Изменено 10 ноября, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба Just now, mantech said: Тогда зачем использовать монстра, да еще и плюсы тут вкорячивать (scmRTOS), когда можно все упростить до предела и потом, когда придется возвратиться к старым проектам, не вспоминать мучительно что и как... Вот поэтому разумнее подбирать инструмент под задачу, а не проектировать некого сферического коня в вакууме )) Линковщик действительно выпилит все неиспользуемое. Проект в итоге получится заметно проще и главное - более предсказуемый, нежели если бы он был построен на фундаменте из "го##а и палок" )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 33 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 2 минуты назад, Forger сказал: а не проектировать некого сферического коня в вакууме )) А никто и не проектирует каждый раз. Раз написано, потом только при переносе на другую архитектуру нужно что-то поменять... 3 минуты назад, Forger сказал: Линковщик действительно выпилит все неиспользуемое. Сорри за оффтоп, но всегда думал, откуда взялись вебкодеры, которые для создания простой формы логина предварительно навключают кучу либ всяких аяксов jquery и пр. на мегабайт весом. Спросил - дак мы там пару функций всего используем, остальное так - выкинется... только там не выкидывается а грузится все скопом... Тут да, линкер выкинет, только в проекте вся эта тряхомудь будет в виде сотни файлов с хидерами и тормоза при компиляции и пр... Нахрена все это, когда в одном файле все, что нужно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 5 minutes ago, mantech said: Нахрена все это, когда в одном файле все, что нужно... При качественном подходе к разработке так не получается. Со временем всё равно нарабатывается некая база драйверов, сервисов и библиотек, которые кочуют из проекта в проект. При этом они находятся в системе контроля версий в виде "сабмодулей". В таком случае исправлени ошибки в одном проекте поправит её (скорее всего) и в других. При этом такая правка произойдёт не автоматически и не без контроля программиста - при желании, он может использовать старую неправленную версию файла. Но это всё-таки система. И если драйвер для управления светодиодом по мере развития обзавёлся двадцатью методами (утрирую маленько), то они будут находится в виде текста во всех проектах. Не будете же вы чистить для каждого проекта файлы. И да, из двадцати вы используете один-два. И они действительно выкидываются при правильно настроенной оптимизации. Для IAR'а точно. Про веб-программирование ничего не знаю, и думаю, что проводить параллели между ним и системным программированием для встраиваемых систем очень рискованно. Слишком разные весовые категории. Но я ни на чём не наставаю, т.к. если человеку удобно пользоваться его инструментарием, наработанным за года, то пусть лучше им и пользуется, чем насильно пытаться его поместить в чужеродную экосферу. Однако поделиться своим опытом считаю полезным. Вдруг и для себя узнаю что-то новое! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 14 minutes ago, haker_fox said: Насколько я понимаю, можно взять любую ОС, создать N задач с равными приоритетами. И они будут переключаться по очереди. Любую не получится, точнее работать будет - но в N раз медленнее. Тут весь прикол - с какой стороны происходит управление. Любая ос с приоритетами и вытеснением - даёт задаче фиксированное время работы. Это время фиксировано, буквально. Даже если задаче нечего делать, и она готова отдать своё время - всё равно придётся ждать стандартные 1мс + остальные задачи + работу планировщика. На новом витке эта задача уже будет с иным приоритетом, и может даже не запустится. Но первоначальная задержка всё-таки сохраниться. А там ещё и гонка появится - то ещё удовольствие. Гораздо проще когда задача сама решает свою судьбу, вот прямо здесь и сейчас. Тем-более что это решение получается гораздо более быстрым чем через работу планировщика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 15 minutes ago, mantech said: Сорри за оффтоп Хоть веб и вовсем другой мир со своими правилами, но и там думая врядли кому-то приходит в голову изобретать свой низкоуровневый движок )) Just now, AVI-crak said: всё равно придётся ждать стандартные 1мс Это не так, задача может принудительно в любой момент отдать работу планировщику, тем самым имитируется некая кооперативную многозадачность на базе вытесняющей оси. Для этого есть сервисы в многих осях. Да, колхозно, но не более чем сампал у ТС ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 2 minutes ago, AVI-crak said: Даже если задаче нечего делать, и она готова отдать своё время Здесь про scmRTOS не помню, но FreeRTOS позволяет принудительно отдать управление задачи, которой нечем заняться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 4 minutes ago, Forger said: Это не так, задача может принудительно в любой момент И что, системное время при этом не сбивается? А то у меня был такой промежуточный вариант на одном таймере (сейчас два). Для коррекции системного времени приходилось делать массу телодвижений, да ещё и на асме(в котором я потом вообще запутался) . Но ошибка всё равно накапливалась с очень слабым прогнозом (в + или -), отчего счётчик системного времени превращался в показометр попугаев. То-есть приходилось запускать второй счётчик реального времени, чтобы хоть как-то выйти из положения. Сейчас два физических счётчика: время работы задач, и системное время. Работают независимо и синхронно, без ошибок и лишнего кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 33 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 25 минут назад, AVI-crak сказал: Даже если задаче нечего делать, и она готова отдать своё время - всё равно придётся ждать стандартные 1мс + остальные задачи + работу планировщика Тут можно пойти 2мя способами - принудительно отдать время другой задаче, если оно больше времени задержки, или тупо ждать, что тоже ничего плохого не сделает, т.к. времена короткие... 10 минут назад, AVI-crak сказал: И что, системное время при этом не сбивается? А как переключение задач может сказываться на системном времени? Или под этим что-то другое подразумевается? 12 минут назад, AVI-crak сказал: Сейчас два физических счётчика: время работы задач, и системное время. Логично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 20 minutes ago, AVI-crak said: И что, системное время при этом не сбивается? В нормально построенной оси ничего не сбивается, а в самопальной может происходить все что угодно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться