Многопоточность в ADAM 5510( или прерывания) |
Ответить | Страница 123 7> |
Автор | |
Участник Присоединился: 10 Апрель 2009 Категория: Afghanistan Online Status: Offline Публикации: 55 |
Опубликовано: 10 Апрель 2009 10:32 |
у меня имеется котнтроллер ADAM-5510M. Надо чтобы в бесконечном цикле выполнялись куча алгоритмов, с другой стороны постоянно надо опрашивать DI ( входы к которым подключена клавиатура ) и если кто клацнет например кнопку СТОП надо моментально среагировать
Можно ли это организовать с помощью мульти потоков, есть ли Multithreading в библиотеках для ADAM5510? или недокументированное что-нибудь, Или как можно это сделать с помощью прерываний? Плиз хелп! |
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Просто сделать опрос IO - одной из задач С уважением, SAN |
|
Участник Присоединился: 10 Апрель 2009 Категория: Afghanistan Online Status: Offline Публикации: 55 |
|
Просто у меня получаются циклы в циклах, а проверять надо постоянно, что муторно. Ладно, спасибо и на этом |
|
Участник Присоединился: 10 Апрель 2009 Категория: Afghanistan Online Status: Offline Публикации: 55 |
|
Ладно, спасибо и на этом Просто у меня получаются циклы в циклах, а проверять входы надо постоянно, что муторно. |
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Циклы в циклах ? ... Я ваще-то по другому представлял : один общий цикл обходит все задачи, и самое главное (!) - не на одной не застревает, а проходит каждую независимо от результата её выполнения. Если чо не сделал в текущем цикле - доделает в следующем и т.д. Каждая задача состоит из нескольких шагов, и по мере выполнения, если шаг выполнен, переходит на следующий шаг в каждом цикле (или не переходит), может торчать на одном шагу (тогда используется счетчик) и т.д. и т.п... И никакой возни с приоритетами и прочее. Такая схема задумана исключить всякие зависания. Простая - как "два байта отослать" ! Конечно есть и недостатки. Так, из-за отсутствия приоритетов все задачи вынуждены работать с одинаковой скоростью. Но, если подумать, то например, чтение вх/вых нет смысла делать чаще других задач, потому что результаты вх/вых нужны всем задачам ! Такой организацией я уже давно с успехом пользуюсь. Практика показала - С уважением, SAN |
|
Участник Присоединился: 29 Июнь 2007 Категория: Russian Federation Online Status: Offline Публикации: 62 |
|
В общем тебе нужно реализовать так называемую машину состояний (state machine).
ЗЫ: Почему то практически все программеры про нее забывают. |
|
С уважением!
|
|
Участник Присоединился: 10 Апрель 2009 Категория: Afghanistan Online Status: Offline Публикации: 55 |
|
А что за машина состояний ? Я про нее не слышал |
|
Участник Присоединился: 10 Апрель 2009 Категория: Afghanistan Online Status: Offline Публикации: 55 |
|
Лан спасиба попробоую |
|
Участник Присоединился: 10 Апрель 2009 Категория: Afghanistan Online Status: Offline Публикации: 55 |
|
[QUOTE=sanwork]
Циклы в циклах ? ... Я ваще-то по другому представлял : один общий цикл обходит все задачи, и самое главное (!) - не на одной не застревает, а проходит каждую независимо от результата её выполнения. Если чо не сделал в текущем цикле - доделает в следующем и т.д. Каждая задача состоит из нескольких шагов, и по мере выполнения, если шаг выполнен, переходит на следующий шаг в каждом цикле (или не переходит), может торчать на одном шагу (тогда используется счетчик) и т.д. и т.п... вообще приколно, но одну вещь я не понял: если я выполнил 5 шагов задачи, 6-ой не прошел при новом прохождении задачи как мне узнать что сразу на 6-ой шаг записываь в переменные? и в самой задаче проверки - если шаг равен 1, равен 2 и т.д.? Так я понял |
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
[/QUOTE] ... Чаще называют "команд-аппарат", и еще другие названия .. Надо сказать, что этот механизм обладает широкими возможностями. Основное - одна задача может управлять любой другой. То-есть, если при выполнении процесса нужно вызваать какую-нибудь подзадачу то не надо делать "цикл-в-цикле", а просто нужная задача взводится в состояние активного выполнения. При этом все задачи и подзадачи выполняются на одном уровне, без всяких вложений ! Когда позадача выполнит все нужные шаги, то она переходит в состояние "выполнено", и при очередном обходе главного цикла диспетчер задач её больше не вызывает. Вот и всё ! Хоть я и говорил, что в этой многозадачной системе нет приоритетов в явном виде - функционально они есть ! Взаимное управление задачами - не что иное как гибкий механизм динамического формирования приоритетов. И при этом сохраняется предельная простота схемы, что спасает от ненужной путанницы ! С вуажением, SAN |
|
Ответить | Страница 123 7> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |