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

 
 
> Многозадачность на авр
Dimmix
сообщение Sep 5 2010, 12:06
Сообщение #1


Знающий
****

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



Подскажите однако как лучше запустить многозадачность на авр-ах
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
slanted
сообщение Sep 6 2010, 21:49
Сообщение #2


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

Группа: Участник
Сообщений: 140
Регистрация: 2-01-08
Пользователь №: 33 768



Цитата(Dimmix @ Sep 5 2010, 16:06) *
Подскажите однако как лучше запустить многозадачность на авр-ах

Ничего сложного. Можно взять scmRTOS или freeRTOS, можно самому написать в расслабленном режиме за неделю.
Всего-то нужно уметь сохранять и восстанавливать контекст (за вдохновением см. реализацию setjmp и longjmp из avr-libc), ну и при запуске задачи придется вручную расписать нужную область памяти так, как это сделала бы функция save_context. Ну. и потом просто восстановиться туда - все, мы уже летаем.
На самом деле, занятие это достаточно грустное - скажем, в mega168 с её килобайтом памяти влезают всего две-три задачи, так что для таких развлечений лучше подобрать кристалл, где памяти хотя-бы два-четыре килобайта минимум.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 7 2010, 08:49
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(slanted @ Sep 7 2010, 01:49) *
На самом деле, занятие это достаточно грустное - скажем, в mega168 с её килобайтом памяти влезают всего две-три задачи, так что для таких развлечений лучше подобрать кристалл, где памяти хотя-бы два-четыре килобайта минимум.

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


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
slanted
сообщение Sep 7 2010, 14:34
Сообщение #4


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

Группа: Участник
Сообщений: 140
Регистрация: 2-01-08
Пользователь №: 33 768



Цитата(MrYuran @ Sep 7 2010, 12:49) *
Кроме вытесняющей, бывает ещё и кооперативная многозадачность, которая дополнительной памяти практически не требует.

Это как? Что там, что там - сколько задач, столько и контекстов, стеков и struct task'ов.

Цитата(777777 @ Sep 7 2010, 12:19) *
А как ее можно не запускать? Вряд ли хоть один проект может обойтись без прерываний, а обычно 90% работы выполняется в них. А что это, если не многозадачность?

Это не многозадачность, это асинхронная стейт-машина :-)

Цитата(sensor_ua @ Sep 7 2010, 07:19) *
Я предпочитаю кооператив а-ля Protothreads - как на AVR, так и на других МК.

Кооперативность или вытесняемость - вещь, в общем-то перпендикулярная к методу организации передачи управления.

Цитата
Считаю, что в большинстве случаев (кроме узкозаточенных решений) критичная ко времени реагирования часть кода должна быть минимизирована и умещаться в обработчиках прерываний, а остальное спокойно работать в фоне. Расход памяти при кооперативе значительно меньше, но приходится платить рулением статическими переменными и решать несколько больше вопросов синхронизации.

Все это так, но прототреды и прочие завуалированные стейт-машины дико неудобны тем, что _весь_ код должен поддерживать асинхронность сверху донизу. В какой-то момент придется выбирать: либо память и честное переключение контекста, либо повеситься без мыла на прерываниях.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 7 2010, 14:42
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(slanted @ Sep 7 2010, 18:34) *
Это как? Что там, что там - сколько задач, столько и контекстов, стеков и struct task'ов.
Кооперативность или вытесняемость - вещь, в общем-то перпендикулярная к методу организации передачи управления.

А вот и нет. В кооперативной задача сама "знает", когда отдаст управление, и соответственно сохраняет свой контекст. Не все регистры подряд, а только нужную инфу. Например, в static переменных. В отличие от вытесняющей, где ход выполнения задачи может прерваться вообще посреди оператора или функции.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
777777
сообщение Sep 7 2010, 15:55
Сообщение #6


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(MrYuran @ Sep 7 2010, 18:42) *
А вот и нет. В кооперативной задача сама "знает", когда отдаст управление, и соответственно сохраняет свой контекст. Не все регистры подряд, а только нужную инфу. Например, в static переменных. В отличие от вытесняющей, где ход выполнения задачи может прерваться вообще посреди оператора или функции.

Ага, я вот тут набросал многозадачную операционку с кооперативной многозадачностью:

Код
for(;;)
    {
    task1();
    task2();
    task3();
    // ...
    }
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dimmix   Многозадачность на авр   Sep 5 2010, 12:06
- - V_G   Работа по прерываниям - почти та же многозадачност...   Sep 5 2010, 13:25
- - Artem_Petrik   Цитата(Dimmix @ Sep 5 2010, 15:06) Подска...   Sep 5 2010, 14:37
- - _Pasha   Цитата(Dimmix @ Sep 5 2010, 16:06) Подска...   Sep 5 2010, 20:04
|- - slanted   Цитата(MrYuran @ Sep 7 2010, 18:42) А вот...   Sep 7 2010, 15:26
- - sensor_ua   Цитата...нужно уметь сохранять и восстанавливать к...   Sep 7 2010, 03:19
- - 777777   Цитата(Dimmix @ Sep 5 2010, 16:06) Подска...   Sep 7 2010, 08:19
- - sensor_ua   ЦитатаВсе это так, но прототреды и прочие завуалир...   Sep 7 2010, 16:19
|- - slanted   Цитата(sensor_ua @ Sep 7 2010, 20:19) Пох...   Sep 7 2010, 16:41
- - sensor_ua   ЦитатаПокажите код штоле ;-) Вот выдрал простой ку...   Sep 7 2010, 20:49
|- - slanted   Цитата(sensor_ua @ Sep 8 2010, 00:49) Вот...   Sep 8 2010, 11:40
|- - MrYuran   Цитата(slanted @ Sep 8 2010, 15:40) Я буд...   Sep 8 2010, 11:50
- - sensor_ua   Цитатая же могу просто в ключевых местах yield() р...   Sep 8 2010, 12:15
|- - slanted   Цитата(sensor_ua @ Sep 8 2010, 16:15) Вот...   Sep 8 2010, 14:20
- - sensor_ua   Цитатавы не сможете сделать yield изнутри функции ...   Sep 8 2010, 15:07
|- - slanted   Цитата(sensor_ua @ Sep 8 2010, 19:07) Про...   Sep 8 2010, 15:52
- - sensor_ua   ЦитатаНасколько дольше? Как по мне - придется в ка...   Sep 8 2010, 18:04
|- - slanted   Цитата(sensor_ua @ Sep 8 2010, 22:04) Бу...   Sep 8 2010, 21:13
- - DRUID3   Цитата(Dimmix @ Sep 5 2010, 15:06) Подска...   Sep 9 2010, 05:19
- - Dimmix   вариантов мультизадачности много, видимо нужен спе...   Sep 9 2010, 14:00
- - MrYuran   Цитата(Dimmix @ Sep 9 2010, 18:00) т.е. В...   Sep 9 2010, 14:49


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

 


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


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