|
Многозадачность на авр |
|
|
|
 |
Ответов
|
Sep 6 2010, 21:49
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 2-01-08
Пользователь №: 33 768

|
Цитата(Dimmix @ Sep 5 2010, 16:06)  Подскажите однако как лучше запустить многозадачность на авр-ах Ничего сложного. Можно взять scmRTOS или freeRTOS, можно самому написать в расслабленном режиме за неделю. Всего-то нужно уметь сохранять и восстанавливать контекст (за вдохновением см. реализацию setjmp и longjmp из avr-libc), ну и при запуске задачи придется вручную расписать нужную область памяти так, как это сделала бы функция save_context. Ну. и потом просто восстановиться туда - все, мы уже летаем. На самом деле, занятие это достаточно грустное - скажем, в mega168 с её килобайтом памяти влезают всего две-три задачи, так что для таких развлечений лучше подобрать кристалл, где памяти хотя-бы два-четыре килобайта минимум.
|
|
|
|
|
Sep 7 2010, 14:34
|
Частый гость
 
Группа: Участник
Сообщений: 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, так и на других МК. Кооперативность или вытесняемость - вещь, в общем-то перпендикулярная к методу организации передачи управления. Цитата Считаю, что в большинстве случаев (кроме узкозаточенных решений) критичная ко времени реагирования часть кода должна быть минимизирована и умещаться в обработчиках прерываний, а остальное спокойно работать в фоне. Расход памяти при кооперативе значительно меньше, но приходится платить рулением статическими переменными и решать несколько больше вопросов синхронизации. Все это так, но прототреды и прочие завуалированные стейт-машины дико неудобны тем, что _весь_ код должен поддерживать асинхронность сверху донизу. В какой-то момент придется выбирать: либо память и честное переключение контекста, либо повеситься без мыла на прерываниях.
|
|
|
|
|
Sep 7 2010, 14:42
|

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

|
Цитата(slanted @ Sep 7 2010, 18:34)  Это как? Что там, что там - сколько задач, столько и контекстов, стеков и struct task'ов. Кооперативность или вытесняемость - вещь, в общем-то перпендикулярная к методу организации передачи управления. А вот и нет. В кооперативной задача сама "знает", когда отдаст управление, и соответственно сохраняет свой контекст. Не все регистры подряд, а только нужную инфу. Например, в static переменных. В отличие от вытесняющей, где ход выполнения задачи может прерваться вообще посреди оператора или функции.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|