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

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


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

Группа: Свой
Сообщений: 135
Регистрация: 21-06-04
Пользователь №: 70



Раньше уже была тема о КА - http://electronix.ru/forum/index.php?showt...&hl=Ts+controls
, там постили редактор/кодогенератор TS Control, я попробовал с этой прогой работать, мне понравилось


--------------------
Настоящее чревато будущим.
Go to the top of the page
 
+Quote Post
tag
сообщение Jul 10 2006, 15:17
Сообщение #47


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

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(krdmitry @ Jul 3 2006, 00:34) *
Вроде, в нашем родном ГОСТе предусматриваются только алгоритмы ("схема программы")...



...да, но в ГОСТе никто не отменял рисунков в описании программы. Я обычно при разработке разрисовываю алгоритм в виде КА, а кодирую как набор функций одного типа (каждая функция выполняет один переход КА и в указателе сохраняет адрес функции следующего перехода), затем в main-е вызываю их через указатель на функцию. Как мне кажется это удобней чем постоянно анализировать переменную состояния
Go to the top of the page
 
+Quote Post
bialix
сообщение Jul 11 2006, 05:36
Сообщение #48


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

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



По поводу диаграмм конечных автоматов в нотации UML.

Рекомендую книгу: Хассан Гома "UML проектирование систем реального времени, распределенных и параллельных приложений", изд-во ДМК, Москва 2002.

Где-то в сети эта книга гуляет в электронном виде, у меня вариант в виде мертвого дерева, поэтому не подскажу. Поищите на известных сайтах.

Эта книга хороша для начального ознакомления с UML нотацией для диаграмм конечных автоматов и подходит в качестве дополнительного источника при изучении Iar Visual State.


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


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Cегодня такая вот прелесть попалась - 4 макроса для реализации механизма простых сопрограмм

http://www.codepost.org/view/101

#define cr_start() static int __s = 0; switch (__s) { case 0:
#define cr_returnv { __s = __LINE__; return; case __LINE__: ; }
#define cr_return(x) { __s = __LINE__; return x; case __LINE__: ; }
#define cr_end() } __s = 0;

IMHO, изящное решение. Беру на вооружение


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
µµC
сообщение Jul 14 2006, 12:34
Сообщение #50


Участник
*

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



Цитата(Lem @ Jul 3 2006, 00:41) *
Причём, речь идёт конкретно о семействе AVR, как можно было бы догодаться, то есть, экономия железа - на первом или почти на первом месте (естественно, применяется С, но возможность применения RTOS на таком кристалле, как, например, atmega8, сомнительна).
Немного сумбурно, но суть моих сомнений-размышлений, думаю, понятна. Интересно услышать, что думают об этом другие разарботчики.


На счет mega8 и RTOS не соглашусь. Успешно использовал RTOS (jacOS) и для mega8 и для более слабых контроллеров (PIC18F1320, PIC16F628A и даже PIC12F683). Для mega8 накладные расходы составили около 450байт flash. На мой взгляд - сущие пустяки, тем более что осталось не задействовано еще 2K flash.
Go to the top of the page
 
+Quote Post
osnwt
сообщение Jul 14 2006, 12:43
Сообщение #51


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

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



Цитата(µµC @ Jul 14 2006, 15:34) *
Для mega8 накладные расходы составили около 450байт flash. На мой взгляд - сущие пустяки

Особенно с учетом того, что эту функциональность в той или иной степени все равно пришлось бы реализовывать самому, что скушало бы примерно половину этого объема, если не больше.
Go to the top of the page
 
+Quote Post
µµC
сообщение Jul 14 2006, 13:30
Сообщение #52


Участник
*

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



Цитата(osnwt @ Jul 14 2006, 16:43) *
Особенно с учетом того, что эту функциональность в той или иной степени все равно пришлось бы реализовывать самому, что скушало бы примерно половину этого объема, если не больше.


Что-нибудь да скушало бы, это точно. Вообще, стремлюсь пользоваться самыми самыми простыми и "шоколадными" сервисами Delay, Stop, Resume, Cooperate, а в прерываниях не использую сервисы как класс (расставлю флажки и потом подбираю их в цикле планировщика). Конечно, это минимум возможностей, и хоть ясно как сделать все это без RTOS, делать без нее категорически не хочется. Даже если удастся 100-200 байт "освободить". smile.gif
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Sep 16 2007, 14:22
Сообщение #53


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

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



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


Во-первых оптимизирующий компилятор заменяет switch на переход по таблице...

Во-вторых суть switch (вместо альтернативы с таблицей адресов *функций*) в том, что ограничивается, на уровне языка, область видимости переменных/функций на уровне ближайшей функции-автомата, а не на уровне модуля. Практически табличный подход может оказаться более неэффективным из-за исключительно нерациональной, например, передачи аргументов и локальных переменных автомата.


Цитата(sensor_ua @ Jul 11 2006, 22:22) *
Cегодня такая вот прелесть попалась - 4 макроса для реализации механизма простых сопрограмм

http://www.codepost.org/view/101

#define cr_start() static int __s = 0; switch (__s) { case 0:
#define cr_returnv { __s = __LINE__; return; case __LINE__: ; }
#define cr_return(x) { __s = __LINE__; return x; case __LINE__: ; }
#define cr_end() } __s = 0;

IMHO, изящное решение. Беру на вооружение


Сопрограмммы, увы, существенно отстают даже от SWITCH технологии им. А. А. Шалыто. Последняя, впрочем,
самодостаточна только для простых систем.


--------------------
[ZX]
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 16 2007, 17:20
Сообщение #54


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Во-первых оптимизирующий компилятор заменяет switch на переход по таблице...

IAR AVR не так давно имел 3!!! модели работы со switch. Устанавливается ручками. Ведёт себя соотвественно - специально проверял.
Цитата
Во-вторых суть switch (вместо альтернативы с таблицей адресов *функций*) в том, что ограничивается, на уровне языка, область видимости переменных/функций на уровне ближайшей функции-автомата, а не на уровне модуля.

Дело в том, что сопрограммы в представленном формате фактически только статические. Область видимости ограничивается сутью - локальные переменные статические. Область видимости - соответственно.
Цитата
Сопрограмммы, увы, существенно отстают даже от SWITCH технологии им. А. А. Шалыто. Последняя, впрочем,
самодостаточна только для простых систем.

О так называемой "технологии им Шалыто" унал от создателя nesos - http://www.nilsenelektronikk.no/nenesos.html - о чём давал линк на первой странице обсуждения в 14-м посте.
А насчёт сопрограмм, то они, конечно, имеют свои недостатки. Вот господин Adam Dunkels сопрограммы ввернул в Protothreads и не постеснялся. Покажите, плз. внятный академический пример, в котором SWITCH сделан не на виртуальном языке, а на Си (но не nesos) и как его применить и чем же оно так разительно отличается. Хочу увидеть практический вариант SWITCH технологии явно отличающийся от статических сопрограмм. А то получается "армянин лучше, чем грузин" wink.gif


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 16 2007, 19:32
Сообщение #55


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Kirill Frolov @ Sep 16 2007, 17:22) *
Во-вторых суть switch (вместо альтернативы с таблицей адресов *функций*) в том, что ограничивается, на уровне языка...

Я то думал, что суть switch - обеспечить нужную логику работы smile.gif
Если сравнивать switch и массив функций с вызовом по индексу по удобству работы программиста (считая компилятор идеально оптимизирующим), то я пришел к простому выводу - если switch помещается на экран (страницу), то использую switch, если нет - массив функций, специальным образом их называя. Сложности передачи аргументов не убедительны.
Что же касается RTOS... При значительно отличающихся приоритетах задач мне лично хочется иметь механизм управления ресурсами простым и наглядным.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 16 2007, 20:16
Сообщение #56


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Kirill Frolov @ Sep 16 2007, 18:22) *
Во-первых оптимизирующий компилятор заменяет switch на переход по таблице...
Во-первых, хороший оптимизирующий компилятор это делает не всегда, а только
тогда, когда это выгодно....
Цитата
Во-вторых суть switch (вместо альтернативы с таблицей адресов *функций*) в том, что ограничивается, на уровне языка, область видимости переменных/функций на уровне ближайшей функции-автомата, а не на уровне модуля. Практически табличный подход может оказаться более неэффективным из-за исключительно нерациональной, например, передачи аргументов и локальных переменных автомата.
Красиво расказываете....,
а нельзя ли какой нить примерчик в студию ?
то есть типа исследование того как разные компиляторы раскрывают switch..case по сравнению
с табличным вызовом... было бы очень интересно...
Go to the top of the page
 
+Quote Post
tag
сообщение Sep 17 2007, 06:17
Сообщение #57


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

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(vet @ Jul 2 2006, 23:22) *
Да, собственно, выбор-то невелик - или КА, или задачи под управлением операционной системы.
Есть лишнее ОЗУ - закладываем RTOS, нет - обходимся автоматами.

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


Цитата(Dog Pawlowa @ Sep 16 2007, 23:32) *
Что же касается RTOS... При значительно отличающихся приоритетах задач мне лично хочется иметь механизм управления ресурсами простым и наглядным.



...не понимаю. Как правило этот механизм и есть простой и наглядный, при этом описывается в нескольких правилах.
Go to the top of the page
 
+Quote Post
sansnotfor
сообщение Mar 24 2011, 00:24
Сообщение #58


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 24-10-08
Пользователь №: 41 157



Вот перевод упомянутой здесь статьи о конечных автоматах - Martin Gomez "Embedded State Machine Implementation".


Сообщение отредактировал sansnotfor - Mar 24 2011, 00:24
Go to the top of the page
 
+Quote Post
kovz
сообщение Mar 28 2011, 13:15
Сообщение #59


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

Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079



могу посоветовать вот это http://www.state-machine.com кооперативная и приоритетная реализация + графическая среда разработки. Мне нравится.

Во блин, не заметил что тема нафталином пропитана sm.gif

Сообщение отредактировал kovz - Mar 28 2011, 13:17
Go to the top of the page
 
+Quote Post

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

 


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


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