Перейти к содержанию
    

Вытесняющая задача по времени выполнения. Очень маленькая ОС.

3 hours ago, Aldec said:

Переключение задач таймером это не вариант

Просто есть несколько типов ос: с приоритетами в задачах, и с переключением по таймеру, и смешанное управление. Они разные, и время реакции у них разное, и способ применения, и даже области использования разные. 

Если вам пока ещё не надо, это не означает что инструмент плохой. Просто у вас нет задачи для этого инструмента.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, AVI-crak said:

Просто у вас нет задачи для этого инструмента.

Спецы выбирают инструмент под задачу, а не наоборот.:big_boss:

 

Но если быть настырным, то даже нарочно сложно придумать задачу под подобный "инструмент". Есть варианты?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 минут назад, Forger сказал:

сложно придумать задачу под подобный "инструмент".

Ну не знаю, по мне частенько бывает нужно как-раз такой функционал, с переключением контекста равными промежутками времени, это в интервале от 100микросекунд до 1 мсек. без всяких очередей, стеков, нитей семафоров и пр. Так сказать имитация нескольких ядер проца и только. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть два основных подхода решения почти всех задач: по важности (когда уже жопа горит), и к моменту актуальности готового решения.

Вот когда нужно прямо сейчас: начинается запрещение прерываний, кастование приоритетами, и даже разгон частоты мк. Девайсы с таким подходом обычно тормозят в самых неожиданных местах, непредсказуемо. Наличие и тип ос не влияет на конечный результат. В любом случае получится дёрганный уродец, без шанса понравится пользователю.

Второй вариант когда все активные задачи выполняются с равным приоритетом запуска но разным временем работы. Нормированная по времени задержка получается почти автоматически (если не делать глупостей). А тройной буфер спасает любую безвыходную ситуацию. Я говорю про активные задачи, которым есть чего делать - все остальные либо отправляются в сон, либо замораживаются, либо отдают своё время чтобы не отсвечивать. Всё это есть в вытесняющей ос, но не столь гибко как у меня.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, mantech said:

от 100микросекунд до 1 мсек. без всяких очередей, стеков, нитей семафоров и пр.

Насколько я понимаю, можно взять любую ОС, создать N задач с равными приоритетами. И они будут переключаться по очереди. А сервисы ОС просто не использовать. Умные компилятор и линковщик не подключат этот неискользуемый код в проект.На счёт времени переключения не помню. Но для scmRTOS есть сравнительная таблица времени переключения контекста. Я думаю и FreeRTOS тоже справится с этим.

Вот времянки scmRTOS

image.png.bd7d5e86a7a506846e4a61c493f41f68.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, haker_fox сказал:

А сервисы ОС просто не использовать.

Тогда зачем использовать монстра, да еще и плюсы тут вкорячивать (scmRTOS), когда можно все упростить до предела и потом, когда придется возвратиться к старым проектам, не вспоминать мучительно что и как...

Вообще имею слабость к простым решениям сложных задач :dirol:

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, mantech said:

Тогда зачем использовать монстра, да еще и плюсы тут вкорячивать (scmRTOS), когда можно все упростить до предела и потом, когда придется возвратиться к старым проектам, не вспоминать мучительно что и как...

Вот поэтому разумнее подбирать инструмент под задачу, а не проектировать некого сферического коня в вакууме ))

Линковщик действительно выпилит все неиспользуемое. Проект в итоге получится заметно проще и главное - более предсказуемый, нежели если бы он был построен на фундаменте из "го##а и палок" ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, Forger сказал:

а не проектировать некого сферического коня в вакууме ))

А никто и не проектирует каждый раз. Раз написано, потом только при переносе на другую архитектуру нужно что-то поменять...

3 минуты назад, Forger сказал:

Линковщик действительно выпилит все неиспользуемое.

Сорри за оффтоп, но всегда думал, откуда взялись вебкодеры, которые для создания простой формы логина предварительно навключают кучу либ всяких аяксов jquery и пр. на мегабайт весом. Спросил - дак мы там пару функций всего используем, остальное так - выкинется... только там не выкидывается а грузится все скопом... Тут да, линкер выкинет, только в проекте вся эта тряхомудь будет в виде сотни файлов с хидерами и тормоза при компиляции и пр... Нахрена все это, когда в одном файле все, что нужно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, mantech said:

Нахрена все это, когда в одном файле все, что нужно...

При качественном подходе к разработке так не получается. Со временем всё равно нарабатывается некая база драйверов, сервисов и библиотек, которые кочуют из проекта в проект. При этом они находятся в системе контроля версий в виде "сабмодулей". В таком случае исправлени ошибки в одном проекте поправит её (скорее всего) и в других. При этом такая правка произойдёт не автоматически и не без контроля программиста - при желании, он может использовать старую неправленную версию файла. Но это всё-таки система. И если драйвер для управления светодиодом по мере развития обзавёлся двадцатью методами (утрирую маленько), то они будут находится в виде текста во всех проектах. Не будете же вы чистить для каждого проекта файлы. И да, из двадцати вы используете один-два. И они действительно выкидываются при правильно настроенной оптимизации. Для IAR'а точно. Про веб-программирование ничего не знаю, и думаю, что проводить параллели между ним и системным программированием для встраиваемых систем очень рискованно. Слишком разные весовые категории. Но я ни на чём не наставаю, т.к. если человеку удобно пользоваться его инструментарием, наработанным за года, то пусть лучше им и пользуется, чем насильно пытаться его поместить в чужеродную экосферу. Однако поделиться своим опытом считаю полезным. Вдруг и для себя узнаю что-то новое!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, haker_fox said:

Насколько я понимаю, можно взять любую ОС, создать N задач с равными приоритетами. И они будут переключаться по очереди.

Любую не получится, точнее работать будет - но в N раз медленнее. Тут весь прикол - с какой стороны происходит управление. Любая ос с приоритетами и вытеснением - даёт задаче фиксированное время работы. Это время фиксировано, буквально. Даже если задаче нечего делать, и она готова отдать своё время - всё равно придётся ждать стандартные 1мс + остальные задачи + работу планировщика. На новом витке эта задача уже будет с иным приоритетом, и может даже не запустится. Но первоначальная задержка всё-таки сохраниться. А там ещё и гонка появится - то ещё удовольствие.

  Гораздо проще когда задача сама решает свою судьбу, вот прямо здесь и сейчас. Тем-более что это решение получается гораздо более быстрым чем через работу планировщика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, mantech said:

Сорри за оффтоп

Хоть веб и вовсем другой мир со своими правилами, но и там думая врядли кому-то приходит в голову изобретать свой низкоуровневый движок ))

Just now, AVI-crak said:

всё равно придётся ждать стандартные 1мс

Это не так, задача может принудительно в любой момент отдать работу планировщику, тем самым имитируется некая кооперативную многозадачность на базе вытесняющей оси. Для этого есть сервисы в многих осях. 

Да, колхозно, но не более чем сампал у ТС ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, AVI-crak said:

Даже если задаче нечего делать, и она готова отдать своё время

Здесь про scmRTOS не помню, но FreeRTOS позволяет принудительно отдать управление задачи, которой нечем заняться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Forger said:

Это не так, задача может принудительно в любой момент

И что, системное время при этом не сбивается? А то у меня был такой промежуточный вариант на одном таймере (сейчас два). Для коррекции системного времени приходилось делать массу телодвижений, да ещё и на асме(в котором я потом вообще запутался) . Но ошибка всё равно накапливалась с очень слабым прогнозом (в + или -), отчего счётчик системного времени превращался в показометр попугаев. То-есть приходилось запускать второй счётчик реального времени, чтобы хоть как-то выйти из положения.

Сейчас два физических счётчика: время работы задач, и системное время. Работают независимо и синхронно, без ошибок и лишнего кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 минут назад, AVI-crak сказал:

Даже если задаче нечего делать, и она готова отдать своё время - всё равно придётся ждать стандартные 1мс + остальные задачи + работу планировщика

Тут можно пойти 2мя способами - принудительно отдать время другой задаче, если оно больше времени задержки, или тупо ждать, что тоже ничего плохого не сделает, т.к. времена короткие...

10 минут назад, AVI-crak сказал:

И что, системное время при этом не сбивается?

А как переключение задач может сказываться на системном времени? Или под этим что-то другое подразумевается?

12 минут назад, AVI-crak сказал:

Сейчас два физических счётчика: время работы задач, и системное время.

Логично.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, AVI-crak said:

И что, системное время при этом не сбивается?

В нормально построенной оси ничего не сбивается, а в самопальной может происходить все что угодно :dance2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...