реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Автоматный подход (SWITCH), Поделитесь опытом использования
_artem_
сообщение Jul 3 2006, 11:26
Сообщение #16


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



2 osnwt, в слючае роунд робин можно сделать так что для задач с одинакоым приоритетом выдача ресурсов опеределяется временем захвата ресурсов задачей и оно (время ) может быть равномерно распределено между задачами , хотя и ртос не является вытесняющей. То есть в этом случае мы не ждем завершения работы задачи а диспетчер сам останавливает или запускает ее (вне зависимости быполнила ли задача свою работу или нет). Хочу сказать что fsm машины не являются синонимом для кооперативки тоже. Для меня фсм видится как логический подход или метод для решения задачи с детерминированным количеством внутренних состояний в контексте самой этой задачи. По сути дела в каждой ртос сушествуют свои машины с конечным состоянием - допустим состояние какой либо задачи, но они не несут в себе этого названия (фсм).


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
osnwt
сообщение Jul 3 2006, 11:36
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Цитата(_artem_ @ Jul 3 2006, 14:26) *
2 osnwt, в слючае роунд робин можно сделать так что для задач с одинакоым приоритетом выдача ресурсов опеределяется временем захвата ресурсов задачей и оно (время ) может быть равномерно распределено между задачами , хотя и ртос не является вытесняющей.

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

Если же речь о том, чтобы более-менее балансировать общее время исполнения (то есть, дольше поработала одна задача - вызовем несколько раз другую при прочих равных условиях, чтобы суммарное время выполнения более-менее уравнялось) - в jacos этого нет, по крайней мере. Да и часто ли это надо?

Цитата
То есть в этом случае мы не ждем завершения работы задачи а диспетчер сам останавливает или запускает ее (вне зависимости быполнила ли задача свою работу или нет).

Вот это мне не понятно в том смысле, что как "диспетчер сам останавливает" задачу в случае кооперативной OS? Она на то и кооперативная, что прервать выполнение задачи может только она сама, и если она этого не делает, то вся оставшаяся часть системы будет стоять.

Цитата
Хочу сказать что fsm машины не являются синонимом для кооперативки тоже.

Этого я и не утверждал. Это разные подходы. Я просто сказал, что nesos, судя по всему, представляет собой гибрид. А то, в каком смысле я противопоставлял fsm & кооперативные rtos - rtos-ам вытесняющим, я уже написал.
Go to the top of the page
 
+Quote Post
bialix
сообщение Jul 3 2006, 12:20
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 4-11-04
Из: zp.ua
Пользователь №: 1 046



вот еще один какбы генератор WhatOS: http://www.sticlete.com/whatos/

название забавное: в переводе -- нафига тебе ос?


--------------------
Имей мужество пользоваться своим собственным разумом! (с) И.Кант
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 3 2006, 12:37
Сообщение #19


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Еще один пример ОСРВ для МК и ДСП можно посмотреть здесь: scmRtos

Там есть варианты РТОС для msp430, avr и blackfin'а


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
_artem_
сообщение Jul 3 2006, 13:10
Сообщение #20


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Цитата
Если разговор конкретно про jacos, то там при прочих равных условиях (приоритетах и подходе кванта вызова задач) управление первой получит та, которая стоит раньше в очереди. То есть, в такой ситуации распределение количества вызовов будет более-менее равномерно распределенным между задачами.


Нет не про jacos

Цитата
Цитата
То есть в этом случае мы не ждем завершения работы задачи а диспетчер сам останавливает или запускает ее (вне зависимости быполнила ли задача свою работу или нет).

Вот это мне не понятно в том смысле, что как "диспетчер сам останавливает" задачу в случае кооперативной OS? Она на то и кооперативная, что прервать выполнение задачи может только она сама, и если она этого не делает, то вся оставшаяся часть системы будет стоять.


http://en.wikipedia.org/wiki/Round-robin_scheduling
http://www.geocities.com/michaelanburaj/RTOS_Theory.html


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
osnwt
сообщение Jul 3 2006, 14:09
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Цитата(_artem_ @ Jul 3 2006, 16:10) *
Цитата

Цитата
То есть в этом случае мы не ждем завершения работы задачи а диспетчер сам останавливает или запускает ее (вне зависимости быполнила ли задача свою работу или нет).

Вот это мне не понятно в том смысле, что как "диспетчер сам останавливает" задачу в случае кооперативной OS? Она на то и кооперативная, что прервать выполнение задачи может только она сама, и если она этого не делает, то вся оставшаяся часть системы будет стоять.


http://en.wikipedia.org/wiki/Round-robin_scheduling
http://www.geocities.com/michaelanburaj/RTOS_Theory.html


По первой ссылке читаю:

Цитата
Round Robin Scheduling is preemptive (at the end of time-slice) therefore it is effective in time-sharing environments in which the system needs to guarantee reasonable response times for interactive users.

Раунд-робин планирование есть преемптивное.

По второй смотрю таблицу с kernels и вижу:

Цитата
Non preemptive: Every task is written in a way that it complete execution within its time slot & gives control for other tasks.

Round robin: Every task gets its chance in a sequential manner.


Иными словами, выходит так, что под сочетанием Non preemptive (кооперативной) RTOS и round-robin планирования понимается то, что задача обязана быть написана так, чтобы завершить свое исполнение в пределах своего временнОго слота и отдать управление другим задачам. А round-robin в данном случае - это циклический последовательный вызов задач на исполнение без учета их приоритетов, чтобы дать им поработать. При этом они по прежнему обязаны отдать управление в ограниченное временнЫм слотом время. Превышение времени выполнения (более, чем временнОй слот) - это уже нарушение требований RTOS. А большее или меньшее время выполнения в пределах этого слота никак не учитывается в кооперативных RTOS, потому говорить о гарантиях равного времени выполнения в такой системе просто нельзя.

Потому мне по прежнему не понятно, как из приведенных ссылок следует, что в кооперативной (non preemptive) RTOS реализуется round-robin планирование по времени так, что "диспетчер сам останавливает или запускает ее (вне зависимости быполнила ли задача свою работу или нет)". Ведь невозможность остановки выполнения задачи в non preemptive RTOS - это и есть само определение RTOS, как non preemptive.

PS. Тема уже ушла в сторону...
Go to the top of the page
 
+Quote Post
pitt
сообщение Jul 3 2006, 15:00
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



RTOS большая и многогранная тема. Нет и не может быть универсальной на все случаи жизни, а отсюда и все многообразие таких систем. Я преподавал RTOS в Советском Союзе, сейчас делаю это в Америке. Мой опыт позволяет мне судить и делать выводы. Ваше дело, коллеги, соглашаться и разделять мою точку зрения или отвергать ее. Я, ни в коем случае, не претендую на истины в последней инстанции.
Итак. Длая начала надо опредилиться с приоритетами. Что мы имеем и чего стараемся достичь. Для мира AVR характерно ограничение по RAM. а это, в свою очередь серьезно ограничивает, нo не исключает использование preemtive RTOS. Еще интереснее дело обстоит со скоростью. Кооперативная переключает контекст гораздо быстрее - ей не надо сохранять все регистры, а только необходимые (определяется компилятором), кроме того, по системному таймеру нет необходимости переключать контекст активной задачи - переключения не произойдет! Заодно, кстати, и эконом ится стек для каждой задачи и, соответственно, RAM! Еще один аргумент в пользу коопреативности. При весьма ограниченных ресурсах AVR (да и подавляющего большинства других 8 -16 битных микроконтроллеров) разбиение на ос и апликации весьма условно. Проще сказать, что мы имеем scheduler (планировщик) и функции системы. Отсюда следует вывод: каждый проект есть не что иное как новая RTOS с одним и тем же планировщиком и разнообразным набором функций. Когда пишется функция ОС, прекарасно известно о том, что можно делать, а чего нет и какие ограничения необходимо соблюдать - аналогичные требования пред'являются дле задач в кооперативной RTOS. Какое совпадение!
Другой момент, требующий особого внимания - приоритеты задач в кооперативном мире. Если приоритеты постоянны, то низкоприоритетная задача может не получить управления никогда. Если же их менять, то как? Мой совет такой: используйте 2 приоритета: высший для планировщика и round robin для всего остального. В общем случае, работает надежно.
Из всего вышесказанного, в общем случае, кооперативная RTOS это то, что лучше подходит для систем с малым об'емом RAM.
Желаю успехов!

Сообщение отредактировал pitt - Jul 3 2006, 15:02


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
vesago
сообщение Jul 4 2006, 08:13
Сообщение #23


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Вперве применил КА когда надо было сделать контроллер двух турникетов. Теперь только на них все и делаю. Сами свитчи тоже люблю. ифы применяю редко. Код получается понятным, скоростным и сатбильным. Мне кажется для встроенных приложений это оптиамльное решение. Хотя по сравнениию с осью сложнее по началу - надо мышление приучить.
Go to the top of the page
 
+Quote Post
white.wind
сообщение Jul 4 2006, 08:24
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 2-05-06
Из: Санкт-Петербург
Пользователь №: 16 707



Возможно полезным будет ресурс на тему http://softcraft.ru/auto.shtml Там есть даже варианты объектно-ориентированного подхода к автоматам (в том смысле, что тема живет и развивается)
Go to the top of the page
 
+Quote Post
_artem_
сообщение Jul 4 2006, 08:43
Сообщение #25


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Цитата(vesago @ Jul 4 2006, 11:13) *
Вперве применил КА когда надо было сделать контроллер двух турникетов. Теперь только на них все и делаю. Сами свитчи тоже люблю. ифы применяю редко. Код получается понятным, скоростным и сатбильным. Мне кажется для встроенных приложений это оптиамльное решение. Хотя по сравнениию с осью сложнее по началу - надо мышление приучить.


Вызов фунцкий по таблице указателей где переменную для switch используют как индекс к таблице работает быстрее конструкции switch.
Эт типа lookup table принцип для бранча . Если не ошибаюсь , таким макаром делают диспатч системных вызовов в осях .


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
ig_z
сообщение Jul 4 2006, 10:30
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



Цитата(_artem_ @ Jul 4 2006, 11:43) *
Вызов фунцкий по таблице указателей где переменную для switch используют как индекс к таблице работает быстрее конструкции switch.
Эт типа lookup table принцип для бранча . Если не ошибаюсь , таким макаром делают диспатч системных вызовов в осях .


В первую очередь этим механизмом пользутся тулзы для автоматической кодогенерации автоматов состояний. Добавить сюда несколько понятий из теории автоматов и получится что то типа иар вижуал стейт. biggrin.gif
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jul 4 2006, 11:21
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(_artem_ @ Jul 4 2006, 11:43) *
Вызов фунцкий по таблице указателей где переменную для switch используют как индекс к таблице работает быстрее конструкции switch.
Эт типа lookup table принцип для бранча . Если не ошибаюсь , таким макаром делают диспатч системных вызовов в осях .

Вообще-то, это далеко не всегда так. В принципе, для оператора switch должны генерироваться таблицы переходов. Правда, в IAR такого не делалось раньше, но, говорят, что в последних версиях это все-таки сделано.

Сообщение отредактировал _Bill - Jul 4 2006, 11:23
Go to the top of the page
 
+Quote Post
_artem_
сообщение Jul 4 2006, 11:22
Сообщение #28


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Цитата(ig_z @ Jul 4 2006, 13:30) *
Цитата(_artem_ @ Jul 4 2006, 11:43) *

Вызов фунцкий по таблице указателей где переменную для switch используют как индекс к таблице работает быстрее конструкции switch.
Эт типа lookup table принцип для бранча . Если не ошибаюсь , таким макаром делают диспатч системных вызовов в осях .


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


Кстати творение этого кодоавтомата SDL у меня вот уже где. Что интересно - наш процессор вообше функшон пойнтер не поддерживает.) Хотя это в частном .

Дюмаю что rtti тоже его немало пользует. Оптимайзеры блин .
Visual state говорите? Бррр, вот куда автоматика нас завела. Еще немного и у меня к автоматам аллергия начнется.)


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
bialix
сообщение Jul 4 2006, 14:34
Сообщение #29


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 4-11-04
Из: zp.ua
Пользователь №: 1 046



Цитата(_artem_ @ Jul 4 2006, 14:22) *
Visual state говорите? Бррр, вот куда автоматика нас завела. Еще немного и у меня к автоматам аллергия начнется.)


к чужой аллергии у меня претензий нет. ваша аллергия -- ваше личное дело.

но предлагаю не путать теплое с мягким.


--------------------
Имей мужество пользоваться своим собственным разумом! (с) И.Кант
Go to the top of the page
 
+Quote Post
bialix
сообщение Jul 4 2006, 14:54
Сообщение #30


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 4-11-04
Из: zp.ua
Пользователь №: 1 046



Хотел бы пару слов сказать в ответ исходному посту.

Вижуал Стейт пробовал-смотрел. Мне не понравилось. Хотя идея с виду красивая, но есть ряд ограничений, которые не переплюнешь никак. Поэтому в дальнейшем отказался.

Вижуал Стейт предлагает практически замкнутый процесс разработки -- от проектирования и симуляции, до отладки на прототипе или реальном железе. Их символ -- колесо, как отображение идеи замкнутого цикла разработки. Или итеративного цикла.

Сами по себе диаграммы состояний IVS (Iar Visual State) -- это часть стандарта UML, слегка модифицированные под нужды IVS (чего-то добавлено, даже кажется полезного). В итоге получаем проектирование жесткой системы. Наиболее вероятным кандидатом в качестве целевой платформы для генерируемой системы являются ПЛК. На это указывает многое. В частности, так любимый в ПЛК принцип "сначал читаем все входы - затем обновляем все выходы".

Генерируемая система хоть и представляет собой си-код, но на самом деле это табличный жесткозашитый автомат, т.е. руками сгенерированный код не отредактируешь даже при большом желании. Плохо это тем, что IVS нельзя использовать для кодогенерации отдельных разнообразных автоматов для нетипичных с точки зрения IVS задач. Так, например, IVS определяет понятие параллельных автоматов, но желание создать массив однотипных параллельных автоматов в количестве N штук не позволяет, т.е. необходимо как-то выкручиваться с copy-paste и не факт, что вам это удастся. По крайней мере для меня это стало одним из главных препятствий в использовании.

Сам редактор расчитан на большую и вдумчивую работу и несложные автоматы по своей сути. Нащелкивать мышкой сложный автомат -- дело весьма трудоемкое, особенно для тех, кто любит, чтобы было еще и красиво (это как с рисованием схем в OrCad -- как начнешь красоту наводить, так пару часов на это потратить нефиг делать).

В общем, несмотря на красивый фасад и уйму потенциальных возможностей, для областей не связанных с ПЛК использование IVS, особенно на мелких контроллерах (типа АВР) представляется мне неоправданным.

Сам по себе автоматный подход (оно же синхронное программирование -- в западных источниках) мне видится единственным способом писать логику работы. НО! не всего устройства в целом в виде одного огромного автомата, а в виде N количества паралелльных слабозависимых (в идеале независимых вообще) автоматов. А там или ОС применить для жонглирования этими автоматами или просто в один бесконечный цикл их засунуть -- это дело личных пристрастий каждого.

Поэтому с точки зрения делать всю программу на одном жестком конечном автомате или на ОС -- я не стал бы выбирать первое (только если это задача по написанию ПО для открыванию лотка CDROM или миганию лампочек). Для реальных задач лучше использовать россыпь небольших квазипараллельно работающих конечных автоматов.

Сам я ОС до сих пор не пользовался, ибо по сути тщательно спроектированная система в виде набора параллельных автоматов -- это практически тоже самое, что и кооперативная ОС, только памяти жрет еще меньше и ты всегда имеешь полный контроль над процессом. Т.е. каждый раз я делаю примитивную кооперативную карусель, и мне хватает. Из набора сервисов: таймеры, фифо, реже семафоры. Это позволяет обеспечивать максимальную независимость работы разных задач, плюс регулировать насколько часто та или иная задача будет выполнять свою работу. Т.е. deadlock в таком виде невозможен, система работает предсказуемо. Что еще нужно для счастья?


--------------------
Имей мужество пользоваться своим собственным разумом! (с) И.Кант
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 23:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01513 секунд с 7
ELECTRONIX ©2004-2016