Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Многозадачность на AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
AVR
Возможно ли как-то реализовать в AVRах переключение с одного потока команд на другие, которые выполняются "параллельно"?
defunct
Вполне возможно. Есть два, пути:

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

Второй путь - организовать потоки таким образом, чтобы они сами передавали управление другим потокам. Тут путей реализации масса:
1. аналогично механизму WaitFor()/Sleep() в Windows.
2. короткие функции заведомо быстро выполняющиеся (с последовательным вызовом в основном цикле программы).
3. через простенький планировщик (который выполняется в контексте основного потока) и будет запускать периодические задачи через заданный интервал времени. Задачи не должны быть бесконечными, при завершении действия обязательно должны возвращать управление планировщику (механизми icall - ret).
IgorKossak
Или возьмите готовую scmRTOS от нашего уважаемого dxp и не мучайтесь долго.
osnwt
Цитата(IgorKossak @ Jul 3 2006, 15:55) *
Или возьмите готовую scmRTOS от нашего уважаемого dxp и не мучайтесь долго.

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

Как альтернатива, jacos - при определенном внимании к программированию задач позволяет очень эффективно реализовать псевдопараллельное исполнение независимых задач и обмен данными между ними. Сам в свое время попробовал - очень понравилось. Очень подробное описание (на русском языке) с множеством примеров. Хороша именно отличной оптимизацией под ряд контроллеров (в т.ч. AVR, PIC, MSP430).
AVR
Большое спасибо за инфу smile.gif
pitt
electronix.ru
muravei
Может это поможет.Я , правда , не вникал.
vesago
Как вариант - построение кода на основе конечных автоматов. Может не так удобно как оси, но зато меньше ресурсов надо.
AVR
Цитата(osnwt @ Jul 3 2006, 19:11) *
Как альтернатива, jacos - при определенном внимании к программированию задач позволяет очень эффективно реализовать псевдопараллельное исполнение независимых задач и обмен данными между ними. Сам в свое время попробовал - очень понравилось. Очень подробное описание (на русском языке) с множеством примеров. Хороша именно отличной оптимизацией под ряд контроллеров (в т.ч. AVR, PIC, MSP430).

Спасибо за ссылку, очень хорошая штука, примеры хорошие - разобрался в первый же час, ресурсов мало (вроде) кушает.
haker_fox
Цитата(AVR @ Jul 6 2006, 03:27) *
Цитата(osnwt @ Jul 3 2006, 19:11) *

Как альтернатива, jacos - при определенном внимании к программированию задач позволяет очень эффективно реализовать псевдопараллельное исполнение независимых задач и обмен данными между ними. Сам в свое время попробовал - очень понравилось. Очень подробное описание (на русском языке) с множеством примеров. Хороша именно отличной оптимизацией под ряд контроллеров (в т.ч. AVR, PIC, MSP430).

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

Если есть вермя и желание, не расскажете ли подробнее обо всем?) Примеры задач, запущенных под осью; траблы с программированием, сборкой проекта и прочее? Я думаю многим было бы интересно.
AVR
Цитата(haker_fox @ Jul 6 2006, 07:01) *
Цитата(AVR @ Jul 6 2006, 03:27) *

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

Если есть вермя и желание, не расскажете ли подробнее обо всем?) Примеры задач, запущенных под осью; траблы с программированием, сборкой проекта и прочее? Я думаю многим было бы интересно.

В принципе тут всё подробно расписано: http://jacos.narod.ru/load/jacos_v1070.zip
Тут и очень хорошее подробное описание, и примеры прилагаются. А для сборки проекта потреюутся библиотеки (под IAR): http://jacos.narod.ru/load/libr_v1070_avr_iar.zip
Тут куча библиотек, но для проекта потребуется только одна, а как выбрать нужную библиотеку расписано в справке в разделе "библиотеки".
А из траблов программирования, то например что первое попалось на глаза это если компилировать с поддержкой функций-сервисов ОС в обработчиках прерываний, то программа почему-то вешается сразу. Также если разрешать работу USARTа и его прерывания в данном потоке, то в нём почему-то невозможно использовать функции OS_Stop_Task и OS_Delay, только OS_Cooperate работает, иначе программа вешается...
osnwt
Цитата(AVR @ Jul 6 2006, 23:35) *
А из траблов программирования, то например что первое попалось на глаза это если компилировать с поддержкой функций-сервисов ОС в обработчиках прерываний, то программа почему-то вешается сразу.

Напомню, что для поддержки сервисов в прерываниях нужно:
- использовать соответствующую версию библиотеки (с буквой i);
- разрешить нужные сервисы в явном виде в файле конфигурации;
- использовать в прерываниях версии сервисов, для того предназначенных (с окончанием на I).

Иначе будет что угодно, в том числе, и зависы.

Вообще, если можно обойтись в прерывании без вызова сервисов (или вообще других функций, особенно определенных в других файлах), то лучше так и делать. Иначе мы получим сохранение множества регистров (так как в общем случае компилятор имеет право использовать половину регистров в других функциях). В моей ситуации, когда мне было важно отрабатывать относительно точное время для одной из задач по прерыванию таймера, я в прерывании просто взводил битовый флаг в регистровой переменной, а снаружи его проверял (в основном цикле планировщика) и уже оттуда вызывал сервис OS. Получалось, что я, практически, из прерывания стартовал внешнюю задачу (которая получала при этом наивысший приоритет по определению из документации), и ничего не терял (так как у нас допустима погрешность в пределах кванта времени - раньше мы все равно не можем гарантировать вызов задачи.
AVR
Цитата(osnwt @ Jul 7 2006, 01:30) *
Напомню, что для поддержки сервисов в прерываниях нужно:
- использовать соответствующую версию библиотеки (с буквой i);
- разрешить нужные сервисы в явном виде в файле конфигурации;
- использовать в прерываниях версии сервисов, для того предназначенных (с окончанием на I).
Иначе будет что угодно, в том числе, и зависы.

Этого я не учел, потому и зависало... Надо переустановить ruki.sys
AVR
Нашел внизу страницы ссылку http://www.pumpkininc.com/
Просмотрел описание предлагаемой там ОС и нашел разительное сходство с jacOS. Только стоит там она $750-1250, а jacOS бесплатно. Отсюда вопрос - кто с кого слизал? biggrin.gif
pitt
Цитата(AVR @ Jul 15 2006, 09:26) *
Нашел внизу страницы ссылку http://www.pumpkininc.com/
Просмотрел описание предлагаемой там ОС и нашел разительное сходство с jacOS. Только стоит там она $750-1250, а jacOS бесплатно. Отсюда вопрос - кто с кого слизал? biggrin.gif

Никто ни у кого!
Таких систвм множество и все они друга на друга похожи.
osnwt
Цитата(AVR @ Jul 15 2006, 16:26) *
Только стоит там она $750-1250, а jacOS бесплатно. Отсюда вопрос - кто с кого слизал? biggrin.gif

В свое время на телесистемах обсуждался этот вопрос. Автор jacos и не скрывал, что начинал он с этой системы. Но после этого от нее в коде ничего не осталось, код стал оптимизирован намного больше, а похожими остались только сервисы (что не слишком удивительно, так как придумать тут что-то уже довольно сложно).
µµC
Цитата(osnwt @ Jul 15 2006, 23:05) *
В свое время на телесистемах обсуждался этот вопрос. Автор jacos и не скрывал, что начинал он с этой системы.


Это?
http://www.telesys.ru/wwwboards/mcontrol/7...ges/98942.shtml

Отправлено A.S. 04 сентября 2004 г. 15:07
"Могу просветить историю jacOS."
"jacOS это переделанный jaRTOS. jaRTOSом пользовался стародавние времена на примитивной советской электронике MC1402. Сначала под DOS, потом ПЗУ. Спецом для меня все писалось моим другом aka Perec. А под PIC я пытался использовать глюкодром под названием Salvo. Был большой проект и ближе концу выяснилось, что Salvo работать не будет. Пока я ковырялся с Salvo, за два месяца jaRTOS был переделан в jacOS. Самой большой потерей стали двусвязанные списки, динамическое создание задач, событий и таймеров. Самым большим приобритением стали таймауты и бинарные семафоры (влияние Salvo). Тем что получилось я очень доволен, портировано на все, что использую. На злопыхателей-импотентов Perecу начхать, проект то некоммерческий. Мне тем более начхать. Есть несколько человек, которые пользуются, обмениваемся наработками, иногда пиво вместе пьем."


Влияние salvo на jacos не отрицается. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.