|
State machine, Приведите примеры реализации |
|
|
|
Feb 2 2005, 12:29
|
Группа: Новичок
Сообщений: 10
Регистрация: 6-07-04
Пользователь №: 265

|
Где можно почитать по теме/посмотреть примеры на С, асме
|
|
|
|
|
 |
Ответов
|
Mar 22 2009, 04:53
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Diz @ Mar 14 2009, 11:13)  Интересно, а как сделать с набором параллельно работающих конечных автоматов (без RTOS) долго работающую задачу, требующую активного участия процессора ? Например, работу с FAT (сектор может читаться значительное время) или рендеринг экрана для UI (тоже небыстро). Разбивать на отдельные этапы некрасиво и неудобно, а иначе задача будет блокировать другие на долгое время. ..... С FAT пример неудачен. Сектор то читается драйверком SPI, и пока он читается задача отдыхает (не требует активного участия CPU). Рендеринг экрана - подходящий пример. Посмотрим по аналогии. Есть Borland'овский VCL, где вся графика обслуживается исключительно в основном потоке приложения, и при запуске какой-то длительной задачки в том же основном потоке прорисовка приложения намертво тормозится. Чтобы пользователь не подумал, что программа зависла, можно и нужно было либо стартовать доп поток, либо, что значительно проще - иногда вызвать функцию: Application->ProcessMessages(); Вот так же можно поступить и тут. Что мешает реализовать некую функцию yield / idle - которую любой затяжной процесс сможет вызвать сам, чтобы дать поработать всем остальным процессам? Для того чтобы такую функцию можно было реализовать, необходимо чтобы был список задач(автоматов) с возможностью модификации в Run-Time (чтобы процесс вызывающий эту функцию мог быть удален из списка процессов на время своего испонения). Сосбно вот: CODE typedef void (* p_cb)(void);
#define COUNT(arr) (sizeof(arr) / sizeof((arr)[0]))
p_cb list[4];
void add_task( p_cb Callback) { for(int i = 0; i < COUNT(list); i++) if (!list[ i ]) { list[ i ] = Callback; break; } }
void idle(void) { for(int i = 0; i < COUNT(list); i++) if (list[ i ]) { p_cb cb = list[ i ]; list[ i ] = NULL; cb(); list[ i ] = cb; } }
void foo_1(void) { }
void foo_2(void) { }
// это долгий процесс делающий рендеринг void foo_long(void) { volatile unsigned long x = -1UL; while( x--) { // ... do complex stuff
if ( (x & 0xFF) == 0 ) // 255 iterations passed { // дадим поработать другим задачам idle(); } } }
void main(void) { add_task( foo_1 ); add_task( foo_2 ); add_task( foo_long ); for(;;) idle(); } Цитата Да, большие готовые библиотеки лишают автоматы всяческих преимуществ... Однако тупик с автоматами... Раскидать idle()'ов по ключевым точкам и автоматы получают вторую жизнь.
Причина редактирования: Уменьшение видимого размера цитаты исходника.
|
|
|
|
|
Mar 23 2009, 09:57
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(defunct @ Mar 22 2009, 07:53)  Раскидать idle()'ов по ключевым точкам и автоматы получают вторую жизнь. Конкретный пример. Готовая библиотека efsl. Вставка готового порта заняла час. Как по быстрому применить автомат для разделения процессов? Потратить несколько дней на разбиение на куски? Запихнуть процессы в прерывания? Да у меня под отладкой вообще прерывания глючат, все разобраться некогда. Тупик может не с автоматами, а в голове. Завтра выставка
--------------------
Уходя, оставьте свет...
|
|
|
|
Сообщений в этой теме
sat State machine Feb 2 2005, 12:29 bialix Сайты:
http://is.ifmo.ru
http://softcraft.ru - раз... Feb 2 2005, 12:41 -Tумблер- Цитата(sat @ Feb 2 2005, 15:29)...посмотреть ... Feb 3 2005, 12:02 ALys 1. IAR VisualSTATE - в пакете примеры (под разные ... Feb 3 2005, 15:52 ig_z Цитата(ALys @ Feb 3 2005, 18:52)2. TS Control... Feb 4 2005, 12:44  sat Что то не ставится на ХР. Или это аддон к чему - ... Feb 7 2005, 11:50   maegg Может коротенько объясните, зачем это нужно и в ка... Feb 7 2005, 13:17    vet Цитата(maegg @ Feb 7 2005, 16:17)Может короте... Feb 7 2005, 19:54  ALys Что то не ставится на ХР. Или это аддон к чему - ... Feb 8 2005, 13:07 basileus SWITCH MACRO
local MYP
CLR ZH
ADZ (MYP>>1)... Feb 17 2005, 12:50 Tran Уважаемые, подскажите, пожалуйста, среды разработк... Sep 9 2005, 09:30 BVU Можно почитать теорию графов, там заложен базовый ... Sep 9 2005, 11:20 Sergu Вот хорошие объяснения с примерами есть:
State-O... Sep 12 2005, 03:27 TMX Код/**********************************************... Sep 12 2005, 10:29  Tran Этот код Вы наверняка писали руками. А есть ли про... Sep 12 2005, 11:14   TMX Цитата(Tran @ Sep 12 2005, 14:14)Этот код Вы ... Sep 15 2005, 16:34 lolikandr Если интересует интересный инструмент, то посмотри... Sep 13 2005, 09:35 Владимир_2010 Применение теории конечных автоматов к программиро... Mar 4 2009, 12:54 TMX Цитата(Владимир_2010 @ Mar 4 2009, 16:54)... Mar 4 2009, 17:31 Diz Рекомендую ознакомиться с реализацией иерархически... Mar 4 2009, 17:33 _Pasha Цитата(Diz @ Mar 4 2009, 20:33) Рекоменду... Mar 4 2009, 18:20  Alex B._ Цитата(_Pasha @ Mar 4 2009, 21:20) УПС. Т... Mar 4 2009, 21:41 Владимир_2010 Diz спасибо за ссылку на книги. В сети также есть ... Mar 5 2009, 06:54 TMX Цитата(Владимир_2010 @ Mar 5 2009, 10:54)... Mar 5 2009, 14:29 TMX Цитата(Владимир_2010 @ Mar 5 2009, 10:54)... Mar 5 2009, 15:17  _Pasha Цитата(TMX @ Mar 5 2009, 18:17) недостатк... Mar 5 2009, 15:38   TMX Цитата(_Pasha @ Mar 5 2009, 18:38) Позвол... Mar 5 2009, 17:09    Diz Цитата(TMX @ Mar 5 2009, 20:09) не слышал... Mar 5 2009, 17:31    _Pasha Цитата(TMX @ Mar 5 2009, 20:09) там Marti... Mar 5 2009, 17:50     TMX Цитата(_Pasha @ Mar 5 2009, 20:50) no com... Mar 6 2009, 07:35      _Pasha Цитата(TMX @ Mar 6 2009, 10:35) если еще ... Mar 6 2009, 13:42      TMX Недостатки прямого присваивания значения переменно... Mar 10 2009, 13:42 _Pasha А что-нибудь есть в ту же тему, но с текстовым вво... Mar 5 2009, 14:35 Diz Что касается визуализации, то я имел в виду следую... Mar 5 2009, 16:55 Diz Наверное, jumptable может быть полезен для сохране... Mar 6 2009, 13:20 TMX Цитата(Diz @ Mar 6 2009, 16:20) Наверное,... Mar 6 2009, 14:35  Dog Pawlowa Цитата(TMX @ Mar 6 2009, 18:35) сомнитель... Mar 10 2009, 16:14   TMX Цитата(Dog Pawlowa @ Mar 10 2009, 19:14) ... Mar 10 2009, 16:57    Dog Pawlowa Цитата(TMX @ Mar 10 2009, 20:57) с первым... Mar 10 2009, 17:36  Diz Цитата(TMX @ Mar 6 2009, 17:35) сомнитель... Mar 11 2009, 08:24   TMX Цитата(Diz @ Mar 11 2009, 11:24) Пример в... Mar 11 2009, 09:06    Dog Pawlowa Цитата(TMX @ Mar 11 2009, 12:06) то есть,... Mar 11 2009, 10:12     TMX Цитата(Dog Pawlowa @ Mar 11 2009, 13:12) ... Mar 11 2009, 13:22      _Pasha Цитата(TMX @ Mar 11 2009, 17:22) Тестиров... Mar 11 2009, 13:45      Dog Pawlowa Цитата(TMX @ Mar 11 2009, 17:22) А вот на... Mar 11 2009, 13:46       TMX Цитата(Dog Pawlowa @ Mar 11 2009, 16:46) ... Mar 12 2009, 12:14        Dog Pawlowa Цитата(TMX @ Mar 12 2009, 15:14) К пример... Mar 13 2009, 09:21         TMX Цитата(Dog Pawlowa @ Mar 13 2009, 12:21) ... Mar 13 2009, 10:07          Dog Pawlowa Цитата(TMX @ Mar 13 2009, 14:07) Просто м... Mar 13 2009, 14:59           _Pasha Цитата(Dog Pawlowa @ Mar 13 2009, 17:59) ... Mar 13 2009, 15:21           TMX Цитата(Dog Pawlowa @ Mar 13 2009, 17:59) ... Mar 13 2009, 16:08            _Pasha Цитата(TMX @ Mar 13 2009, 19:08) Если авт... Mar 13 2009, 16:23             TMX это я показал round-robin с постоянным приоритетом... Mar 13 2009, 16:55              _Pasha Цитата(TMX @ Mar 13 2009, 20:55) Вопрос в... Mar 13 2009, 17:14 -=TRO=- Внутри программируемой логики собирают микропроцес... Mar 10 2009, 16:47 _Pasha Весь смех в том, что сишная или иная ЯВУ-программа... Mar 10 2009, 18:17 Rst7 Цитатапри помощи переменной state эмулирует счетчи... Mar 10 2009, 19:15 ReAl Цитата(Rst7 @ Mar 10 2009, 21:15) Я давно... Mar 10 2009, 19:51  Dog Pawlowa Цитата(ReAl @ Mar 10 2009, 22:51) Тада, и... Mar 11 2009, 07:18   ReAl Цитата(Dog Pawlowa @ Mar 11 2009, 09:18) ... Mar 13 2009, 21:30 _Pasha Цитата(Diz @ Mar 11 2009, 11:24) Индекс -... Mar 11 2009, 11:40 Dog Pawlowa Цитата(Diz @ Mar 14 2009, 13:13) Интересн... Mar 14 2009, 13:07 singlskv Цитата(Diz @ Mar 14 2009, 12:13) Интересн... Mar 14 2009, 22:23  Diz Цитата(singlskv @ Mar 15 2009, 01:23) Раз... Mar 15 2009, 09:26   _Pasha Цитата(Diz @ Mar 15 2009, 13:26) Вообщем,... Mar 16 2009, 06:17   singlskv Цитата(Diz @ Mar 15 2009, 12:26) Вообщем,... Mar 19 2009, 20:12 Diz Еще один интересный вариант реализации машины сост... Mar 17 2009, 20:14 Diz Цитата(singlskv @ Mar 19 2009, 23:12) Как... Mar 19 2009, 21:32 Dog Pawlowa Цитата(Diz @ Mar 20 2009, 00:32) Ну, это ... Mar 20 2009, 09:05  singlskv Цитата(Dog Pawlowa @ Mar 20 2009, 12:05) ... Mar 20 2009, 20:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|