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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Многозадачность на AVR, Возможно ли такое?
AVR
сообщение Jul 2 2006, 21:55
Сообщение #1


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Возможно ли как-то реализовать в AVRах переключение с одного потока команд на другие, которые выполняются "параллельно"?


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 3 2006, 00:07
Сообщение #2


кекс
******

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



Вполне возможно. Есть два, пути:

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

Второй путь - организовать потоки таким образом, чтобы они сами передавали управление другим потокам. Тут путей реализации масса:
1. аналогично механизму WaitFor()/Sleep() в Windows.
2. короткие функции заведомо быстро выполняющиеся (с последовательным вызовом в основном цикле программы).
3. через простенький планировщик (который выполняется в контексте основного потока) и будет запускать периодические задачи через заданный интервал времени. Задачи не должны быть бесконечными, при завершении действия обязательно должны возвращать управление планировщику (механизми icall - ret).
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 3 2006, 03:34
Сообщение #3


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



http://www.avrfreaks.net/index.php?module=...&item_type=tool

http://www.circuitcellar.com/AVR2004/wabst...650abstract.pdf


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 3 2006, 12:55
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Или возьмите готовую scmRTOS от нашего уважаемого dxp и не мучайтесь долго.
Go to the top of the page
 
+Quote Post
osnwt
сообщение Jul 3 2006, 15:11
Сообщение #5


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

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



Цитата(IgorKossak @ Jul 3 2006, 15:55) *
Или возьмите готовую scmRTOS от нашего уважаемого dxp и не мучайтесь долго.

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

Как альтернатива, jacos - при определенном внимании к программированию задач позволяет очень эффективно реализовать псевдопараллельное исполнение независимых задач и обмен данными между ними. Сам в свое время попробовал - очень понравилось. Очень подробное описание (на русском языке) с множеством примеров. Хороша именно отличной оптимизацией под ряд контроллеров (в т.ч. AVR, PIC, MSP430).
Go to the top of the page
 
+Quote Post
AVR
сообщение Jul 3 2006, 17:18
Сообщение #6


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Большое спасибо за инфу smile.gif


--------------------
Go to the top of the page
 
+Quote Post
pitt
сообщение Jul 3 2006, 20:11
Сообщение #7


Местный
***

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



electronix.ru


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


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Может это поможет.Я , правда , не вникал.
Прикрепленные файлы
Прикрепленный файл  MTHREADS.txt ( 9.08 килобайт ) Кол-во скачиваний: 183
 
Go to the top of the page
 
+Quote Post
vesago
сообщение Jul 4 2006, 06:53
Сообщение #9


Тутэйшы
****

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



Как вариант - построение кода на основе конечных автоматов. Может не так удобно как оси, но зато меньше ресурсов надо.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jul 5 2006, 18:27
Сообщение #10


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



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

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


--------------------
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 6 2006, 03:01
Сообщение #11


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(AVR @ Jul 6 2006, 03:27) *
Цитата(osnwt @ Jul 3 2006, 19:11) *

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

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

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jul 6 2006, 20:35
Сообщение #12


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(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 работает, иначе программа вешается...


--------------------
Go to the top of the page
 
+Quote Post
osnwt
сообщение Jul 6 2006, 21:30
Сообщение #13


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

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



Цитата(AVR @ Jul 6 2006, 23:35) *
А из траблов программирования, то например что первое попалось на глаза это если компилировать с поддержкой функций-сервисов ОС в обработчиках прерываний, то программа почему-то вешается сразу.

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

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

Вообще, если можно обойтись в прерывании без вызова сервисов (или вообще других функций, особенно определенных в других файлах), то лучше так и делать. Иначе мы получим сохранение множества регистров (так как в общем случае компилятор имеет право использовать половину регистров в других функциях). В моей ситуации, когда мне было важно отрабатывать относительно точное время для одной из задач по прерыванию таймера, я в прерывании просто взводил битовый флаг в регистровой переменной, а снаружи его проверял (в основном цикле планировщика) и уже оттуда вызывал сервис OS. Получалось, что я, практически, из прерывания стартовал внешнюю задачу (которая получала при этом наивысший приоритет по определению из документации), и ничего не терял (так как у нас допустима погрешность в пределах кванта времени - раньше мы все равно не можем гарантировать вызов задачи.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jul 8 2006, 05:26
Сообщение #14


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



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

Этого я не учел, потому и зависало... Надо переустановить ruki.sys


--------------------
Go to the top of the page
 
+Quote Post
AVR
сообщение Jul 15 2006, 13:26
Сообщение #15


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Нашел внизу страницы ссылку http://www.pumpkininc.com/
Просмотрел описание предлагаемой там ОС и нашел разительное сходство с jacOS. Только стоит там она $750-1250, а jacOS бесплатно. Отсюда вопрос - кто с кого слизал? biggrin.gif


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:03
Рейтинг@Mail.ru


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